IntelArcでもStableDiffusionで絵を描きたい
まえがき
夏休みもそろそろ終わりますが,充実した休みにできましたか?私はまあまあでした.どうもウグイスです.
今回は新歓ブログから書く書く言って書いていなかった,IntelArcでStableDiffusionを動かす話をしていこうと思います.
モチベーション(Intel Arc)
読者の方はIntelArcというGPUをご存じでしょうか.
IntelArcはその名の通りIntelが作っているコンシューマ向けのGPUです.Intelは長いことコンシューマ向けのGPUを出していなかったのでドライバの未成熟さなどの問題はありましたが,最近は割と使えるみたい.
現在は第1世代のAlchemistが出ていまして,第2世代となるBattlemageが開発中らしいですね.来年の春以降のどこかで出るらしいので楽しみです.
現在出ているデスクトップ向けのIntelArcはいくつかあって
- A380(6G)
- A750(8G)
- A770(8G/16G)
現在,性能が一番いいのはA770です.
IntelArcでStableDiffusionを動かすモチベーションはA770の16GBのモデルとなっています.
VRAMについて
StableDiffusionに限らずAI系の処理はGPUで処理することが多いです.ここで問題になるのはVRAMの多さになります.VRAMとはGPUのメモリで計算前のデータや計算結果を入れておく場所になります.
つまりVRAMが多ければより多くのデータを置いておけます.つまりStableDiffusionで言えばより大きなサイズの画像の生成が可能になるということです.
ここでIntelの競合他社となるNVIDIAとAMDでVRAMが16GBを超えているモデルを見てみましょう.
NVIDIAで16GBのVRAMを持っている中で最安のグラボはRTX 4060tiです.これは大体7,8万円で買えます.
AMDで16GBのVRAMを持っている中で最安のグラボはRadeon RX 6800XTです.これは大体9万円といったところです.
しかしIntelArcは違います.16GBを持っているIntelArcA770 LimitedEditionは5,6万円で買えます.(私は5.2万円で購入)
IntelArcは最高(信者)
IntelArcの欠点
さてIntelArcは最高(信者)なのですが,残念なことにStableDiffusionで使うには少し不便な部分があります.
まず,主要なPythonのAIフレームワークであるPyTorchとTensorflowの公式では対応してません.
Intelがパッチを入れたPyTorchとTensorFlowがあるのでこれをインストールしてIntel Extension For PyTorch(またはTensorFlow)を導入したうえで,既存のソースコードを変更する必要があります.
今後,公式のバージョンに統合を予定しているみたいなので将来的にはAI系の処理をArcで処理することも一般的になるかもしれないですね
まあ要するに何が言いたいかというと現状,IntelArcを使ってStableDiffusionでイラスト生成を行いたい場合,環境を整えて,ソースコードを書き換える必要があります.
(補足)
最近のネット記事でopenvinoを用いてStableDiffusionで画像生成をしているのがありました.
一応私のやったことはOpenvinoとはちょっとだけ違うと思う?
環境
私のPCの環境
CPU:xeon e5 2696v3が二つ
GPU:IntelArcA770 LimitedEdition, IntelArcA750 玄人志向製
メモリ:ECC 16GBx8 128GB
電源:Hydro GT PRO 1000w
OS:Ubuntu22.04LTS
使用するライブラリなど
Stable Diffusion web UI
一番よくつかわれているのを見るStableDiffusionのWebUIですね.今回はこれのソースコードをいじくってIntelArcでも使えるようにしていきます.
Intel Extension for PyTorch
Intelハードウェア上でのより高速にAI処理を行うためのライブラリです.CPUとGPUに対応していてそれぞれ別バージョンで配布されています.
実際にやる作業
ドライバの導入
これはIntelの公式にあるので自分で調べてやってください.
Web UIを自分の環境に持ってくる
githubに公開されているのでそれを持ってきます.
git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git
webui-user.shの変更
# 以下の1行みたいな行を
export COMMANDLINE_ARGS=""
# 以下のように変更
export COMMANDLINE_ARGS="--skip-torch-cuda-test --skip-version-check --precision full --no-half"
# 私みたいにArcを2枚挿していて任意のデバイスを使いたい場合,--device-idのあとの数字を変更
export COMMANDLINE_ARGS="--skip-torch-cuda-test --skip-version-check --precision full --no-half --device-id 1"
これはデフォルトのコマンド引数の設定です.
–skip-torch-cuda-test:NVIDIAのGPUで使われるCUDAのチェックをスキップ
–precision full, –no-half:半精度を使わない設定みたいです.これ入れないとエラーを吐くので入れてます.でもArcって半精度計算できる気がするんですけど….プログラムミスかね?
# 以下のような行を
export TORCH_COMMAND=""
# 以下のように変更
export TORCH_COMMAND="pip install mkl torch==2.0.1a0 torchvision==0.15.2a0 intel_extension_for_pytorch==2.0.110+xpu -f https://developer.intel.com/ipex-whl-stable-xpu"
これはインストールするPyTorchのバージョンを指定するものです.
ここに入れたコマンドがPyTorchのインストールに使われるので,他に必要なライブラリのインストールもしています
modules以下のPythonファイルの変更
結構な数の変更があるし,現在も調整している途上なので,細かい変更は書かないでおきます.
ただ一応方針としては以下のように変更します.
- import torchの周りにimport intel_extension_for_pytorchを入れる
- cuda関連の処理をxpuで書き換える.
まあ需要がありそうなら変更がわかるようにして公開すること自体はありかもしれないですね.
起動
ここまでくればwebui.shを実行すれば少なくともtxt2imgは実行できると思います.
現状報告
現状ではtxt2img, img2imgは動く状態にはなっています.ただすべての機能が使える状態にはできてません.
またSeed機能は使えません.Seedの設定を行っても同じイラストは生成されません.まあ一期一会という言葉もあるので,二度と同じ画像が生成されない喜びを嚙み締めればいいと思います.
私のプログラムの変更のやりかたがまずかったのか,そもそも無理なのかは現状わかりません.
あとがき
新歓ブログから書く書く詐欺をしてきたArcでStableDiffusionを動かす話をブログに残せて安心しました.
これでここ半年で自分がやりたかったネタの消化ができたので,いい夏休みになったといっていいと思います.
割と頑張って動くようにしたので,割と楽しんでイラスト生成ライフをエンジョイしています.
まあプロンプトエンジニアリングとかネタにするにはつまらないのでブログにはなりません.
では,いつになるかわかりませんが次のブログでお会いしましょう.
コメント入力