Radeonでは、2024年の2月にZLUDAが公開されて以降、状況がガラリと変わってて、
もうwindowsで普通に使えてるよ。
AMD Radeonで Stable Diffusion webui A1111をwindows10直起動で使ってるよ (初版: 2024年6月)
本記事は、既にRadeonを持っていて Stable Diffusion をwindowsでちょっとやってみよう、という
お手軽ライトユーザー向けね。
本格派ガチ勢向けではないよ。またこれからVGAを買おうという人向けでもないからね。
まず現在のAI対応Radeon GPU一覧はココ
https://rocm.docs.amd.com/projects/install-on-windows/en/develop/reference/system-requirements.html
Windows-supported GPUsのタブがAMD Radeon PROタブになっていてその脇のAMD Radeonタブのところ。
RX7000シリーズ、および、RX6950XT, RX6900XT, RX6800XT, RX6800 これらが公式対応GPU。
#なお公式では非対応な扱いのGPUでも別途ライブラリを投入すればいけるらしいGPUのリスト(後述あり)
#gfx900(VEGA56, VEGA64), gfx906(RadeonVII), gfx1010(RX5700, RX5700XT), gfx1032(RX6600), gfx1031(RX6700)
Radeonでは、2024年の2月にZLUDAが公開されて以降、状況がガラリと変わってて、
もうwindowsで普通に使えてるよ。
2024年2月以前の情報は無視してOK。
それ以降も相変わらず的外れな情報が氾濫しているけど、それらは古い情報の受け売りだから、
あまり真に受けないように。AI関連では半年前の情報ですら既に古くて役に立たないどころか
害悪ですらあるからね。
特に、生成スピードとインストールの難易度がZLUDAで断然良くなったから。
生成スピードについては、wikiの グラボについて のZLUDA使用時の値と 5-3生成時間 を参考に。
インストールについては、下記長々と書いてるけど手数はNvidiaのときと基本変わらなくて、
Pythonのインストール、gitのインストール、AI開発キットのHIP SDKのインストール、
そしてA1111のインストールだ。
おおまかな流れ
1. 準備 (Nvidiaと共通)
ストレージ、SDXLモデルの用意, Python, git, Visual C++ Runtime, VGAのドライバ更新
2. AMDのAI用開発キット HIP の導入(AMD Radeon限定)
3. A1111のZLUDA版のインストール、起動 (Forgeも基本的に同じ)
4. APU機にVGAを挿して使っている場合限定の追加設定
つづく5, 6, 7, 8, 9 10 11 は おまけ
5. トラブルシューティング
6. ComfyUI ZLUDA版
7. SD.Next
8. おススメは
9. ZLUDAとは
自力ZLUDA化方法など。reForgeのインストール。
10. kohya_ss GUIでLoRA学習
11. Forge ZLUDA版
12. FLUX速度改善 (期間限定)
1. 準備 (Nvidiaと共通)
ストレージ、SDXLモデルの用意, Python, git, Visual C++ Runtime, VGAのドライバ更新
1-1 ストレージ
なんだかんだで100GBくらい消費するので空きを用意しておく。
Pythonがらみのファイルが数十GBと、結構消費する。
1-2 SDXLモデルの用意
SDXLモデルをひとつ、あらかじめダウンロードしておく。
ファイルサイズは7GBくらいある。
事前にモデルをダウンロードしておかないとどうなるかというと、
A1111などはインストール処理の途中でモデルの有無をチェックしていて、
モデルが無い場合は自動でモデルをひとつ、ダウンロードする。
そしてなぜかこういうときに限ってネットワークやサーバーが遅くなるもんで、
GB級のダウンロードで数時間待たされたあげく、最後の最後でダウンロードが
切れて失敗なんてことに。
モデル選びは、最初は流行りのモデルにしとけ。
いま2024年春なら、
昼向け: animagineXLV31_v31.safetensors (SHA256: 1449E5B0B9DE87B0F414C5F29CB11CE3B3DC61FA2B320E784C9441720BF7B766)
昼夜兼用: ebara_pony_2.1.safetensors (SHA256: cc6db13c9135afbb75df7cfed4fa99208a510da7c3d2d8bf9634e5576e6f1532)
これら2つはVAE内蔵なので初に使うのに向いている。
なお最初が実写系だといきなりトラウマレベルの絵が生成されたときのショックが
おおきいから最初はやめとけ。
次に進む前に、
モデル配布元にはSHA256などのhash値が書かれているので、
ダウンロードしたモデルのhash値があっているか確認しておく。
#microsoft純正だとfcivというツールがいちおうあるが、hash値が出せればなんでもよい。
hashの確認は、ファイル破損のほかにセキュリティの意味がある。
実際、つい最近(2024年6月)も、ComfyUIのとあるcustom nodeにmalicious codeが仕組まれていて
PCがhackされることが起こってる。
どこもhashを載せてるのはそういうこと。
1-3 Pythonインストール
Pythonを https://www.python.org/ から入手する。
Microsoft WINDOWS STOREにもPythonがあったりするが、それは使ってはいけない。
必ずpython.orgから入手する。
旧バージョンの、Python 3.10.6の64bit版をインストールする。
Windows installer (64-bit) とある、python-3.10.6-amd64.exe これ。
新しいバージョンの3.12などではなく、3.10.6をインストールする。
なおインストールの際、インストーラーのデフォルトのままどんどん進めると
Add Python 3.10 to PATH
のチェックボックスが非チェックになっているので、
ここをチェック済みにしてインストールを進める。
インストール後、PCを再起動。
次に進む前に一旦確認したい場合、コマンドプロンプトを開き、
python -V
と入力し(ここのVは、小文字のvではなく大文字のV。)、
Python 3.10.6
と表示されればOK。
エラーになったらそれは先のチェックボックスのチェックを
忘れてる。Pythonの再インストールだ。
1-4 git インストール
https://git-scm.com/
インストーラーでデフォルトのままどんどん進めるだけでOK。
途中で
Git from the command line and also from 3rd-party software
これ大事で、デフォルトだとこれが選択されている。
(将来的にもデフォルトで選択されてるかはわからん)
次に進む前に一旦確認したい場合、コマンドプロンプトを開き、
git -v
と入力し、
git version (バージョン番号)
と表示されればOK。
エラーになったらそれは先のGit from the command line …が選択され
てない。gitの再インストールだ。
1-5 Visual C++ Runtime インストール
通常は既にPCにインストールされているので、わざわざ再インストールする必要はない。
ただ、新品PCやOS再インストール直後だとこのRuntimeが入っていないので、下記をインストールする。
https://learn.microsoft.com/ja-jp/cpp/windows/latest-supported-vc-redist
ここのx86用とx64用の2つ。コレら。
https://aka.ms/vs/17/release/vc_redist.x86.exe
https://aka.ms/vs/17/release/vc_redist.x64.exe
インストールはデフォルトのままどんどん進めるだけでOK。
1-6 VGAドライバ更新
すでに最新にしているのなら、そのままでよい。(追記: 24.8.1はやめとけ(コメントからの情報の意訳))
最新以外なら、Radeon, Nvidiaともに適切なバージョンのドライバに更新する。
Radeonの場合は、2023年の30週以降のドライバにする。2023年11月以降ならOKなのは確認済み。
Nvidiaの場合は、バージョンによって出来ることと出来ないことが変わるので、
wikiの GeForceドライバ を参考にバージョンを選ぶ。
なお、公開から日が浅いドライバ(2週間が目安)は、更新する前に情報を収集すること。
RadeonもNvidiaもどちらもやらかすことがある。
このやらかしとは過電圧過電流ドライバで物理破損なんてのも含まれるので公開直後は要注意だ。
やらかし放題の業界だからしょうがない。
2. AMDのAI用開発キットHIP の導入(AMD Radeon限定)
AMDのAI用開発キット AMD HIP SDK for Windows をインストールする。
https://www.amd.com/en/developer/resources/rocm-hub/hip-sdk.html
ここの
5.7.1のHIP SDK AMD-Software-PRO-Edition-23.Q4-Win10-Win11-For-HIP.exe
もしくは
6.1.2のHIP SDK AMD-Software-PRO-Edition-24.Q3-Win10-Win11-For-HIP.exe
旧版5.7.1にするか、新版6.1.2にするか
AMD曰く、6.1.2は後方互換性は無い、とのことで、6.1.2にすると動かなかったりする恐れがある。
アプリ側は6.1.2への対応は進んでおり、A1111-ZLUDA, Forge-ZLUDA, SD.Nextは既に6.1.2と
5.7.1の両方に対応しているので、どちらでも大丈夫。残るComfyUI-ZLUDAは6.1.2に対応させる
気がなさそうなのだが、6.1.2化は簡単である(やりかたはComfyの項で後述)。
となると、どちらもよさそうではあるのだが、、、
まず旧版5.7.1は、枯れているのが利点なのだが、しかしZLUDAの配布元いわく、
ZLUDAの5.7.1対応版は突然終了するかもしれないから6.x系にしてね、とのこと。
では新版6.1.2はというと、先のComfyUI-ZLUDAの追加工程のほかに、
- 生成の安定性は変わらないが、一部アプリにて終了処理でよくわからない挙動になる事例がある
- 特に生成速度が速くなるわけでもない(6.2.0を自ビルドしたものだと少し速くなったらしい)
- 明確な利点は、新しいこと
- 逆に問題点は、旧型VGAだと6.1.2用のROCmLibsライブラリがまだ出そろってないので動かない
旧型VGAの場合、5.7.1であろうと6.1.2であろうとどちらであっても後述のROCmLibsライブラリ
の入替をしなければならないのだが、6.1.2は後方互換性が無いので、ROCmLibsライブラリも6.x用
のにしなければならない。しかしその6.x用のがまだ出揃っていない。なので、旧型は5.7.1一択。
なお、既に5.7.1でA1111などを使っていて、6.1.2に更新する場合、新しくA1111のフォルダ
造ってインストールし直すのがおススメなのだが、既存のを継続して使いたい場合は、
- アプリのバージョンが新しめでそのまま起動すると全自動で6.1.2に対応されればそのままでよい
- アプリのバージョンが古い場合は、それにこだわるなら後述のpatchzluda6.batを参考に
zludaの入れ替えになるが、そうでないならサクッとgit pullで更新しとりあえず起動、
すると全自動で6.1.2に対応されればそのままでよいのだが、されない場合は、下記の手順
1. コマンドプロンプトを開き、git pullにてアプリを更新する
2. .zludaフォルダ、またはzludaフォルダ(_zludaフォルダ?)、とにかくzludaのフォルダを削除
3. venvフォルダを中身ごとゴッソリ削除 (注: 必須ではないが推奨)
4. zluda.dbファイルを削除 (注: 必須ではないが強く推奨)
zluda.dbはC:\Users\(ユーザー名)\AppData\Local\ZLUDA\ComputeCacheフォルダ内にある
5. webui-user.batなどで起動。(初回起動時のzluda.db構築10分+10分待ちアリ)
HIP SDKのインストールは、インストーラーでデフォルトのままどんどん進めるだけでOK。
インストール時、ほとんどのチェックボックスは最初からチェック済みになってるが、
ディスプレイドライバーのところだけは未チェックになっている。先にVGAドライバの更新を済ませて
あるので、ここではディスプレイドライバーのチェックボックスは未チェックのままで先にすすめる。
ネット上の情報だとこれをインストール後にPATHの設定するなどとあるが、
インストールの際にデフォルトのままどんどん進めるとインストーラーが自動的にPATHを設定
するので、この点も大丈夫。
HIP SDKインストール完了後、ここでPCを再起動しておく。
* PATHの設定 *
いちおうここにPATH追加の設定方法も記しておく。
なお、A1111 ZLUDA, Forge ZLUDA, SD.NextではこのPATHの自動検出がらみで2024年7月末頃に
一時的に不具合があったが、既に直っているので、PATHの設定はしなくても大丈夫。
PATH追加の設定方法
#PATHの設定は、windows使ってると見たことがあるそれそのもの。
windows10の設定にて
設定 - システム- 詳細情報 から[システムの詳細設定]
とクリック。
すると、 システムのプロパティ というwindowが詳細設定タブで開くので、そこにある[環境変数]をクリック。
環境変数 というwindowが新たに開くので、
上段と下段の2つの枠うち下の段の、システム環境変数のところにある、
Path
をダブルクリック。(Pathは枠内を下にスクロールすると、真ん中くらいにある。)
新たに 環境変数名の編集 というwindowが開くので、
そこで右側の[新規]をクリック。
枠内に入力できるようになるので、
%HIP_PATH%bin
としてOK。
Pathが通ってるかの確認方法は、
コマンドプロンプトを開いて、
hipinfo
と入力すると、
device
から始まってずらずらとGPU情報が表示されればPathは通ってる。
対応GPUについて
AMD公式での対応GPUは、RX7000シリーズ、RX6950XT, RX6900XT, RX6800XT, RX6800。
これら以外のGPUでも非公式ながら別途ライブラリを投入すればいけるらしい。
ライブラリはソースから自ビルドするのが基本。
ネット上だと下記にビルド済み追加ライブラリがある。
なお、6.xのHIPは5.7.1のHIPとは互換性が無いので、6.1には6.1に対応したライブラリを使う。
2024年7月現在、下記で配布されているライブラリは5.7.1向けであり、6.x対応のはまだないので、
6.xのHIPでは使えない。なのでHIPは5.7.1のをインストールする。
https://github.com/brknsoul/ROCmLibs
RX6600用: Optimised_ROCmLibs_gfx1032.7z
RX6700用: Optimised_ROCmLibs_gfx1031.7z
それ以外(旧々型やAPU付属GPUなど): ROCmLibs.7z
ROCmLibs.7zの中身の一部を紹介すると、gfx900(VEGA56, VEGA64), gfx906(RadeonVII), gfx1010(RX5700, RX5700XT)
HIP SDKをインストールののち、
ROCm HIP SDK ライブラリフォルダ
C:\Program Files\AMD\ROCm\5.7\bin\rocblas\library
ここにライブラリを投入する。
6.1の場合は6.1用のライブラリをこちらに。
C:\Program Files\AMD\ROCm\6.1\bin\rocblas\library
また、VGAによってはrocblas.dllも入れ替える必要があるものもある。
配布ファイルにrocblas.dllが含まれている場合、libraryフォルダへの投入のほかに、
C:\Program Files\AMD\ROCm\5.7\bin\rocblas.dllも入れ替える必要がある。
6.xの場合はココ C:\Program Files\AMD\ROCm\6.1\bin\rocblas.dll
ライブラリなどを入れ替えたら、PCを再起動する。
##これは私見だが、
##いまはAIの過渡期なのでこのようにAI用の開発キットを別途インストールしなければ
##ならないけど、そのうちVGAドライバに含まれるようになると思う。
次に進む前に一旦確認したい場合、コマンドプロンプトを開き、
"%HIP_PATH%bin\hipInfo.exe"
と入力。
*コマンドプロンプトへ貼り付ける際は、前後のダブルクォーテーションが付いたままで貼ること*
(もし前後のダブルクォーテーションが無いと、Program Filesの部分にある半角スペースのせいで
コマンドが無いというエラーになる。)
このコマンドを入力すると、ずらずらと情報が出てきて、
先頭付近にある Name のところに
Name: AMD Radeon RX なんとか
のようにPCに挿したVGA名が表示され、そして最後あたりに
gcnArchName: gfx10xx
のようにVGAのアーキテクチャ名が表示されてればOK。
もし先頭付近のNameのところが挿したVGA名ではなく
AMD Radeon(TM) Graphics
などと表示されてたらそれはAPU内蔵GPUなので、この場合は別途設定が必要。
後述する、 4. APU機にVGAを挿して使っている場合限定の追加設定 を参照のこと。
3. A1111 のZLUDA対応Fork版のインストール、起動
方法はNvidiaのときとさほど変わらない。相違点は3つ。
ひとつ、ZLUDA用に別のフォルダに新規にインストールすること。
ふたつ、A1111の入手元をZLUDA Frok版にすること。
みっつ、起動オプションに --use-zluda を加えること。
3-1 A1111のZLUDA Fork版を入手
A1111のZLUDA Fork版のgithub
https://github.com/lshqqytiger/stable-diffusion-webui-amdgpu
インストール方法が書いてあるのでそれに従うだけ。
軽く書いておくと、
まず、インストールしたいフォルダを新規に作る。たとえば C:\A1111
全角文字はやめとけ。
かならず新規にフォルダを作ること。既にDirectMLなど他の方法でインストールしている場合、
手を抜いて使いまわそうとすると失敗するのでかならず新規にフォルダを作ること。
次に、新規に作ったフォルダでコマンドプロンプトを開く。
そして下記gitコマンドでA1111のZLUDA Fork版をダウンロード(clone)する。
git clone https://github.com/lshqqytiger/stable-diffusion-webui-directml.git .
3-2 SDXLモデルファイルの投入
git cloneするとフォルダ内にmodelsフォルダが出来、その中にStable-diffusionフォルダがあるので、
models\Stable-diffusion
このフォルダにあらかじめダウンロードしておいたSDXLモデルをコピーする。
3-3 起動用ファイル webui-user.bat の編集
ZLUDAを使うべく、起動オプションを設定する。
ファイルwebui-user.batの一部をメモ帳などで編集。
うっかりダブルクリックするとA1111が起動してしまうので、ダブルクリックはいまはしてはいけない。
メモ帳を開いてそこにドラッグアンドドロップ。
全部で数行しかなくて、そのなかで
set COMMANDLINE_ARGS=
とあるところを、
set COMMANDLINE_ARGS=--use-zluda
に書き換えてwebui-user.batを上書き保存。これによりZLUDAを使うようになる。
A1111の初回起動時に自動的にZLUDAのファイルがダウンロードされ、ZLUDAの設定も自動的に行われるようになる。
なお、ネット上の情報では、ZLUDAのインストールや設定を別途行うなどとあるが、それはZLUDA登場当時の話。
すぐに全自動化されたんだけども、古い話が拡散され続けてしまっている。
いちおう既に別途ZLUDAをインストールしてある場合も考慮されていて、既にZLUDAがインストール済みの場合、
それが最新版かチェックされ、最新版の場合はそのままインストール済みのZLUDAを使うようにもなっている。
あと起動オプションだが、定番オプションのうち、実際に使うのは少VRAM機で--medvram程度。
VRAMが16GB以上であればmedvramは必要ないが、RX7700XTなど12GBや8GB機だとmedvramが要るので、
set COMMANDLINE_ARGS=--use-zluda --medvram
と記述する。
他のオプションは、搭載VRAM量によって効果あったり無かったり、逆に悪化するものもある。
Nvidiaの際にみられる--xformersは動かないのと、
仮にxformersが動いたとしても昔はともかく今はxformersは不要。
#torchが1.x代の頃は、xformersによってわずかな品質劣化で大幅に速度が向上したが、
#現在のtorch2.xではtorch自体が速度向上したため、xfromersの効果はそれなりなんだけど、
#いまだにtorch1.x時代の古い情報が拡散され続けてる。
3-4 A1111初回起動
*必ずSDXLモデルを投入してから起動すること*
webui-user.batをダブルクリックして起動。
するとコマンドプロンプトが開いて処理内容がずらずらと表示されていく。
このコマンドプロンプトだが、これはたんなるコンソール表示窓ではなくむしろこちらが
いわゆる本体といえば本体なので、このコマンドプロンプトは閉じないこと。
起動すると各種ファイルのダウンロードが始まり、ざっと3GBくらいダウンロードするので、時間がかかる。
しばらくすると自動的にWebブラウザにwebUIが開くが、この時点ではまだ初回起動処理中。
OSのタスクマネージャーで軽いCPU負荷(シングルタスクにつきCPU1コア相当)が見えているあいだは
初回起動処理中である。
この状態でもgenerateボタンは押せるんだけど、生成プログレスバーは初回起動処理が終わるまでは出現しない。
この状態で10分くらい待たされる。
一見止まっているように見えるので不安になるかもしれないが、初回起動処理の進み具合が気になるのなら、
間接的に、zluda.dbのファイルサイズでわかる。
C:\Users\(ユーザー名)\AppData\Local\
ここに
ZLUDA\ComputeCacheフォルダが造られていて、その中に
zluda.db
があるので、そのファイルサイズを見る。
ゼロから徐々にサイズが大きくなっていって、45MBくらいになると、初回起動処理が終わる。
CPU負荷が無くなり、zluda.dbの肥大化もひとまず止まって、コマンドプロンプトに
calculate empty prompt(...)
と表示が出る。
ここまでの待ち時間はPCスペック次第だが、ダウンロード時間に加え10分くらいといったところ。
3-5 初回生成
まずはgenerateボタンを押す。
特になにも設定せずにいきなりgenerateボタンを押す。512x512サイズの生成が開始される。
先の初回起動処理がおわっていれば、今度は初回起動とはまた別の、初回生成処理が始まる。
これまた一見止まっているように見えるが、zluda.dbが肥大化し始める。
しばらくするとコマンドプロンプト内に生成プログレスバーが出現するも、
プログレスバーは0のままで全く進まず、そのあいだzluda.dbが肥大化し続ける。
この初回生成処理もたいだい10分くらいかかり、おわるとプログレスバーが動き出す。
zluad.dbファイルサイズが45MBから徐々に大きくなっていって、たいだい90MBくらいになると
プログレスバーが動き出し生成が始まる。
このような時間がかかるのはA1111インストール後の最初の1回目の生成のときだけ。(理屈は続くZLUDAに記述)
次回以降はすんなり始まる。
ただし、なんらかのバージョンアップをすると、再度初回処理が始まることがあり、そのときはまた待たされる。
AI関連のバージョンはもちろん、GPUドライバのバージョンなんかも変わればもう別物なのだからそういうものだ。
3-6 A1111終了方法
作法としてはコマンドプロンプト内でCtrl-Cののち n を入力して終了させるのだが、
いきなりコマンドプロンプトのwindowを閉じても強制終了はする。
強制終了しても特に不具合は起きないので、いきなりwindowを閉じて強制終了しても大丈夫。
ただし、強制終了だと生成時につくられた一時ファイルのゴミが大量に残る場合がある。
このゴミ、A1111のバージョンによって一時ファイルの削除の仕方が異なり、起動時に削除するのも
あれば、終了時に削除するのもある。
なので、終了時に削除するのだと、いきなりwindowを閉じて強制終了した場合はこの削除処理が
されないので、ゴミが残ったままとなる。
一方、起動時に削除されるのだと、次の起動時までゴミが残ったままになる。このゴミを見られて
困る場合は、削除のためだけに起動をしてなにも生成せずに終了させる。
この手のは一時ファイルやログを誰かに見られると大変なことになったりするので、一時ファイルや
ログのありかは確認しておいたほうがよい。一括削除用のbatファイルを作っておくと楽。
とりあえず、まず画像の生成をスタートし、途中でストップさせて、下記のフォルダを覗いてみよう。
C:\Users\(ユーザー名)\AppData\Local\Temp\gradio
またSettingsでこのあたりを設定する手もある。
Settingsタブ - Saving images - Saving images/grids
ここのコレと、
Directory for temporary images; leave empty for default
続くコレ。
Cleanup non-default temporary directory when starting webui
4. APU機にVGAを挿して使っている場合限定の追加設定
APU機にVGAを挿しているPCでは、AI用途がAPU内蔵GPU側に固定されてしまう場合がある。
その場合の選択肢は2つ。
4-a APUの内蔵GPUを無効化
APU内蔵GPUを無効化する。当然APU内蔵GPUは使えなくなる。
内蔵GPUを無効化するにはPCのBIOS設定でAPU内蔵GPUをdisableにする。
BIOSでdisableにせずにwindows OS上のデバイスマネージャーでAPU内蔵GPUを無効にする方法も
あるが、OSが勝手に復活させることがあるらしい?また無効ではなく削除だとOSは確実に勝手に
復活させるので削除は無意味。
4-b APU内蔵GPUを通常使用しながらもAI関連だけは挿したVGAのGPUを使うようにすべく、OSの環境変数を設定する
OSの環境変数でVGAを指定する。windows10の設定にて
設定 - システム- 詳細情報 から[システムの詳細設定]
とクリック。
すると、システムのプロパティというwindowが詳細設定タブで開くので、そこにある[環境変数]をクリック。
環境変数というwindowが新たに開くので、
上段と下段の2つの枠うち上段[ユーザー環境変数]のところの[新規]をクリック。
新しいユーザー変数というwindowが開き、そこで
変数名 HIP_VISIBLE_DEVICES 変数値 1
としてOK。そしてここでかならずPCを再起動する。
上記を設定してもAI用途にAPU内蔵GPUが使われてしまっている場合は、変数値を1ではなく
変数値 0
にしてPCを再起動。
ネット上の情報では、変数値は1にするとあるが、実際は個々のPCで異なり、
変数値は0, 1, 2のどれかが当たりなので、ひととおり試す。
いちど当たりを見つけさえすれば、PCを再起動してもコロコロと変わることは無いが、
マザーボードのBIOSを更新したら変わることもある。
いちおう確認方法はあり、
コマンドプロンプトを開いて、
"%HIP_PATH%bin\hipInfo.exe"
*コマンドプロンプトへ貼り付ける際は、前後のダブルクォーテーションが付いたままで貼ること。
ここで表示されているデバイスが、AI用に認識されるデバイス。
先頭付近にある Name のところに
AMD Radeon RX なんとか
という具合にPCに挿したVGAが表示されてればOK。
ここが
AMD Radeon(TM) Graphics
などと表示されてたらそれはAPU内蔵GPU。
上級者であれば、コマンドプロンプトでsetコマンド使って
set HIP_VISIBLE_DEVICES=0
と
"%HIP_PATH%bin\hipInfo.exe"
で当たりを探るのはもちろん、HIPが認識するGPUを切り替えてA1111を起動させたりもできるぞ。
5. トラブルシューティング
5-1 A1111やForgeのインストールがうまくいかないときは
A1111やForgeに限らず、この手のいろんな外部モジュールを使っているのは、それら外部モジュール側で
仕様変更があると動かなくなることが多々ある。
実際A1111でもForgeでもSD.Nextでもしょっちゅうある。
たいていは2,3日くらいで作者側で対応されるのだが、対応までに時間差があるので、たまたまそういうときに
あたると、当然うまく動かない。そういうものだ。
対応されるまで待つのもよいが、
その外部モジュールの旧バージョンを明示的に指定してやると動くようになるので、配布元のgitのdiscussionsや
Issuesのほか、fork元のおおもとのA1111のgitのdiscussionsやIssuesで話題になっていないか見てみよう。
#たとえば2024年春頃のpydantic関連ではこんな感じ。(本件は既に対処済み)
https://github.com/AUTOMATIC1111/stable-diffusion-webui/discussions/15557
あと特にForgeが顕著だが、どれもこれもいろんなモジュールてんこ盛りなので初回のwebui-user.batはよくコケる。
でもすぐに再度webui-user.batをおこなうとアッサリ起動したりする。そういうものだ。
5-2 生成は出来たがGPU負荷がゼロ
windowsのタスクマネージャーだとそうなる。
一昔前の、DirectMLの場合はGPU負荷が見えるのだが、ZLUDAはちょっと違う。
OSのタスクマネージャーは、GPUの負荷のうち3Dの処理負荷を表示していて、
ゲームなどでは3Dの処理に負荷がかかるからそれでよいんだけれども、
Stable Diffusionでの生成は、
Nvidia機や、RadeonでもDirectMLのときは3D処理なので負荷が見えるが、
ZLUDAの場合は3D処理ではないので、3D負荷はゼロだからGPU負荷がゼロに見えてしまう。
タスクマネージャーでZLUDAでの負荷を見るには、GPUの3DではなくCompute負荷を見る。
負荷表示グラフのうちどれかをプルダウンしてComputeに変更すると、生成時に負荷のグラフが現れる。
ComputeにはCompute 0 や Compute 1 など複数あって、どれか1つが当たりなので全部試す。
生成時にComputeの負荷がずっと99%前後になっていれば正常。もしグラフが大きく波打ってたら
たいていはVRAM不足でメモリスワップが発生している。
5-3 生成時間が長すぎるときは
それはGPU生成ではなくCPUで生成している。ネット上でもみかける。そこではRadeon遅いなどと
あるが、生成所要時間をみるにそれはCPUで生成している。
ネット上のあちこちの古い情報をごちゃまぜでやってるとそういう状況に陥りやすい。
githubにある一次情報を見ることを心掛けよう。
生成時間については、生成速度はあるていど推測が可能で、
GPUのTFLOPS値(単精度浮動小数点演算性能)に連動している。
https://ja.wikipedia.org/wiki/AMD_Radeon
RX 7900XTX: 61TFLOPS RX 7900XT: 52TFLOPS RX 7900GRE: 46TFLOPS RX 7800XT: 37TFLOPS RX 7600XT: 22.57TFLOPS RX 6950XT: 23.65TFLOPS RX 6900XT: 23.04TFLOPS RX 6800XT: 20.74TFLOPS RX 6800: 16.17TFLOPS (VRAM容量が8GBや12GBのはメモリスワップが発生するので除外)
VRAM容量が16GB以上であれば、TFLOPS値が倍なら生成速度はだいたい倍になると考えてよい。
よって自分のRadeonでの生成速度は他のRadeonの速度とTFLOPSの比から推測可能である。
Radeonの場合はZLUDA登場以前と以後では状況が大きく異なるので、速度を推測する際は、
ZLUDA使用の速度を元に計算すること。
そしてもしその推測値に比べ4倍くらい時間がかかっているのなら、それはZLUDAではなく
ひと昔前のやりかたのDirectMLにて生成している。
4倍どころか10倍などあまりにも長く時間がかかっている場合は、それはGPUではなく
CPUで生成している。タスクマネージャーでCPUとGPUの負荷をみればわかる。
5-4 拡張機能
Forgeで拡張機能が動かないのなら、それはForgeの問題。Radeonの問題ではない。
wikiのForgeのページ参照のこと。
あとありがちなのは、PonyやPony系モデルに非Pony系のを使ったり、その逆の
非Pony系モデルにPony用のを使ってると、それはうまく動かない。
またSD1.5専用の拡張機能をSDXLに使っていると、それもまともに動かない。
それはそういうものなので、Radeonの問題ではない。Pony系モデルにはPony用のをと、
それぞれのモデルに対応したのを使わなくてはならない。
特にPony系は、Pony公開当時はSDXLとして分類されていて、しばらくしてからPonyは
独自扱いになったので、その当時は混乱していたのと、いまだその名残が一部残って
いるので、良く調べる必要がある。
ネット上の情報にはSD1.5時代の古い情報がそのままになっているのが多いので、そういう
古い情報を参考にするとこういうことがおこりがち。
また古い情報ではRadeonでは動かないとあるのは、それはZLUDA登場以前の話。
たとえば学習は、DirectMLの頃は可能といってもとてもじゃないけど実用的ではなかったが、
ZLUDAで状況は変わった。
それでもZLUDAでもうごかないものはある。A1111ではあまりないのだが、ComfyUIだと
古い(2022年頃)のカスタムノードのなかには動かないのがある。ZLUDAではたとえば
Flash Attentionはサポートしていないので、Flash Attention必須のは動かない。
でも実際はそういう古いのはより高性能な新しいのに置き換わっているのがほとんど。
xformersもうごかないのだが、昔はともかく現在はxformersは必要としないし、xformersが
なくても問題なく動く。Nvidiaだってみんながみんなxformers有効にしているかというと
そんなことはないわけで、それでNvidiaで問題がおこっているかというとそんなことないし。
ただし、ComfyUIのカスタムノードでxformers必須のものは動かないので、それが絶対に
必要となればそれは大規模機械学習であろうからそれほどのヘビーユーザーならNvidiaの
最上位モデルへ。一方、ヘビーユーザーでなければ、
そこらへんはあきらめて大容量VRAMが手に入るRadeonか、
VRAM容量はがまんしてNvidiaか、
どちらにしても大規模機械学習だけクラウド使うのが非ヘビーユーザーには合理的。
そういうのとは別に、なにか微妙に違う、というのはありえる。推測だが、浮動小数点の
演算において速度のために演算精度を端折ってたりすると、その端折り方の違いで、
演算結果にわずかな違いが生じる。RadeonとNvidiaではその端折り方が違うし、
またどちらも世代が変わると端折り方を変えてくるので、その違いによって
結果にわずかな違いが生じても不思議ではない。たとえばNvidiaどうしでも
世代が違うと微妙に違うからね。
5-5 他の人の絵と同じ絵を出そうと同じ設定にしたのに同じ絵が生成されない
同じモデルを使っていてプロンプトも同じ、サンプラーもLoRAも拡張機能もなにもかも同じに
しているのにあまりにも違う絵が生成された場合は、設定で異なる部分がある。
たいていは、ENSDとかEta(2種類ある), Clip skipの値を合わせ忘れてる。これらは
設定する場所が違うので見落としやすい。txt2imgタブではなくSettingsタブの中にある。
もしモデル配布元のサンプルと同じ絵を生成しようとしているのなら、
あれは広告
広告なのだから、絵の加工やすり替えがされていると、同じ絵が生成されないのはそりゃそう。
自分がNvidiaで生成した絵との比較でRadeonで生成したら似たような絵が生成されたが
細部が少し違う、というのなら、それはそういうもの。
これはNvidiaのGPUどうしでもGPUのコアチップが異なるモデルで生成した絵どうしで比較すると
細部が変わってたりするので、細部が少し違くなるのは、そういうもの。
またA1111などのバージョンが違う場合も細部が変わることがあり、そういうもの。
先と同じ推測だが、浮動小数点の演算において速度のために演算精度を端折ってたりすると、
その端折り方の違いで、演算結果にわずかな違いが生じる。
乱数生成にもGPUで違いがあるのでこれが原因でも違いが生ずる。これは乱数生成方法を
試しに変更してみるとわかる。
A1111の設定の、
Settingsタブ - Stable Diffusion - Stable Diffusion
ココ。
Random number generator source. GPU / CPU / NV
デフォルトはGPUになっているが、いちどはCPUに変えて絵の変化をみておくとよい。
というか、デフォルトを当初からCPUにしておけばよかったのになぁと思うのだが。
5-6 再インストール
なんだかよくわからないけど不具合があるっぽい、というときはA1111の再インストールでスッキリ。
でもたいていはvenvの再構築で直る場合が多いので、再インストールするまえに一度venvの再構築を
試すのがおススメ。簡単だし設定は残ったままなので再設定しなくても良いから。
venvフォルダはgit clone時にはまだ無くて、A1111初回起動時に自動的に造られるフォルダ。
これvenvフォルダを中身ごとごっそり削除し、先の
3-4 A1111初回起動
をおこなうと、venvが再構築され、たいていの場合は直る。
それでも直らない場合はA1111の再インストールをするわけだけど、綺麗にインストール
しなおしたい場合は、python pip のキャッシュをクリアしてから再インストールを
おこなう。コマンドプロンプトで、
pip cache purge
これをやっておかないと、A1111インストール時のpythonがらみのファイルはこのキャッシュを使ってしまうので、
キャッシュファイルに不具合があった場合はキャッシュをクリアしない限り不具合は解決しない。
同様に、zluda.dbも削除する。再構築にまた時間がかかってしまうけれども。
6. ComfyUI ZLUDA対応Fork版
まず、ComfyUI ZLUDAは6.xのHIPへの対応はおこなうつもりは無いらしい。
でも突然5.x系HIPを切って6.x系HIPのみ対応になりそうでもある。
仕方がないのでここに6.x系の手抜きインストールの方法も一緒に書いておく。
github
https://github.com/patientx/ComfyUI-Zluda
ComfyUIとは。
The most powerful and modular stable diffusion GUI and backend.
最強、とのこと。
実例として、最新のSD3の公開の際は初日から対応していた。
6-0 事前準備
事前にやることはA1111とだいたい同じ。
ただし、Pythonのバージョンが少し違う。
READMEにPython (3.10.11 or 3.11 from the official website) と明記されている。
ここで困ったことに、先のA1111では
>旧バージョンの、Python 3.10.6の64bit版をインストールする。
とあるので、A1111とComfyUIの両方をインストールするにはどうしたものか。
いちおう、A1111のZLUDA Fork版も、おおもとのA1111も、どちらも公式で
Python 3.10.6をインストールしろ
と明記されているわけだが。
解決方法はいくつかあり、一番簡単な方法は、
A1111は3.10.11でも動くので、3.10.11をインストールしてしまう。
既にPython 3.10.6をインストール済みなら3.10.11でアップグレードインストール。
6-1 ComfyUIのZLUDA Fork版を入手
まず、インストールしたいフォルダを新規に作る。たとえば C:\ComfyUI
全角文字はやめとけ。
次に、新規に作ったフォルダでコマンドプロンプトを開く。
そして下記gitコマンドでComfyUIのZLUDA Fork版をダウンロード(clone)する。
git clone https://github.com/patientx/ComfyUI-Zluda .
6-2 SDXLモデルファイルの投入
モデルの自動タウンロードは、A1111とはちがって、ComfyUIではされない。(2024年6月現在)
モデルのフォルダ名もA1111とは違って、
models\checkpoints
ココ。ここにダウンロードしておいたSDXLモデルをコピーする。
6-3 install.batでインストール
HIPが5.7.1系の場合は、install.batをダブルクリックでインストール。7GBくらいダウンロード
するので時間がかかる。(上級者であれば、install.batの中身を見れば3GBに半減出来るぞ。)
ダウンロードが終わると自動的にwindowが閉じる。(PC設定によってはそのままComfyUIが起動する)
なお、HIPが6.x系の場合は、install.batとpatchzluda.batを編集してからinstall.batを
ダブルクリックでインストールする。
HIPが6.x系の場合、install.batがそのままだと5.xのHIP用のZLUDAがダウンロードされてしまい、
その5.x用ZLUDAは6.x系HIPでは動かないので、install.batとpatchzluda.batを編集する。
まず、install.batの、全部で100行は無いんだけれども、その真ん中から終わりくらいにある、
curl -s -L https://github.com/lshqqytiger/ZLUDA/releases/download/rel.c0804ca624963aab420cb418412b1c7fbae3454b/ZLUDA-windows-rocm5-amd64.zip > zluda.zip
の部分のZLUDAダウンロードURLを書き換え、下記にする。(rocm5をrocm6にする)
curl -s -L https://github.com/lshqqytiger/ZLUDA/releases/download/rel.c0804ca624963aab420cb418412b1c7fbae3454b/ZLUDA-windows-rocm6-amd64.zip > zluda.zip
続いて、フォルダにあるpatchzluda.bat。
これpatchzluda.batがZLUDAダウンロードしてZLUDAライブラリ3つの入替をやって
くれるbatファイルなので、まずpatchzluda.batをpatchzluda6.batにリネーム。
そしてpatchzluda6.batのZLUDAダウンロード用URLを書き換える。(ここも同じくrocm5をrocm6にする)
全部で10行程度のpatchzluda6.batファイルの中の、
curl -s -L https://github.com/lshqqytiger/ZLUDA/releases/download/rel.c0804ca624963aab420cb418412b1c7fbae3454b/ZLUDA-windows-rocm5-amd64.zip > zluda.zip
の部分のURLを書き換え、下記にする。
curl -s -L https://github.com/lshqqytiger/ZLUDA/releases/download/rel.c0804ca624963aab420cb418412b1c7fbae3454b/ZLUDA-windows-rocm6-amd64.zip > zluda.zip
あとは通常手順に戻る。
6-4 起動用ファイル comfyui.batとwebui-user.batの編集
A1111では起動にはwebui-user.batだけど、ComfyUIではcomfyui.bat(以前はstart.batだった)、けれども、
なんと2024年6月末にcomfyui.batに強制更新(git pull)が仕込まれた。これ、ろくなことがない。
これの対策も兼ねて、
comfyui.batをwebui-user.batという名前のにコピーし、そのwebui-user.batを編集して、
起動はwebui-user.batを使うようにする。(comfyui.batを編集してもgit pullで上書きされてダメだ)
#ちなみに更新はComfyUI Managerにupdateボタンがあるので、それが楽。
ファイルwebui-user.batを2か所、編集する。
全部で数行しかなくて、まず、3行目に下記1行を追加する。
set PATH=%PATH%;%HIP_PATH%bin;%~dp0zluda;%~dp0.zluda
つまり最初の数行はこうなる。
@echo off
set PATH=%PATH%;%HIP_PATH%bin;%~dp0zluda;%~dp0.zluda
set PYTHON="%~dp0/venv/Scripts/python.exe"
なんたらー
かんたらー
次に、git pullを削除。
git pull
とあるところを削除(空行にすればOK)し、webui-user.batを上書き保存。
いちおうset COMMANDLINE_ARGSという行があるが、ここは編集しなくてOK。
6-5 ComfyUI初回起動
さきに用意したwebui-user.batをダブルクリックしてComfyUIを起動する。
初回起動時のみ、ComfyUI ManagerやComfyUI-Impact-Packなどの便利機能や
各種モジュールの追加インストールがある。
WebブラウザにUIが起動したら最初からt2iが出来るようになっているので、
Modelのところでモデルを選択し、Promptのところになにかプロンプトを書いて、
画面下端にある Queue を押すと生成開始。(旧UIでは画面右端にある Queue Prompt )
初見でとまどうところは、生成開始ボタン。generateではなくQueue
インストール後の最初の生成時のみ、A1111と同様、数十分待つ。
ただしComfyUIの場合、待ちのタイミングがA1111とはちょっと違って、
最初のQueue Promptを押してからコマンドプロンプト内にプログレスバーが出るまで10分、
そしてプログレスバ-が0%から動き始めるまで10分。
zluda.dbのファイルサイズを見ながら待とう。
最後にComfyUI終了方法 ComfyUI Managerを開き、restartボタンを押すと終了する。再起動せずに終了するのだが、 本当に再起動した場合は、コマンドプロンプトにてCtrl-cののちnでwindowを閉じて終了。
ComfyUIは、t2iの簡単な生成だけなら難しくない。
高度なことをやろうとするとハードルは高くなるが、それでも高度なことをするのならComfyUIだそうだ。
7. SD.Next
github
https://github.com/vladmandic/automatic
SD.Nextとは。
Stable Diffusion implementation with advanced features
高機能、とのこと。
当初はA1111の多機能版Forkとして登場した。
機能が豊富ながらComfyUIとは違ったA1111系のわかりやすさがある。
開発は意欲的で、例えば最新のSD3への対応もSD3公開24時間以内にまずdev版で対応され、
翌日には正式版も対応していた。ZLUDAの実装が一番早かったのもこのSD.Next。
SD.Next登場時はA1111のFork版であったが、2024年の5月28日に
SD.Next is no longer marked as a fork of A1111 and github project has been fully detached
というわけで、Fork版ではなく完全に別プロジェクトとなった。
SD.NextをZLUDAで動かす場合のインストール方法はココ
https://github.com/vladmandic/automatic/wiki/ZLUDA
インストールにあたり、事前にやることはA1111やComfyUIとだいたい同じ。
Pythonは、先のComfyUIと同様、Python 3.10.11 64bit。
どうやらPython3.12に対応するべくうごいている(2024年6月現在)ようなので、
近日中にPython3.12対応となるかもしれない。
SD.Nextのインストール方法もA1111とほぼ同じ。
まず、インストールしたいフォルダを作る。たとえば C:\automatic
全角文字はやめとけ。
次に、そのフォルダでコマンドプロンプトを開き、下記gitコマンドでSD.Nextをダウンロード(clone)する。
git clone https://github.com/vladmandic/automatic .
clone直後だとmodelフォルダ内にはまだStable-diffusionフォルダが無い。(2024年6月現在)
続いて、SD.Nextの起動コマンドで初回インストールを実行させる。
SD.Nextの起動コマンドはA1111とは少し違って、下記のコマンドをコマンドプロンプト内で実行する。
#SD.Nextもいろんなモジュールてんこ盛りなので初回のwebui.batはコケることアリ。
webui.bat --use-zluda --debug --autolaunch
注: SD.Nextにはwebui-user.batは無いよ。(2024年6月現在)
正直面倒なので、先のA1111 ZLUDAからwebui-user.batをコピー拝借して、webui-user.batの
set COMMANDLINE_ARGS=
とあるところを
set COMMANDLINE_ARGS=--use-zluda --debug --autolaunch
に編集して流用しちゃいましょう。
初回インストール時のモデルの自動ダウンロードは無い。(2024年6月現在)
起動するとmodelsフォルダが出来、その内に各種フォルダも出来て、それらフォルダのうち
Stable-diffusionフォルダの中に事前に用意しておいたSDXLモデルをコピーする。
ここでちょっと先に書いておくと、SD.Nextには終了方法がある。
Systemタブの中の Shutdown server
を押す。
それともう一点、SD.Next使うときはタスクマネージャーなどでGPUのVRAM使用量を監視すること。
無事に起動しwebブラウザにUIが現れたら、最初の生成をする前に、一番最初にVAE tilingの設定をおこなう。
System - Settings - Diffusers Settings の中の VAE tiling をチェック
Apply settings を押したのち、一旦SD.NextをShutdown serverで終了させる。
なぜVAE tilingを有効にするのかというと、
SD.NextはVRAMが過剰に溢れるとVRAMの空きの回復がうまくいかなくなることが多々あり、そのような状態に
なるとSD.NextをRestart serverボタンで再起動してもダメで、一旦SD.NextでShutdown serverして終了し
また起動をしなければならない。
以前からずっとそうで、2024年6月現在のでも相変わらずであった。
VRAMが過剰に溢れるのは生成の一番最後のVAE処理時なので、そこでVAE tilingによりこの状態を回避する。
他の方法でも回避は可能だが、とりあえずはこれで。
SD.Nextもインストール直後の最初の生成時のみ、A1111と同様、数十分待たされる。
ただしSD.Nextの場合、待ちのタイミングがA1111とはちょっと違って、
最初のGenerateを押してからコマンドプロンプト内にプログレスバーが出るまで10分、
そしてプログレスバ-が0%から動き始めるまで10分。
その間の進行状況はzluda.dbのファイルサイズを見ながら待とう。
生成が進行しはじめると、プレビューに生成途中の絵が映し出され、生成が完了する。
ここで、生成途中のプレビューではそれっぽい絵が出ているのにもかかわらず最終的に
生成された画が真っ黒だったり、はたまた生成の最後の最後にエラーになった場合は、
たいていはVAEがらみ。VAEや、またmodel内蔵のVAEにより演算がうまくいかなくておこる。
そこで、SD.Nextの設定でVAEの挙動を指定する。
Systemタブ - Compute Settings - Execution precision にある、 Full precision for VAE (--no-half-vae)
ここのチェックボックスをチェック後、Apply settingsを押し、SD.NextをShutdown serverで
終了させ、SD.Nextを再度起動する。
あとはこれはお好みだが、Dynamic Attention BMMの設定もしておく。
After the UI starts, head on over to System Tab > Compute Settings Set "Attention optimization method" to "Dynamic Attention BMM", then click Apply settings.
一方、Experimental Settingsとして
deep-cacheを使った高速化があるが、ピーキーなのでこれはいまはやめとけ(2024年6月現在)
8. おススメは
ここまでで、A1111とComfyUI, SD.Next と、現在の定番3種類を網羅した。
どれにするかは、
とりあえずは A1111。
他の2つは、それぞれ得意なのが異なるので、なにをしたいのかによる。
ComfyUIは多機能で、動画生成するならComfyUI。
SD.Nextも機能の追加には意欲的。
そこで、
まずはA1111で生成までおこない、
その勢いで残りの2つもインストールしてそれぞれいちど生成してみるのが良い。
こういうのは勢いでやってしまおう。
後回しにするのはおすすめしない。
9. ZLUDA
ZLUDAとは。
ZLUDA lets you run unmodified CUDA applications with near-native performance on Intel AMD GPUs.
Nvidia向けのCUDAアプリケーションをAMDのGPUで使えるようにするプログラム。
CUDAアプリケーションが、変更なしにそのままでAMD GPUで動く。
パフォーマンスもネイティブに迫るほど。
ZLUDAのプログラムはexeが1つのほかDLLが機能別に数種類あり、A1111などではDLLを1つから
4つくらい入れ替えることでZLUDAによるCUDA化されている。なのでZLUDA用Fork版を使わなくても
自身でZLUDA化することは行われている。
ZLUDAでは高速化にあたり、実際にアプリケーションをZLUDAで使うときは、そのアプリのための
GPUコードをコンパイルする必要があるため、最初の1回だけは時間がかかる。
コンパイルして出来上がったGPUコードはzluda.dbにキャッシュ格納されるので、2回目以降は
キャッシュされたGPUコードが使われる。
A1111で最初の1回目だけ生成に時間がかかるのは、このGPUコードのコンパイルをやっているから。
留意点はいくつかあるが、A1111などに関係ありそうなのをいくつかあげておくと、
- AMD HIP SDKのバージョンによって使えるZLUDAが異なる
6.x系のHIPは、AMD曰く後方互換はないとのこと。実際、従来の5.x系HIP用のZLUDAは動かない。
6.x系のHIPには6.x用のZLUDAを、5.x系のHIPには5.x用のZLUDAを使わないといけない。
もしHIPを5.x系から6.x系にアップデートしたのなら、ZLUDA関連も入れ替えないと動かない。
なお、ZLUDA配布元は、5.x系について終了(Discontinue)宣言をしたが撤回して、
Please move to HIP SDK 6.1 if possible. 5.7 support can be discontinued at any time.
との記述が追加された。5.xは突然終了するかもしれないから6.x系にしてね、ってことだ。
- 完全にCUDAのサポートをしているわけではなく漏れがあるので、うまく動かないものもある。
たとえばFlash Attentionなんかがそう。(いちおうLinuxでROCm6.xならFlash Attentionは動く)
なのでFlash Attentionを使うComfyUIはZLUDA版だとFlash Attention非対応モードで動くわけだけど、
とくに不都合はないことがほとんど。(追記: 2024年夏にZLUDA対応Flash Attentionが出た。)
- 浮動小数点の演算において、NvidiaもAMDも、速度のために演算精度を端折ったり近似丸め込みを
しているのだが、そのやり方がそれぞれ異なっており、そしてZLUDAもまたそれらとは異なって
いるため、ZLUDAでの浮動小数点の演算結果は、NvidiaともAMDともわずかな違いが生じることがある。
この違いで、細部がわずかに違う画像が生成されることがある。ことがあるというか、される。
そもそもNvidiaのGPU同士の比較でも、GPUコアチップが異なれば生成画像がわずかに違くなるので、
そういうものだ。
- CPU内蔵GPU(APU)のPCにVGAを挿した場合、内蔵GPUを使おうとする。
この挙動はZLUDAではなく AMD ROCm HIP の仕様なのだけれども、ZLUDAにもついてまわる。
対策は先に書いた通りで、環境変数HIP_VISIBLE_DEVICESにてどのGPUを使うか指定する。
見方を変えるとこの値でGPUの切替が出来るのだから、これは利点でもある。
9-1 A1111 dev版 (自力ZLUDA化例その1)
A1111本家のdev版や開発用ブランチなどにはZLUDA化したFork版は無いので
正式リリースを待つわけだが、試したいのであれば自力でZLUDA化が可能。
ここでは手抜きZLUDA化方法を書いておく。
またreForgeも同じやり方で出来るのでreForgeも書いておく。
(2024年11月、reForgeで大型アップデートがあり、その影響で手順に変更アリ)
自力ZLUDA化の例その1: A1111 dev版
9-1-0 準備
前提として(必須ではないけど急がば回れだよ)、
A1111のZLUDA Fork版を導入済みで、ZLUDA使って画像が生成出来ていること。
9-1-1 A1111のdev版を入手
まず、インストールしたいフォルダを新規に作る。たとえば C:\A1111dev
全角文字はやめとけ。かならず新規にフォルダを作ること。
次に、新規に作ったフォルダでコマンドプロンプトを開く。
そしてgitコマンドでA1111のdev版をダウンロード(clone)する。
git cloneコマンドのブランチ指定にて、devを指定する。
git clone --single-branch --branch dev https://github.com/AUTOMATIC1111/stable-diffusion-webui.git .
reForgeのdev版(旧dev_upstream版)は新規フォルダ(例えばC:\reForgedev)造ったあとにこちら。
git clone --single-branch --branch dev https://github.com/Panchovix/stable-diffusion-webui-reForge .
reForgeの通常版は新規フォルダ(例えばC:\reForge)造ったあとにこちら。
git clone https://github.com/Panchovix/stable-diffusion-webui-reForge .
#単にreForgeといったら通常版ではなくdev版(旧dev_upstream版)のことのようだよ。
9-1-2 SDXLモデルファイルの投入
あらかじめダウンロードしておいたSDXLモデルをここにコピーする。
\models\Stable-diffusion
9-1-3 自力ZLUDA化: ファイル3つを書き換えるのと、手抜きツールpatchzluda.batを拝借する
- 一つ目: 起動用ファイル webui-user.bat を編集
全部で数行しかなくて、3行目に下記1行を挿入し、webui-user.batを上書き保存。
つまり最初の数行はこうなる。set PATH=%PATH%;%HIP_PATH%bin;%~dp0zluda
#いちおうset COMMANDLINE_ARGSという行があるが、ここは編集しなくてOK。@echo off set PATH=%PATH%;%HIP_PATH%bin;%~dp0zluda set PYTHON= なんたらー かんたらー
- 2つ目: modules\initialize.pyを編集
modules\initialize.pyのimport torchの直下に下記4行を挿入する。
たいてい10行目から30行目くらいのところに
があるので、その直下に下記4行を挿入。(import torchは消さないでね。書き換えではなく挿入だよ。)import torch
torch.backends.cudnn.enabled = False torch.backends.cuda.enable_flash_sdp(False) torch.backends.cuda.enable_math_sdp(True) torch.backends.cuda.enable_mem_efficient_sdp(False)
- 3つ目: modules\launch_utils.pyを編集
torchをCUDA11.8対応のものにするため、modules\launch_utils.pyのcu121をcu118に書き換える。
(デフォルトのままだとCUDA12.1用なので、ZLUDAでは使えない。)
何行目にあるかは探す。1カ所だけなのですぐに見つかる。
をtorch_index_url = os.environ.get('TORCH_INDEX_URL', "https://download.pytorch.org/whl/cu121")
に書き換える。torch_index_url = os.environ.get('TORCH_INDEX_URL', "https://download.pytorch.org/whl/cu118")
"modules\launch_utils.py"のcu121をcu118に書き換えずに後からtorchを入れ替える方法
コマンドプロンプトにてvenv内activateし、pipコマンドで一旦torchとtorchvisionを削除したのち再度pipでcu118を指定してインストールする。
実際のコマンドはこんな感じ。
venv\Scripts\activate
pip uninstall torch torchvision -y
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu118
torchパッケージ3GBの再ダウンロードで時間がかかる。2度手間でダウンロードも時間も
かかるのだが、のちのちの更新(git pull)を考慮すると、こちらのほうが良いかもしれない。
なお、torchのバージョンの指定も可能。たとえばtorch: 2.3.1+cu118だと、
venv\Scripts\activate
pip uninstall torch torchvision -y
pip install torch==2.3.1 torchvision --index-url https://download.pytorch.org/whl/cu118
* 注意事項
後述する 9-1-4 A1111devの仮起動 でwebui-user.batをおこなってからでないと、
このtorch入れ替えは実行できない。venvの構築がされてないから。
また、
後述する 9-1-4 A1111devの仮起動 にて2回目のpatchzluda.batをおこなう前に、
このtorch入れ替えを実行する。
もし2回目のpatchzluda.batをおこなった後にこのtorch入れ替えをおこなった場合は、
再度patchzluda.batを実行すること。(ライブラリファイル3つが入れ替わり、ZLUDA化される。)
- patchzluda.batを拝借する
手抜きのため、ComfyUIからZLUDA化手抜きツールpatchzluda.batを拝借する。
ComfyUI ZLUDAをインストール済みならpatchzluda.batは既にそこにある。
インストールしてないなら、git cloneだけしてそこからpatchzluda.batを拝借する。
またWebサイトから直接patchzluda.batを拝借してもかまわない。
https://github.com/patientx/ComfyUI-Zluda
とにかく用意する。ちなみに中身は全部で11行でコレ。(最後の1行は空行。wikiの仕様で表示されない。)
上記11行をpatchzluda.bat名で保存でもOK。用意したpatchzluda.batはA1111devフォルダ内に置く。@Echo off rmdir /S /q zluda curl -s -L https://github.com/lshqqytiger/ZLUDA/releases/download/rel.c0804ca624963aab420cb418412b1c7fbae3454b/ZLUDA-windows-rocm5-amd64.zip > zluda.zip tar -xf zluda.zip del zluda.zip copy zluda\cublas.dll venv\Lib\site-packages\torch\lib\cublas64_11.dll /y copy zluda\cusparse.dll venv\Lib\site-packages\torch\lib\cusparse64_11.dll /y copy zluda\nvrtc.dll venv\Lib\site-packages\torch\lib\nvrtc64_112_0.dll /y echo. @echo * ZLUDA is patched.
なお、このpatchzluda.batは5.7.1のHIP用であり、6.x系のHIPをインストールしている場合は
URL部分を6.x系ZLUDAの下記に書き換え、ファイル名をpatchzluda6.batにリネームして保存。curl -s -L https://github.com/lshqqytiger/ZLUDA/releases/download/rel.c0804ca624963aab420cb418412b1c7fbae3454b/ZLUDA-windows-rocm6-amd64.zip > zluda.zip
9-1-4 A1111devの仮起動
最初に、拝借したpatchzluda.bat(もしくはpatchzluda6.bat)をA1111devフォルダ内に置いてダブルクリックして起動。エラーが出るが、この段階ではA1111devフォルダ内にzludaフォルダが出来てその中にzluda.exeファイルなどがあればOK。
続いてwebui-user.batをダブルクリックしてA1111devを仮起動。
コマンドプロンプトが開き、各種処理がなされ、WebUIがひらいて、さらに少し時間がかかったあと
Stable diffusion model failed to load
というメッセージから続くエラーで止まる。
止まったら一旦コマンドプロンプトwindowを閉じてA1111devを終了する。
ここで、reForgeの2024年秋版など、もしtorchが2.4.xや2.5.xのような最新版になってしまっている場合、
ZLUDAはまだ対応していない(2024年秋現在、別branchで開発進行中)ので、先の9-1-3のところの
「後からtorchを入れ替える方法」にあるtorch==2.3.1指定で入れ替え、旧2.3.1に戻す。
そして、patchzluda.bat(もしくはpatchzluda6.bat)をまたダブルクリックして実行。
これによりライブラリファイル3つが入れ替えられ、ライブラリがZLUDA化される。
9-1-5 A1111devの起動
webui-user.batをダブルクリックしてA1111devを起動。
WebブラウザにWebUIが開くが、ここからzluda.db構築で10分待つ。
#A1111のZLUDA Fork版を導入済みで画像生成済みなら待たずに即開始されることもある。
以上でA1111devがZLUDAで動く。
9-1-6 A1111devの更新
A1111dev版にて更新があったら、コマンドプロンプトにて
git pull
で更新されるが、そのまま使えるかどうかは更新内容次第。
いつもどおりならそのまま使えるとおもうが、
もし modules\initialize.py や modules\launch_utils.py、またwebui-user.batが
更新されていたら、最初からZLUDA化のやり直しになると思われる。
#経験上、そういうことがあったのはComfyUIだけ。reForgeはありそうでまだない。
10. kohya_ss GUIでLoRA学習 (自力ZLUDA化)
お手軽ライトユーザーの学習(train)といえば、昔はともかく今はLoRA学習なので、
ここではkohya_ss GUIでのLoRA学習およびSDXL LoRA学習について触れることにする。
kohya_ss GUIでの学習は、LoRA学習以外にもDreamBooth学習やTextual Inversion学習など
いろいろ出来るのだが、それらはお手軽ライトユーザーの範疇から外れるのでここでは触れない。
あとGUIよりもコマンドラインCLIのほうが良かったりするのだけれども、これも同様の理由で
ここでは触れない。
基本的に自力ZLUDA化のやりかたは同じなので、kohya_ss GUIのLoRA学習の自力ZLUDA化の
方法だけわかればそれだけで十分であろう。ここに手抜きZLUDA化の方法を書いておく。
kohya_ss
LoRA学習は、現在よく目にするのはkohya_ss GUIと呼ばれているコレ。
github
https://github.com/bmaltais/kohya_ss
このうち、核となる学習本体は、kohya-ss/sd-scripts。
github
https://github.com/kohya-ss/sd-scripts
このkohya-ss氏が開発した学習本体sd-scriptsをbmaltais氏がGUI化したのが、bmaltais/kohya_ss。
名前が紛らわしいのだが、bmaltais氏kohya_ssは、 kohya_ss GUI と呼ばれているようだ。
bmaltais氏のbmaltais/kohya_ssをダウンロード(git clone)すると、
学習本体であるkohya-ss氏のsd-scriptsも自動的にダウンロードされるようになっている。
デキル人はGUIなんて使わずコマンドラインCLIで直でkohya-ss氏のsd-scriptsを使うのだろうが、
お手軽ライトユーザーはGUI化したbmaltais氏kohya_ss (= kohya_ss GUI) ということのようだ。
でもLoRA学習は、実際はGUIよりもコマンドラインCLIのほうが楽だったりするぞ。
10-0 準備
- 前提として、
A1111のZLUDA Fork版を導入済みで、ZLUDA使って画像が生成出来ていること。
- Pythonのバージョン
学習本体のsd-scripts自体はREADMEにPython 3.10.6
と明記されているのだけれども、一方、kohya_ss GUIのREADMEにはInstall Python 3.10.11.
とある。
#以前は3.10.6だったのに……。
そこでどうするかだが、先の ComfyUIインストールの 6-0 事前準備 で触れたとおり、
ここはPython 3.10.11をインストールしてしまうのが簡単。
Python 3.10.6を導入済みなら3.10.11でアップグレードインストール。
10-1 kohya_ss GUIの入手
まず、インストールしたいフォルダを新規に作る。たとえば C:\kohya_ss
全角文字はやめとけ。
かならず新規にフォルダを作ること。
次に、新規に作ったフォルダでコマンドプロンプトを開く。
そして下記gitコマンドでkohya_ss GUIをダウンロード(clone)する。
git clone --recursive https://github.com/bmaltais/kohya_ss.git .
するとkohya_ss GUIがダウンロード(clone)されるのに続いて
核となるkohya-ss/sd-scriptsも自動的にダウンロードされる。
10-2 dev版 SD3 Flux版 (スキップ)
kohya-ss氏のsd-scriptsではdev版でSDXLの改良がおこなわれていたり、また別の版でSD3やFluxに対応させて
いたりするのだけれども、それら機能が通常版(main)に反映されるにはまだ時間がかかりそう。
一方、GUIのほうでもそれらsd-scriptsのdev版に対応したGUIのdev版が存在する。
なので、dev版をGUIででも使いたい場合は、
新規フォルダ(例えばc:\kohya_ssDEVなど)を作成し、
git clone --single-branch --branch dev --recursive https://github.com/bmaltais/kohya_ss.git .
またsd3やFluxなら、
git clone --single-branch --branch sd3-flux.1 --recursive https://github.com/bmaltais/kohya_ss.git .
これらではrecursiveにより連動したsd-scriptsがダウンロードされる。GUIのdev側が更新され
たときのsd-scripts版になるので、sd-scripts側は最新devより少し旧いdevなこともある。
*注意: devすなわちdevelop開発版なんだから、まともに動くなどと期待してはいけない*
10-3 kohya_ss GUIの仮起動
つづいてコマンドプロンプト内で
setup.bat
を実行する。もしくはsetup.batをダブルクリックで起動。
すると選択メニューが出る。
Kohya_ss setup menu:
1. Install kohya_ss GUI
2. (Optional) Install CuDNN files (to use the latest supported CuDNN version)
3. (DANGER) Install Triton 2.1.0 for Windows... only do it if you know you need it... might break training...
4. (Optional) Install specific version of bitsandbytes
5. (Optional) Manually configure Accelerate
6. (Optional) Launch Kohya_ss GUI in browser
7. Exit Setup
Select an option:
ここで最初に 1 を入力。
各種モジュールがダウンロードされる。3GBくらいあるので時間がかかる。
終わると再度選択メニューが出るので、
次は 5 を入力。
5のManually configure Accelerateをおこなう。
入力を求められるので、答えは順番に、
This machine No distributed training NO NO NO all fp16
すると、フォルダ
C:\Users\(ユーザー名)\.cache\huggingface\accelerate
にファイル
default_config.yaml
が生成される。ファイルの中身には先の答えが反映されている。
そしてまた選択メニューが出るので、
7でExit Setup
これにて一旦終了。コマンドプロンプトも閉じてかまわない。
ネット上の情報では、1でインストールしたあと上から順番に2などもやっていくなどとあるが、
それらはこの時点ではやらない。やるのは、1, 5, 7。
10-4 ZLUDA化
10-4-1 LoRA学習用ブログラムを編集しZLUDA化
SD1.5のLoRA学習をZLUDA化する。
SDXLのLoRAの学習はSD1.5とは別のブログラムが使われているが、内部でSD1.5用のLoRA学習が
呼び出されており、SD1.5のLoRA学習をZLUDA化してしまえばSDXLのLoRA学習もZLUDA化される。
SD1.5のLoRA学習では
sd-scriptsのtrain_network.py
これが使われるので編集しZLUDA化する。
train_network.pyの、だいたい10行目から20行目あたりに
import torch
があるので(2024年6月は14行目)、その直下に下記4行を挿入し、train_network.py上書き保存。
torch.backends.cudnn.enabled = False
torch.backends.cuda.enable_flash_sdp(False)
torch.backends.cuda.enable_math_sdp(True)
torch.backends.cuda.enable_mem_efficient_sdp(False)
10-4-2 torchをZLUDA対応版に(スキップ)
torchとtorchvisionをZLUDAに対応したバージョンへ入れ替え
torchがCUDA12.1版だとZUDAが対応していないため、ZULDAが対応しているCUDA11.8版にする、のだが、
kohya_ss GUIでは最初からCUDA11.8版なので、入れ替えの必要はない。(2024年6月現在)
もし将来アップデートでCUDA12.1版になってしまったときは、
9-1-3 自力ZLUDA化: ファイル3つを書き換えるのと、手抜きツールpatchzluda.batを拝借 の、
3つ目: modules\launch_utils.pyを編集
を参考に、コマンドでtorch2.1.2+cu118へ入れ替えるかソースコードを書き換えてcu118にする。
torchを入れ替えたら、続く 10-4-3 ZLUDA化手抜きツール でライブラリファイルを入れ替える。
10-4-3 ZLUDA化手抜きツールpatchzluda.batを用意し実行
手抜きのため、ComfyUIからZLUDA化手抜きツールpatchzluda.batを拝借する。
ComfyUI ZLUDAをインストール済みならpatchzluda.batは既にそこにある。
インストールしてないなら、git cloneだけしてそこからpatchzluda.batを拝借する。
またWebサイトから直接patchzluda.batを拝借してもかまわない。
https://github.com/patientx/ComfyUI-Zluda
とにかく用意する。ちなみに中身は全部で11行でコレ。(最後の1行は空行。wikiの仕様で表示されない。)
@Echo off
rmdir /S /q zluda
curl -s -L https://github.com/lshqqytiger/ZLUDA/releases/download/rel.c0804ca624963aab420cb418412b1c7fbae3454b/ZLUDA-windows-rocm5-amd64.zip > zluda.zip
tar -xf zluda.zip
del zluda.zip
copy zluda\cublas.dll venv\Lib\site-packages\torch\lib\cublas64_11.dll /y
copy zluda\cusparse.dll venv\Lib\site-packages\torch\lib\cusparse64_11.dll /y
copy zluda\nvrtc.dll venv\Lib\site-packages\torch\lib\nvrtc64_112_0.dll /y
echo.
@echo * ZLUDA is patched.
上記11行をpatchzluda.bat名で保存でもOK。用意したpatchzluda.batはC:\kohya_ssフォルダ内に置く。
なお、このpatchzluda.batは5.7.1のHIP用であり、6.x系のHIPをインストールしている場合は
URL部分を6.x系ZLUDAの下記に書き換え、ファイル名をpatchzluda6.batにリネームして保存。
curl -s -L https://github.com/lshqqytiger/ZLUDA/releases/download/rel.c0804ca624963aab420cb418412b1c7fbae3454b/ZLUDA-windows-rocm6-amd64.zip > zluda.zip
拝借したpatchzluda.bat(もしくはpatchzluda6.bat)をC:\kohya_ssフォルダ内に置いて
ダブルクリックして起動。エラーが出るが、C:\kohya_ssフォルダ内にzludaフォルダが
出来てその中にzluda.exeファイルなどがあればOK。同時にライブラリもZLUDA化される。
10-4-4 gui.batの編集
起動用batファイルgui.batを編集する。kohya_ss GUIの起動はgui.batね。
3行目に下記1行を追加し、gui.batを上書き保存。
set PATH=%PATH%;%HIP_PATH%bin;%~dp0zluda
つまり最初の数行はこうなる。
@echo off
set PATH=%PATH%;%HIP_PATH%bin;%~dp0zluda
set PYTHON_VER=3.10.9
なんたらー
かんたらー
なお、batファイルをよく見るとこれではPATHのsetがダブってしまうが、全く問題ない。
10-5 kohya_ss GUI 起動
gui.batをダブルクリックで kohya_ss GUI を起動。新たにコンソールwindowが開き、表示の中に
Torch detected GPU: AMD Radeon RX なんとか [ZLUDA]
と表示されていればZLUDA化されている。また http://127.0.0.1:7860 と表示されるので、
Webブラウザで
http://127.0.0.1:7860
にアクセス。
ちなみに終了方法 コンソールwindowでCtrl-cで終了させたあと、windowを閉じる。 windowをいきなり閉じると強制終了となるが、特に強制終了でも問題ない模様。
10-6 LoRA学習の設定
Radeon ZLUDA用に、2か所、もしくは3カ所設定を変更する。
Webブラウザで
http://127.0.0.1:7860
にてkohya_ss GUIを表示。
GUI上でLoRAタブに移動し、
下のほうのParametersを展開。
続いてさらに下のAdvancedを展開。
- 変更1カ所目: CrossAttentionの変更
場所は中段付近にある。
CrossAttentionがxformersになっていると動かないので、noneもしくはspdaに切り替える。
#xformersもspdaもどちらも品質を犠牲にして速度の向上を図るオプション。
#画像生成の際はそれらオプションはお好み程度の認識でもよいが、
#学習の場合は品質への影響を考慮する必要がある。
- 変更2カ所目: Gradient checkpointingの変更
場所は先のCrossAttention設定付近にある。
Gradient checkpointingをチェック済みにしておかないと、VRAM容量が厳しいかもしれない。
- 変更3カ所目: Optimizer
OptimizerがAdamW8bitだとエラーで使えないと思う。
そこで、AdamWなど、他のに変更する。
ちなみにAdamW8bitではこんな謎エラーが出るようだ。Error named symbol not found at line 218 in file D:\a\bitsandbytes\bitsandbytes\csrc\ops.cu
LoRA学習をするにあたり、たいていは最初はサンプルコンフィグを読み込んで使うと思われるが、
それらの初期値はxformersが有効になっていたりするので、上記を変更しないと動かない。
一度使うと自分用ベースコンフィグを読み込んで使うようになるので、変更は最初だけである。
学習すると出力フォルダにそのコンフィグも出力されるので、次回からはそのコンフィグファイルを
自分用ベースコンフィグとして読み込んで使う。
10-7 LoRA学習開始
学習は高負荷が長時間続くので、学習の際はVGAの設定で
省電力モードにしておくのがおススメ
AMD Adrenalin Editionのパフォーマンス チューニングの
電源チューニングで電力制限をするのが簡単
LoRAタブにて各種設定をし、 Start training で開始すると、
コマンドプロンプトで処理が始まり、多くのメッセージが表示されたのちに、
学習のプログレスバーが0%で止まったような状態になる。
CPUにシングルタスク相当の負荷がかかり、zluda.dbの肥大化が始まる。
10分くらい待つと、処理が進み始める。この10分間の待ちは初回のみだが、
SD1.5とはまた別にSDXLでも初回10分待ちは発生するかもしないかも。
#SDXL LoRA学習の初回は待ち時間にバラつきがあってよくわからん。
- LoRAタブへの移動を忘れてDreamBooth学習タブでいろいろ設定して
Start trainingでタブ移動忘れに気が付くことがあるそうな。よくみかける。
- bitsandbytesがインストールされていないというエラーが出ることがあるらしい。
https://github.com/kohya-ss/sd-scripts/issues/1038
上記によると、対処方法としては下記でbitsandbytesの再インストール。venv\Scripts\activate pip uninstall bitsandbytes python -m pip install bitsandbytes==0.41.1 --prefer-binary --extra-index-url=https://jllllll.github.io/bitsandbytes-windows-webui
- SDXLのLoRA学習ではVAEの問題がおこることがあるそうな。
モデルによるのだとおもうが、VAEの問題といえば黒画面が出る話のことかな?
VAEの問題は設定で No halfVAE の有効化/無効化を切り替えて回避できるそうな。
- SDXL LoRA学習は、実績としてVRAM16GBにて標準的品質のFP16で出来ている。
しかしVRAMが12GBとなると厳しいだろう。ネット上では12GBでもSDXL LoRA学習できる
というのが見受けられるが、それはFP8などで品質を下げての学習の話。
学習で品質を下げるのはすすめられることではく、良く考える必要がある。
イマドキは、学習するならクラウド使うのが合理的であろう。
10-8 学習成果の確認(画像生成)
学習成果の確認のための画像生成だが、kohya_ss GUIのAboutには、
Once you have created the LoRA network, you can generate images using auto1111 by installing this extension.
学習成果の確認の画像生成はA1111で、とある。
#核であるsd-scriptsには画像生成機能があるんだけど、GUI化はせずA1111に丸投げだ。
出来上がったLoRAファイルを
A1111の models\Lora
にコピーし、promptでLoRAを呼び出し画像生成して確認。
* SD1.5モデルにはSD1.5用のLoRA、SDXLモデルにはSDXL用LoRA、PonyにはPony用でないと機能しないよ*
~~~ コメントから (意訳) ~~~
学習中の各段階毎のプレビュー画像生成機能がある。
GUI上のLoRAタブの下のほうの Parameters を展開し、その下のほうにある Samples を展開して、
例えば Sample every n epochs を 1 などに設定しプロンプトを入力しておくと、
学習中各段階で、LoRAが適用されたプレビューpng画像がoutputs\sampleフォルダに都度生成される。
なおこの画像生成においても初回のみ10分待ちがあったりする。zluda.dbサイズを見ながら待とう。
#たまたまこの待ちのタイミングでwarningが出たりするので、焦って失敗したと勘違いしがち。
注意点として、SDXL LoRA学習の場合、VRAM容量によってはこの画像生成時にVRAMが溢れエラーに
なることがある。回避方法としては、起動用の gui.bat の3-5行目あたりに
set PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:512
を追加するとうまくいくようだ。
11. Forge ZLUDA対応Fork版
まず、Forgeでは2024年6月に大規模方針転換宣言があったので、Forgeはおすすめできないね。
github
https://github.com/lshqqytiger/stable-diffusion-webui-amdgpu-forge
Forgeとは
Stable Diffusion WebUI Forge is a platform on top of Stable Diffusion WebUI (based on Gradio) to make development easier, optimize resource management, speed up inference, and study experimental features. The name "Forge" is inspired from "Minecraft Forge". This project is aimed at becoming SD WebUI's Forge.
とのことだが、大きな方針転換があったりと、常に追いかけていないとよくわからん。
方針転換で別物になったことで、Forgeといっても大きく3つに分かれる。
新しいのから順に、
- 最新Forge
2024年8月に大規模更新があり、Forge v2 になった。
ダウンロード(git clone)はこのコマンド。
新規フォルダ(例えばC:\forge2)を作って、
Forge v2 ではzluda.dbの10分待ちのタイミングが変わった? Generate押してから10分+10分。git clone https://github.com/lshqqytiger/stable-diffusion-webui-amdgpu-forge.git .
- A1111のv1.10をForkしたForge
A1111が1.10になった際に更新されたForge。
それ以前のForgeとはだいぶ違う。また最新とも違う。
この旧版にしたい場合は、 git clone をしたのち git checkout で過去に遡らせる。
旧版用に別フォルダ(例えばC:\forge110)を作って、git clone https://github.com/lshqqytiger/stable-diffusion-webui-amdgpu-forge.git . git checkout 7e4c76dbab636d6860b17819fc7c19967cb8960c
- 初期系統のForge
ネットで話題にされているForgeはたいていコレ。
この旧版にしたい場合、 git clone をしたのち git checkout で過去に遡らせる。
別フォルダ(例えばC:\forge1)を作って、git clone https://github.com/lshqqytiger/stable-diffusion-webui-amdgpu-forge.git . git checkout 4a93f424d40948a1f4630872517a6281dc7daa11
インストール方法はA1111ZLUDAと同じ。ダウンロード(git clone)で指定するURLが違うだけで、
続く手順はA1111ZLUDAと全く同じなので、
3 A1111 のZLUDA対応Fork版のインストール、起動
を参考に。
インストールの際、Forgeはいろんなモジュールてんこ盛りなので、初回のwebui-user.batはよくコケる。
でもすぐに再度webui-user.batをおこなうとアッサリ起動したりする。そういうものだ。
なお上記Forgeの3つどれも6.1.2のHIPと5.7.1のHIPの両方に全自動対応している。
(ただし、上記の初期系統Forgeよりもさらに古いバージョンだと6.1.2のHIPには非対応。)
- VRAM8GBでもSDXLがまともに使える
- VRAM12GやVRAM8Gで大幅な速度向上
- 使い勝手や生成出力画がA1111とほぼ同じ
というわけで、VRAMが8Gや12G機ならForgeは試してみるのがおススメ。
一方、VRAMが16GB以上あると、見解が異なる。
VRAMが16GB以上の場合、メリットとしては、
そしてあまり語られないデメリットもあり、
VRAMが16GB以上ある場合、メリットとデメリットそれぞれを考慮すると、
スピードのわずかな向上に対しデメリットが大きすぎるので、おススメはしない。
なんせ、A1111はとても安定している。
A1111にはあとはForgeには標準搭載のTiled VAEが使えるように拡張機能で
multidiffusion-upscaler-for-automatic1111
を入れてしまえばOK。大きなサイズの画のときだけTiled VAEを使うとメモリーが溢れない。
生成出力画は、ForgeはA1111より劣る。たとえばForgeは耳の位置がずれる。Forge耳。
wikiの Forge でも
処理は早いが正確な描写を苦手とする。特に手や足が破綻しやすい。背景のクオリティも若干下がる。
と触れられているとおりで、
手足の指の破綻も多いのだが、これはA1111でも多いのでしかたのないところだけど、
ネットでForgeとA1111とで「全然違わないでしょ」と言って比較サンプル出した人の
その比較絵を見たら、A1111で指6本に破綻しているのがForgeだと7本になってた……。
AI生成に慣れてくると破断した絵にも慣れてしまい、破綻の許容範囲がだんだん広く
なっていき、一般とは感覚がずれてしまいやすくなるので、気を付けましょ。
Forgeの画でA1111と確実に違いが出るのは髪飾りで、必ずといっていいくらい変化する。
そしてForgeでは耳を髪飾りと誤認識することがあるのか、耳の位置がずれることが
よくあり、構図としておかしい位置までずれたりする。これがForge耳。
このようなデメリットがあるので、VRAMが16GB以上ある場合は普段はA1111で
Forge独自機能を使うときだけForgeを使うのがおススメ。
12. FLUX速度改善
出初め特有の問題がいろいろあるので期間限定でちょっと書いとく。
2024年8月現在、FLUXに対応しているのはComfyUIとForge2、それとSD.Nextのdev版とSDcppのFLUX版の
4種だけど、ComfyUIとForge2でFLUXの速度がやたら遅い。GPUの地力からいってありえない遅さ。
#ちなみにNvidiaの旧型でもそんな感じの速度低下があるようだ。
原因がなんとなくわかったので、対処方法も書いておく。そのうち対処されると思うので、期間限定。
2024年9月追記: ComfyUI-ZLUDAは暫定的な対処がされた模様。
原因は、演算をBF16でおこなうためにtorch.bfloat16を使っているから。torch.bfloat16がなにかおかしい?
対処方法は、2通りあり、演算をFP32かFP16でおこなうようにすればよい。だいたい速度は倍になる。
ちなみにwindows ZLUDAだけでなくLinux ROCmでも同様と思われる。(まだ確認していない。)
- FP32: 起動オプションCOMMANDLINE_ARGSでFP32を指定する
webui-user.batをwebui-userFP32.batという名前でコピーして、ComfyUIは上、Forge2は下のに。
あとはFLUXを使うときだけwebui-userFP32.batで起動する。set COMMANDLINE_ARGS=--force-fp32 --auto-launch set COMMANDLINE_ARGS=--use-zluda --all-in-fp32
副作用として、FP32にするとVRAMとRAMをより消費する。そのため、VGAの搭載VRAM量によってはVRAMが
溢れて速度は逆に低下する。なので実際のところ、VRAMが20Gや24Gでしかこの手は使えない。
- FP16: ソースコードを書き換える (上級者向け)
起動オプションにはFP16版の--force-fp16と--all-in-fp16もあるのだが、指定してもBF16を使ってしまう。
仕方がないのでソースコードを書き換える。上級者向けとなるが、VRAM16G機なら試す価値アリ。
FLUX用の設定部分で優先度の並びが BF16, FP16, FP32 となっているので、FP16を先にする。
#ちなみにSD1.5やSDXLでは最初から FP16, BF16, FP32 の順になっている。- ComfyUI
comfy\supported_models.py の600行くらいにFLUX用設定の
class Flux(supported_models_base.BASE): があり、そこの645行目(2024年8月現在)
supported_inference_dtypes = [torch.bfloat16, torch.float16, torch.float32] の順番を入れ替え、supported_inference_dtypes = [torch.float16, torch.bfloat16, torch.float32]
- Forge2
repositories\huggingface_guess\huggingface_guess\model_list.py の600行代中盤にFLUX用設定
class Flux(BASE): があり、そこの682行目(2024年8月現在)
supported_inference_dtypes = [torch.bfloat16, torch.float16, torch.float32] の順番を入れ替え、supported_inference_dtypes = [torch.float16, torch.bfloat16, torch.float32]
- ComfyUI
当面は上記でしのぐとして、それでComfyUIとForgeにはどのような連絡をするかだけど、、、
ComfyUIもForgeも起動オプションCOMMANDLINE_ARGSでFP16指定してちゃんとFP16になるようにするには
comfyUIは comfy\model_management.py の、
Forgeは backend\memory_management.py の
def should_use_bf16 のところで
if FORCE_FP16:
return False
を挿入すればよいので、その方向で連絡するかな。
コメント
(Tips)
https://github.com/lshqqytiger/stable-diffusion-webui-amdgpu/blob/67fdead6280bfe1f37c466d5279d54344c6305cf/modules/zluda_installer.py -- 2024-07-27 (土) 20:21:52
例えば Sample every n epochs を 1 とかにして機能を有効化すると outputs\sample 以下に生成されたプレビュー画像がpng形式で出てくるみたい
ただ、SDXLの学習でプレビューサイズに --w 1024 --h 1024 使おうとするとエラー吐いて止まっちゃった
※ 初期値の --w 512 --h 512 だと問題ないっぽい
※ Optimizer で Adafactor 使ってるので AdamW の場合は未検証
torch.cuda.OutOfMemoryError: CUDA out of memory. Tried to allocate 9.00 GiB. GPU 0 has a total capacty of 15.98 GiB of which 15.59 GiB is free. Of the allocated memory 11.39 GiB is allocated by PyTorch, and 5.93 GiB is reserved by PyTorch but unallocated. If reserved but unallocated memory is large try setting max_split_size_mb to avoid fragmentation. See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF
GPUは起動時に以下で検出されてる
INFO Torch detected GPU: AMD Radeon RX 7600 XT [ZLUDA] VRAM 16368 Arch (8, 8) Cores 16
試しに起動時のgui.batに「set PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:512」追加してみたけど駄目だった -- 2024-08-15 (木) 12:57:30
失礼しました -- 2024-08-15 (木) 13:14:10
当方RX6600を使用しているので、別途「Optimised_ROCmLibs_gfx1032」ファイルをライブラリーに追加したのですが、
webui-userを起動すると「Cannot read C:\Program Files\AMD\ROCm\5.7\bin\/rocblas/library/TensileLibrary.dat: No such file or directory for GPU arch : gfx1032」とエラーが出てしまいます
エラー文内のファルダの場所が途中でバックスラッシュに変わってるんですがこれが原因なんでしょうか? -- 2024-08-18 (日) 01:59:09
AMDのAI用開発キットHIP の導入にそって、一旦HIP,すべてアンインストール、SDのフォルダ、ZLUDAのキャッシュ含めて、関係すべてのフォルダ削除
1からすべてやり直しました。いろいろ試したの明確な回避は不明なのですが、上の方法にある、
また、VGAによってはrocblas.dllも入れ替える必要があるものもある。配布ファイルにrocblas.dllが含まれている場合、libraryフォルダへの投入のほかに、C:\Program Files\AMD\ROCm\5.7\bin\rocblas.dllも入れ替える必要がある。
library だけでなく、rocblas.dllも入れ直して動いたのかも。 -- 2024-09-24 (火) 00:00:08
HIP SDKは5.7.1、RX6800XTを使っていてhipinfoでも認識してくれてるんだが何故だ -- 2024-09-14 (土) 02:35:24
Radeonの24.8.1が悪さしてた。24.7.1にダウングレードしたら解消しました。 -- 2024-09-14 (土) 02:52:30
git checkout b0d9eb6df1f6631a49988a9f705ff568f908aa2b -- 2024-10-05 (土) 22:40:24