ZLUDA別館1 ZLUDAannex1
初版: 2025年1月
Radeon ZLUDA に以前載せていて削除した内容や、載せずにボツにしたもの、
また初回インストールとは関係ない内容のをこちらに。
Radeon ZLUDAは初心者向けだが、ここannex1は、内容は初心者向けではないよ。
そもそもRadeon ZLUDAもZLUDAannex1もどちらも自分用メモを元に公開用に手を加えたもので、
特にここ別館では自分用のままになっているところもアリ。
あとバッチファイルなどを添付形式にせずにここに張り付けているのは理由があってあえてそうしている。
目次
- 関連ページ
- Radeonグラフィックスアーキテクチャ名
- ROCmのバージョン毎の対応VGA gfxグラフィックスアーキテクチャ名リスト
- Linuxでのgfxグラフィックスアーキテクチャ名の偽装
- windowsで公式非対応VGAでのライブラリの入れ替え
- TUNABLEOP最適化
- ZLUDA更新履歴 抜粋版
- AMD HIP SDK for Windows の履歴
- ZLUDA更新時やHIP更新時に使うpatchzluda6.batの汎用版
- HIP_VISIBLE_DEVICES 設定
- Forgeの旧Forge1
- ComfyUI ZLUDA の修正
- ComfyUI本家版の自力ZLUDA化
- ZLUDAで torch2.4.1 torch2.5.1 (RX7000シリーズ以降)
- お試し torch2.4.1, torch2.5.1 torch2.6.0 (RX6000シリーズ以前)
- Triton windows ZLUDA (RX7000以降) [ボツねた候補]
- A1111-ZLUDA インストール時の時間短縮 (済)
- GPU VRAM 強制解放でVRAMの空きを確保
- 各種手抜き用バッチファイルの元 (ここでは上級者向け プログラム経験者なら脱初心者の初級レベル程度)
- FLUX速度改善 ( Radeon ZLUDA から引っ越し)
- ROCm windows版 (ZLUDAと二刀流インストール)
関連ページ
Radeonグラフィックスアーキテクチャ名
Radeonのアーキテクチャ名と製品名の対応リスト
# Radeon ZULUDA の旧情報2024年8月10日からの復元です
https://wikiwiki.jp/sd_toshiaki/?cmd=diff_log&action=detail&did=20240810223533f23fd&page=Radeon+ZLUDA
gfx803: GCN4.0 Baffin Ellesmere Polaris RX460, RX470, RX480, RX560, RX570, RX580, RX590, MI6, MI8
gfx804: GCN4.0 Lexa RX550
gfx900: GCN5.0 Vega10 VEGA56, VEGA64, Instinct MI25
gfx901: (Vega10?)
gfx902: GCN5.0 Raven Ridge Ryzen APU 2200G, 2400G
gfx903: GCN5.0 Picasso Ryzen APU 3200G, 3400G
gfx904: GCN5.0 Vega12 Radeon Pro Vega16, Vega20
gfx906: GCN5.1 Vega20 RadeonVII, Radeon Pro VII, Instinct MI25, MI50(16GB), MI50(32GB), MI60
gfx907: (Vega20?)
gfx908: CDNA1.0 Arcturus Instinct MI100
gfx90a (gfx9.0.10): CDNA2.0 Aldebaran Instinct MI200, MI210, MI250, MI250X
gfx90c (gfx9.0.12): GCN5.1 Renoir Cezanne Ryzen APU 4XX0G, 5600G, 5700G
gfx940: CDNA3.0 Aqua Vanjaram Instinct MI300, MI300X
gfx941: (CDNA3.0 Instinct MI300)?
gfx942: CDNA3.0 Instinct MI300A, MI300X, MI325X
gfx950: (Instinct MI355X ?)
gfx1010: RDNA Navi10 RX5600, RX5600XT, RX5700, RX5700XT
gfx1011: RDNA Navi12 Radeon Pro V520, V540
gfx1012: RDNA Navi14 RX5500, RX5500XT, Pro W5500
gfx1013: Oberon Playstation 5 GPU
gfx1014: Oberon Plus Playstation 5 Pro GPU
gfx1030: RDNA2 Navi21 RX6800, RX6800XT, RX6900XT, RX6950XT, Pro V620, W6800
gfx1031: RDNA2 Navi22 RX6700, RX6700XT, RX6750XT
gfx1032: RDNA2 Navi23 RX6600, RX6600XT, RX6650XT, Pro W6600
gfx1033: RDNA2 Van Gogh Sephiroth Steam Deck GPU
gfx1034: RDNA2 Navi24 RX6400, RX6500XT
gfx1035: RDNA2 Rembrandt Radeon 660M, 680M
gfx1036: RDNA2 Raphael Ryzen 7XX0 CPU
gfx1037: RDNA2 Mendocino Radeon 610M, (Dragon Range Radeon 610M?)
gfx1100: RDNA3 Navi31 7900, 7900GRE, 7900XT, 7900XTX, Pro W7800, W7900, W7900Dual
gfx1101: RDNA3 Navi32 RX7700XT, RX7800XT, Pro V710, W7700
gfx1102: RDNA3 Navi33 RX7600, RX7600XT
gfx1103: RDNA3 Phoenix Ryzen APU 8300G(740M), 8500G(740M), 8600G(760M), 8700G(780M), Radeon 740M, 760M, 780M
gfx1150: (RDNA3.5 Strix Point Radeon 880M, 890M,)??
gfx1151: RDNA3.5 Strix Point Radeon 880M, 890M, AMD Ryzen AI Max+ Pro 395, Ryzen AI Max+ 395, Ryzen AI Max Pro 390, 385, 380, Ryzen AI Max 390, 385.
gfx1200: RDNA4 RX9060XT
gfx1201: RDNA4 RX9070XT, RX9070, RX9070GRE, Radeon AI PRO R9700
- アーキテクチャ名にxnackが付いている物は、xnackが付いていないものと同一扱いのものもあれば
別扱いのものもあり、実際に試してみないとわからん。
*情報源はAMD公式とROCmのソースコードとtechpowerup.comのデータベースからの抽出
AMD Radeonは、製品名は Radeon RX 7000 という表記だが、それは商品としての名、マーケティング上の
名であり、それら名とは別にハードウェアとしてのグラフィックスアーキテクチャ名というのがある。
OSやVGAドライバなどでは、このグラフィックスアーキテクチャ名で認識してうごいていたりするのもある。
なので、検索して調べるときは、製品名のほかグラフィックスアーキテクチャ名で検索するとヒットしたりする。
実際、AI用途だとROCmやHIP SDKでグラフィックスアーキテクチャ名が使われているので、
これらグラフィックスアーキテクチャ名は知っておいたほうが良い。
ROCmのバージョン毎の対応VGA gfxグラフィックスアーキテクチャ名リスト
VGAが対応しているかは、AMDが提供する説明用ドキュメントではなくソースコードで判断する。
ROCmソースコードCMakeLists.txt
https://github.com/ROCm/rocBLAS/blob/develop/CMakeLists.txt
該当部分
# setting target list based on ROCm version
if (NOT BUILD_ADDRESS_SANITIZER)
set( TARGET_LIST_ROCM_5.6 "gfx803;gfx900;gfx906:xnack-;gfx908:xnack-;gfx90a:xnack+;gfx90a:xnack-;gfx1010;gfx1012;gfx1030;gfx1100;gfx1101;gfx1102")
set( TARGET_LIST_ROCM_5.7 "gfx803;gfx900;gfx906:xnack-;gfx908:xnack-;gfx90a:xnack+;gfx90a:xnack-;gfx942;gfx1010;gfx1012;gfx1030;gfx1100;gfx1101;gfx1102")
set( TARGET_LIST_ROCM_6.0 "gfx900;gfx906:xnack-;gfx908:xnack-;gfx90a:xnack+;gfx90a:xnack-;gfx942;gfx1010;gfx1012;gfx1030;gfx1100;gfx1101;gfx1102")
set( TARGET_LIST_ROCM_6.3 "gfx900;gfx906:xnack-;gfx908:xnack-;gfx90a;gfx942;gfx1010;gfx1012;gfx1030;gfx1100;gfx1101;gfx1102;gfx1151;gfx1200;gfx1201")
set( TARGET_LIST_ROCM_6.5 "gfx900;gfx906:xnack-;gfx908:xnack-;gfx90a;gfx942;gfx950;gfx1010;gfx1012;gfx1030;gfx1100;gfx1101;gfx1102;gfx1151;gfx1200;gfx1201")
else()
set( TARGET_LIST_ROCM_5.6 "gfx908:xnack+;gfx90a:xnack+")
set( TARGET_LIST_ROCM_5.7 "gfx908:xnack+;gfx90a:xnack+;gfx942:xnack+")
set( TARGET_LIST_ROCM_6.0 "gfx908:xnack+;gfx90a:xnack+;gfx942:xnack+")
set( TARGET_LIST_ROCM_6.3 "gfx908:xnack+;gfx90a:xnack+;gfx942:xnack+")
set( TARGET_LIST_ROCM_6.5 "gfx908:xnack+;gfx90a:xnack+;gfx942:xnack+;gfx950:xnack+")
endif()
このように、ROCmのバージョンによって対応gfxが変わっているので、使える/使えそうなバージョンの
ROCmをインストールする。
バージョンが新しくなる毎に、世代交代しているのがわかる。
#ROCm6.3には現在(2025年1月)まだ未発表の次世代RX9000シリーズのgfx1200;gfx1201が既にあるな。
Linuxでのgfxグラフィックスアーキテクチャ名の偽装
LinuxではROCmで動かすにあたり、
VGAがAMD公式で対応されていない場合は、他のVGAのグラフィックスアーキテクチャ名に偽装して使うのが主流。
#ライブラリの入れ替えなどは誰もやっていないんじゃないかな。
linuxでは、
HSA_OVERRIDE_GFX_VERSION
で簡単にgfxを偽装できて、それでたいてい動く。
具体例をあげると、例えばRX6700のgfx1031やRX6600のgfx1032は公式にはROCm非対応だが、
同世代のRX6800や6900のgfx1030は公式対応しているので、
HSA_OVERRIDE_GFX_VERSIONの値をgfx1030にしてやると動く。
こんな感じで、同世代のグラフィックスアーキテクチャ名で偽装してやるとたいてい動く。
#なんかAPUでVEGAを搭載したものはgfx900かgfx906に偽装して動かしているようだ。
逆に、世代が異なる物に偽装すると動かないのだが、ノートPC搭載のは型番が少し違うだけで世代が
全然別になってるので、ちゃんと調べること。hipinfo.exeやrocminfo.exeでgfx名を調べる。
なお、windowsではHSA_OVERRIDE_GFX_VERSIONは使えない。
https://github.com/ROCm/ROCm/issues/2654
windowsで公式非対応VGAでのライブラリの入れ替え
RadeonをZLUDAでwindows直で使うにあたり、
VGAがAMD公式で対応されていなくても、該当するライブラリを自ビルトすればZLUDA使える。
また自ビルドしなくても、ネット上にビルド済みのライブラリがあったりするので、
それらでZLUDAを使っている人たちもいる。
探すには、Radeon製品名で見つかれば良いのだが、見つからない場合は、上記グラフィックス
アーキテクチャ名をキーワードにして検索すると見つかるかもしれない。
なお、旧版のROCm5.7.1のHIPと新版のROCm6.xのHIPには互換性が無いので、それぞれのHIPの
バージョンに対応したライブラリでなければ動かない。
#またこれは未確認だが、5.7.1まではLinuxでビルドしたrocblas.dllがそのままwindowsで流用可能な
#ようなのだが、新版6.xだとLinuxビルド物はwindowsに流用出来なくて、windowsでビルド必須らしい。
#このあたりが、6.1.2用rocblas.dllが見当たらない理由なのかもしれない。
あと、gfx803, gfx804は旧すぎるのか、torchのバージョンが新しいと対応していないので、
その場合は旧いtorchに入れ替える。torch2.2.xだと大丈夫かと。torch2.3.0以降はダメ。
またgfx803世代といえばRX470/RX570だから、PC自体が古くてCPUやPCIexが対応していないかも。
PCIexは3.0以上が必須。
なお、ROCm HIP SDK ライブラリの入れ替えにおいて、rocblas.dllも入れ替える必要があるか否かだが、
先に示したROCm rocblas.dllのソースコードのとおり、ROCmのバージョンによってグラフィックス
アーキテクチャ名が世代交代している。
ここからは推測になるが、AMDが公式で配布しているROCm HIP SDKでインストールされるrocblas.dllは
このソースコードのままであろうから、そこに自分のRadeonのグラフィックスアーキテクチャ名が
含まれていれば、rocblas.dllはそのまま使える可能性が高い。
一方、含まれていない場合は、rocblas.dllを入れ替えなければならないだろう。
入れ替え用のライブラリとrocblas.dllの主な提供元は Radeon ZLUDA に書いた通り。
ユーザー数が多く実際の稼働報告も多いのは koboldcpp-rocm で、koboldcpp-rocmの
releasesにてROCm6.2.0用があり、これが6.2.4のHIPで使えるようだ。
https://github.com/YellowRoseCx/koboldcpp-rocm/releases
https://github.com/YellowRoseCx/koboldcpp-rocm/releases/tag/deps-v6.2.0
また5.7.1のHIP用のも配布されている。アーカイブの中に入っている。
今後のバージョンのも配布されることを期待。
TUNABLEOP最適化
TUNABLEOPによる最適化の方法が公開されているのでここに触れておく。
https://rocm.blogs.amd.com/artificial-intelligence/pytorch-tunableop/README.html
実際のところ、tunableOPを使う必要は無いと思う。
まぁたいした手間ではないので、ちょっとやってみて判断すればよい。効果があった人もいるようだ。
tunableOPを使うには具体的に何をどうするのかというと、
下記の環境変数を設定のうえアプリを実行する。
windowsなら、まず、A1111やComfyUIなどの起動sh/batファイル(webui-user.batなど)に下記を追加。
場所は、3行目くらいからずらずらと他のsetコマンドが並んでいると思うので、それらsetコマンドの
ところに下記2行もしくは3行を並べる。
set PYTORCH_TUNABLEOP_ENABLED=1
set PYTORCH_TUNABLEOP_VERBOSE=1
もしくは
set PYTORCH_TUNABLEOP_ENABLED=1
set PYTORCH_TUNABLEOP_VERBOSE=1
set PYTORCH_TUNABLEOP_HIPBLASLT_ENABLED=0
(HIPBLASLT_ENABLEDの影響の有無は、比較してみたけどよくわからん。)
次に、起動していくつか画を生成。
そして、アプリを終了させる際に、必ず正常終了させる。コマンドプロンプトでCtrl-cののち、nで終了。
ちゃんとアプリを正常終了させると、
tunableop_results0.csv
というようなcsvファイルがA1111やComfyUIなどのフォルダに出来上がる。
ちなみにいきなりコマンドプロンプトwindowを閉じての強制終了だとcsvファイルができないので、ダメ。
ここで、csvファイルの中身が2,3行だとハズレ。たいてい10行以上になる。
次回以降はこのcsvが読み込まれ、最適化された状態になる。
効果の程は、実際に2割高速化した例もあるようだ。全く変化無しな例もある。
まぁ、最初から既に最適化されているか否かなんだろう。
なお、ZLUDA使ってる場合はZLUDA側でGPUコードの最適化が行われているためだろうか、
このtunableOPの効果は無いようだ。
いちおうZLUDAででもこれ試せるので、本当かどうかは実際に試してみてくれ。
ZLUDA更新履歴 抜粋版
ZLUDAの更新のなかから新しいもの順にいくつか抜粋
- ZLUDA本家
- Version5 2025Oct2公開 デバッグツール充実、6.4最適化かも?
- Version4 2024年末公開 CUDA 12.4に対応
このVersion4公開までに存在していたversion3更新版は2024年秋に削除された。
githubのPull requestsのClosedなどに当時の名残がある。 - Version3 2024Feb12公開
- ZLUDA Fork版
- 3.9.5 2025年5月時点での最新版。 AMD VGA Driver Adrenalin 25.5.1 で動かない問題に対処。
- 3.9.4 Florence2でのworkaroundが不要となった
===== ここに壁がある =====
- 3.9.2 custom triton との組み合わせで torch.compile() が使えるように
- 3.9.1 A1111 ZLUDA版でcuDNNが実装される
- 3.9.0 Nightlyで PyTorch Flash Attention 2 に対応
- 3.8.8 cuDNN実装。通常はcuDNNは無効になっているが、有効にすると速度が15%-20%向上する。ただし初回演算時はVGAドライバが一時的に停止することがある。
- 3.8.7 (FFT関連)
- 3.8.6 nightlyでtorch 2.4.1, torch2.5.1に対応(RX7000以降)
- 3.8.5 torch2,4,1, torch2.5.1 に初期対応
===== ここに壁がある =====
zludaの更新方法に変更があった模様。そのため、これ以前のversionからこれ以降のversionに
zludaを更新する際は、一旦 .zludaフォルダを削除してから。
- 3.8.4 2024Dec18版
6.2.4のHIPに新たに対応
このZLUDAv3.8.4以降のHIPの対応は6.2.4のHIPと5.7.1のHIPだけであり、6.1.2はサポートから外れた。
なお、アプリ側はインストーラーで適切に判断されており、HIPが6.1.2だと旧版ZLUDA3.8.4をインストールするようになっている。 - 3.8.4 2024Sep11版
LOG_LEVELを実装。runtime APIにも手が加わった。またこれが6.1.2のHIPの最終。
LOG_LEVELにより、起動用ファイルwebui-user.batに
set ZLUDA_COMGR_LOG_LEVEL=1
を書いておくと、ZLUDAがGPUコードをコンパイルしているときにコンソール
ウインドウに30秒毎にコンパイル中とのログを表示できる。
なので、アプリインストール時のzluda.dbの10分待ちの時などでzluda.dbの
ファイルサイズの増加具合を見なくてもよくなる。
runtime APIにからみ、Forgeで --cuda-stream が使えるようになった。 - 3.8.3
サポートをやめていた5.7.1のHIPへの対応が復活。よって対応しているのは6.1.2と5.7.1のHIP。 - 3.8 2024Jun13版
6.1.2のHIPに対応した。5.7.1のHIPへの対応をやめたが、後日ZLUDAv3.8.3で復活。 - 3.8-rocm5 2024May17版
5.7.1のHIPの最終版となった。しかし後日、ZLUDAv3.8.3で5.7.1対応が復活。
AMD HIP SDK for Windows の履歴
https://www.amd.com/en/developer/resources/rocm-hub/hip-sdk.html
HIPのバージョンが異なると互換性が無い場合がある。動くこともあるが。下記は新しいもの順。
- 6.2.4
2024年12月公開 現在(2025年1月)の最新版
速度が2%向上
gfx1151に対応 - 6.1.2
2024年6月公開
メジャーバージョンアップにより、旧型VGAでサポート外になったものがある。 - 5.7.1
2023年12月公開
ZLUDAが一般公開された2024年2月当時の最新版であった。
そのためか、対応アプリ、対応VGAが多い。AMD公式対応表に無いVGAでも実際は対応しているものがある。
また、AMD公式では非対応扱いの旧々型VGAでも、それらVGAで動かすためのライブラリの入手が可能である。
ただし、2024年以降に登場したVGAには非対応 (非対応例: gfx1150,gfx1151,gfx1200,gfx1201)
2025年現在、6.xへの移行が進んでおり、アプリのなかにはサポート外になったものもある。
例: SDcppおよびその派生は5.7.1はビルド不可になった。 - 5.5.1
ZLUDA一般公開時に既に旧型であった。ZLUDAでこの5.5.1を使っているひとはまずいない。
そもそもアプリが対応していなかったりする。
ZLUDAをソースコードからビルドすると、5.5.1ででも使えるらしい。
ZLUDA更新時やHIP更新時に使うpatchzluda6.batの汎用版
ZLUDA更新時やHIP更新時はZLUDAだけ入れ替えれば他はそのままでもうごくので、Radeon ZLUDAに
おいてはその手抜きとしてpatchzluda6.batをあげている。
ここZLUDAannex1ではその汎用版を載せておく。下記をpatchzluda6.batという名前で保存して使う。
中身は、「見ればわかる」ように、単純なものにしてある。
ComfyUI-ZLUDAや、また自力ZLUDA化したものは、patchzluda6.batを実行するだけでZLUDAの
入替が完了する。
一方、A1111-ZLUDAやForge-ZLUDA, SD.NextはZLUDAのフォルダ名がzludaではなく .zluda なので、
一手間かかる。
これはあえて一手間かかるようにしている。それは .zludaフォルダの中のファイルはバージョンによって
少々異なっているからで、 .zluda フォルダの中身を見ながら zluda フォルダから中身をコピーする。
#それらを実行するように書くと長くなってしまい、「見ればわかる」ではなくなってしまうから。
注意事項としては、
流用してzluda3.8.7のnightly版にする場合、zipのアーカイブの内部フォルダ構造が他と異なるため要修正。
通常はzip内部にzludaフォルダがあるのだが、v3.8.7nightly版だけはzludaフォルダ無しになっているため。
#次のv3.8.8nightlyではzludaフォルダ入りになるだろうから放置で。- > ならなかった……。
@echo off
setlocal enabledelayedexpansion
set zluda_dir=zluda
set lshqqytiger_zluda_dir=.zluda
set rocm64_dir="C:\Program Files\AMD\ROCm\6.4"
set rocm63_dir="C:\Program Files\AMD\ROCm\6.3"
set rocm62_dir="C:\Program Files\AMD\ROCm\6.2"
set rocm61_dir="C:\Program Files\AMD\ROCm\6.1"
set rocm57_dir="C:\Program Files\AMD\ROCm\5.7"
set zluda_url=
if exist "%zluda_dir%" (
rmdir /S /q "%zluda_dir%"
)
if exist "!rocm57_dir!" (
set zluda_url=https://github.com/lshqqytiger/ZLUDA/releases/download/rel.5e717459179dc272b7d7d23391f0fad66c7459cf/ZLUDA-windows-rocm5-amd64.zip
echo * rocm57 ZLUDAv3.9.5
)
if exist "!rocm61_dir!" (
set zluda_url=https://github.com/lshqqytiger/ZLUDA/releases/download/rel.c0804ca624963aab420cb418412b1c7fbae3454b/ZLUDA-windows-rocm6-amd64.zip
echo * rocm61 ZLUDAv3.8.4
)
if exist "!rocm62_dir!" (
set zluda_url=https://github.com/lshqqytiger/ZLUDA/releases/download/rel.5e717459179dc272b7d7d23391f0fad66c7459cf/ZLUDA-windows-rocm6-amd64.zip
echo * rocm62 ZLUDAv3.9.5
)
if exist "!rocm63_dir!" (
set zluda_url=https://github.com/lshqqytiger/ZLUDA/releases/download/rel.5e717459179dc272b7d7d23391f0fad66c7459cf/ZLUDA-windows-rocm6-amd64.zip
echo * rocm63 ZLUDAv3.9.5
)
if exist "!rocm64_dir!" (
set zluda_url=https://github.com/lshqqytiger/ZLUDA/releases/download/rel.5e717459179dc272b7d7d23391f0fad66c7459cf/ZLUDA-windows-rocm6-amd64.zip
echo * rocm64 ZLUDAv3.9.5
)
if not "%zluda_url%"=="" (
curl -s -L "%zluda_url%" > 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
if exist "%lshqqytiger_zluda_dir%" (
copy zluda\cublas.dll zluda\cublas64_11.dll /y
copy zluda\cusparse.dll zluda\cusparse64_11.dll /y
copy zluda\nvrtc.dll zluda\nvrtc64_112_0.dll /y
if exist "!rocm62_dir!" (
copy zluda\cufft.dll zluda\cufft64_10.dll /y
copy zluda\cufftw.dll zluda\cufftw64_10.dll /y
)
if exist "!rocm63_dir!" (
copy zluda\cufft.dll zluda\cufft64_10.dll /y
copy zluda\cufftw.dll zluda\cufftw64_10.dll /y
)
if exist "!rocm64_dir!" (
copy zluda\cufft.dll zluda\cufft64_10.dll /y
copy zluda\cufftw.dll zluda\cufftw64_10.dll /y
)
)
echo.
echo * ZLUDA is patched.
) else (
echo No ROCm directory
)
endlocal
pause
次のv3.8.8nightlyではzludaフォルダ入りになるだろうから放置していたがならなかったので、
nightlyに流用する際はダウンロードURLをnightlyに書き換えるとともに、
tar -xf zluda.zip
のところを
mkdir zluda && tar -xf zluda.zip -C zluda
などにしてフォルダzludaを作って展開させるとうまくいくであろう。(確認はしてある)
HIP_VISIBLE_DEVICES 設定
APU機にVGAを挿しているPCでは、Radeon ZLUDAに書いたとおりで、HIP_VISIBLE_DEVICESの設定を
するわけだが、そこでは上級者向け情報として
set HIP_VISIBLE_DEVICES=0
と触れてあるとおり、起動用バッチファイルwebui-user.batに
set HIP_VISIBLE_DEVICES=0
や
set HIP_VISIBLE_DEVICES=1
を書いておけば、ちゃんと機能する。
#ちなみにこの方法でAI用VGAの切り替えも可能。
だいたい3行目くらいに書いておけばよい。webui-user.batの最初の数行はこんな感じ。
@echo off
set HIP_VISIBLE_DEVICES=1
set PYTHON=
set GIT=
なんたら~
かんたら~
なので、windows OSの環境変数の設定をしなくても、batに書いておけばそれでよかったりする。
ならこっちのほうが楽だ、と思うかもしれないが、実際はこの設定は忘れやすいたぐいのものであり、
そしてまた設定忘れて動かないときのトラブルシューティングの際にこれを思い出すのが難しいたぐいの
ものでもあるので、HIP_VISIBLE_DEVICESはOS環境変数に書いておいたほうが良い。
Forgeの旧Forge1
Forgeの旧Forge1は現在(2025年1月)だと旧すぎて外部モジュール不整合がおきており、
インストールが
コケる。
該当モジュールのバージョンをForge1当時のものにすれば動くので、その方法。
Forge1をZLUDAで動かす方法は2通り。
どちらが良いかは、動いたほう。いま(2025年1月)はどちらもまだ下記の方法でインストールできるけど、
旧くなればなるほど新規インストールが出来なくなるのだから、どちらか選べる余裕はないぞ。
Forge ZLUA版で旧Forge1
Forge ZLUA版で旧Forge1にするには、
途中までは従来と同じ。つまり、
1. まず、git cloneでダウンロードし、checkoutでForge1まで遡らせる。
git clone https://github.com/lshqqytiger/stable-diffusion-webui-amdgpu-forge.git .
git checkout 4a93f424d40948a1f4630872517a6281dc7daa11
2. SDXL modelを投入する
3. webui-user.batに--use-zludaを加える
ここまでは従来と同じ。
それでだ、Forge1は旧いままでも、各種モジュールはそれぞれに更新されており、
そのため通常インストールであってもモジュール不整合がおきてしまっている。
2025年1月現在ではhuggingface-hubモジュールが原因でうごかなくなっている。
#これはForge-ZLUDAだからhuggingface-hubでこうなってしまっているのだが、
#それでもForge-ZLUDAはメンテナンスされているからましなほうで、
#本家Forgeの旧Forge1はもっと前に既にpydanticの不整合でコケていたりする……。
このhuggingface-hubの対策として、huggingface-hubの旧バージョンを明示的に
指定してインストールさせる。
どうやらhuggingface-hub0.26以降がダメなようなので、
ここはとりあえずその直前の0.25.2にしておく。
フォルダ内にある requirements_versions.txt の、
( https://github.com/lshqqytiger/stable-diffusion-webui-amdgpu-forge/blob/4a93f424d40948a1f4630872517a6281dc7daa11/requirements_versions.txt )
この requirements_versions.txt を編集し、最終行に
huggingface-hub==0.25.2
を追記し、改行もする。
#いまのところrequirements_versions.txtに追記すればよいだけだが、
そのうちrequirements.txtにも同様の追記が必要になるかもしれない。
#あとhuggingface-hub以外にも不整合はおきているんだけど、
#とりあえずhuggingface-hubの対策だけしておけば動く。
また、必須ではないが、torchのバージョンを他と揃えておくと良い。
2025年1月現在のZLUDA版はtorch2.3.1なので(2025年3月はtorchが
2.6.0になったがForge1は2.3.1がおススメ)、
modules\launch_utils.py
f"pip install torch==2.3.0 torchvision --index-url {torch_index_url}",
ここの2.3.0を2.3.1にし、
f"pip install torch==2.3.1 torchvision --index-url {torch_index_url}",
のように修正する。(VGAが古いRX470などPolarisやVEGAの場合は2.2.1にするらしいが。)
ここで一度目のwebui-user.batを実行する。
HIPが5.7.1か6.1.2ならそのまま動く。
しかし、それ以降の、6.2.4のHIPなど、Forge1当時にはまだ無かったバージョンのHIPだと未対応なため、
それらの場合はインストールの途中で
Failed to install ZLUDA: HTTP Error 404: Not Found
Using CPU-only torch
という具合にZLUDAの自動インストールに失敗しながらもインストール自体はそのまま進み、最終的に、
RuntimeError: Found no NVIDIA driver on your system. Please check that you have an NVIDIA GPU and installed a driver from http://www.nvidia.com/Download/index.aspx
というエラーで終了する。
このようなエラーで止まったら、HIPに対応した patchzluda6.bat を用意し、Forge1フォルダ内で
実行する。
#先に記載した汎用版patchzluda6.batでもよい。
するとzludaフォルダが出来るので、Forge ZLUDA版の場合はZLUDAのフォルダ名が .zluda であるから、
フォルダ名を .zludaに変更する。
さらに、汎用版patchzluda6.batに記述されている、
copy zluda\cublas.dll zluda\cublas64_11.dll /y
copy zluda\cusparse.dll zluda\cusparse64_11.dll /y
copy zluda\nvrtc.dll zluda\nvrtc64_112_0.dll /y
に相当するコピーをおこなう。
.zludaフォルダ内にて、
cublas.dll をコピーし cublas64_11.dll 名にする。
zluda\cusparse.dll をコピーし cusparse64_11.dll 名にする。
zluda\nvrtc.dll をコピーし nvrtc64_112_0.dll 名にする。
リネームじゃなくてコピーだよ!
つまり、これら3つだけは同一ファイルが別名で.zludaフォルダ内にあるようにする。
#いちおう汎用版patchzluda6.batは実行時にフォルダ.zludaがあるとこのコピーも自動でやるので、
#フォルダ名を.zludaに変更したあともう一度汎用版patchzluda6.batを実行して、あとはzludaの
#中身を.zludaに移動させるほうが楽かもしれない。まぁやってみて。
2025年1月時点では、上記でForge1がうごく。
画の生成が出来たら、一旦modelを他に退避させたのち、バックアップを取っておく。
Forge1のフォルダをまるごとzipなり7zやrarなどで圧縮してまとめておく。2GBくらいか。モデルを一時退避させないと8GB超える。
このまるごとバックアップは必ずやっておく。#この機会を逃すともうForge1は動かないぞ。
今後の更新は、旧版なのだからForge1自体の更新はないわけだが、HIPやZLUDAの更新の際は
ZLUDAファイルだけ入れ替えればOK。先の汎用版patchzluda6.batを流用すると少し手間が省ける。
本家Forgeの旧Forge1を自力ZLUDA化する
本家Forgeも旧Forge1は旧すぎて外部モジュール不整合がおきており、インストールがコケる。
こちらも該当モジュールのバージョンをForge1当時のものにすれば動くので、その方法。
まず、git cloneでダウンロードし、checkoutでForge1まで遡らせる。
ZLUDA版ではなく本家なので、こちら。
git clone https://github.com/lllyasviel/stable-diffusion-webui-forge .
git checkout 29be1da7cf2b5dccfc70fbdd33eb35c56a31ffb7
次に、該当モジュールのバージョン指定。
フォルダ内にある requirements_versions.txtの最終行に
pydantic==1.10.15
を追記し、改行も追記。
あとは Radeon ZLUDA の、A1111 dev の自力ZLUDA化と同じ。
*ZLUDA版ではく本家の自力ZLUDA化なので、起動オプションの --use-zluda は付けてはいけない。
後述のA1111自力ZLUDA化用バッチファイルと先の汎用版patchzluda6.batを使うと手間が省ける。
画の生成が出来たら、一旦modelを他に退避させたのち、まるごとバックアップを取っておく。
今後のHIPやZLUDAの更新の際は、ZLUDAファイルだけ入れ替えればOK。汎用版patchzluda6.batでサクッと。
ComfyUI ZLUDA の修正
Radeon ZLUDAの ComfyUI ZLUDA対応Fork版のところの記述で
>上級者であれば、install.batの中身を見れば3GBに半減出来るぞ。
と触れてるところなど、ComfyUI ZLUDAには無駄が多いので、その修正。
windows OS 環境変数へのHIP関連のPATH設定の登録は不要
ComfyUI-ZLUDAのgithubサイトではHIP関連のPATHをwindows OS 環境変数に設定とあるが、
HIPインストール時に自動でHIPのパスは設定されるので、その関連のPATHについては、
起動用batの3行目くらいに
set PATH=%~dp0zluda;%~dp0.zluda;%HIP_PATH%bin;%PATH%
を書いておくだけでよい。
逆に、ComfyUI-ZLUDAのgithubサイトに書かれている通りにwindowsOSの環境変数に載せてしまうと、
いろいろとトラブルの元になる。
install.batの修正
ComfyUI ZLUDA版のinstall.batでは、
一旦ZLUDA非対応なtorchを3GBもダウンロードしインストールしたあとそれを削除し、
そののち対応torchのダウンロード3GBをしてまたインストールしているのだが、これは無駄。
先に対応torchをインストールしてしまえばよいだけ。
先にtorchをインストールして続いてinstall -r requirements.txtをおこなうことで整合性がとれる。ComfyUI公式のインストール方法もこのやり方だ。
ついでにtorchも他のA1111-ZLUDAなどにあわせてtorch2.3.1にしてしまおう。
2025年3月追記: 他のZLUDA版はtorch2.6.0になった。ComfyUI-ZLUDAもtorch2.6.0で動くことも
確認済みだがしばらくはここの記述は2.3.1のままにしておく。
またこれは任意だが、install.bat先頭付近に
set PATH=%~dp0zluda;%~dp0.zluda;%HIP_PATH%bin;%PATH%
を追記しておくとそのまま初回起動する。
実際はinstall.batは書き換えずにそのままにしておき、下記をinstall571.bat名で保存して実行。
#あと使っているHIPによってはZLUDAのURLも要書き換え。名前もinstall624.batとでもして。
install571.bat名で保存して実行
@echo off
title ComfyUI-Zluda Installer
set PATH=%~dp0zluda;%~dp0.zluda;%HIP_PATH%bin;%PATH%
set ZLUDA_COMGR_LOG_LEVEL=1
setlocal EnableDelayedExpansion
set "startTime=%time: =0%"
cls
echo -------------------------------------------------------------
Echo ******************* COMFYUI-ZLUDA INSTALL *******************
echo -------------------------------------------------------------
echo.
echo :: %time:~0,8% :: - Setting up the virtual enviroment
Set "VIRTUAL_ENV=venv"
If Not Exist "%VIRTUAL_ENV%\Scripts\activate.bat" (
python.exe -m venv %VIRTUAL_ENV%
)
If Not Exist "%VIRTUAL_ENV%\Scripts\activate.bat" Exit /B 1
echo :: %time:~0,8% :: - Virtual enviroment activation
Call "%VIRTUAL_ENV%\Scripts\activate.bat"
echo :: %time:~0,8% :: - Updating the pip package
python.exe -m pip install --upgrade pip
echo.
echo :: %time:~0,8% :: Beginning installation ...
echo.
echo :: %time:~0,8% :: - Installing torch for AMD GPUs (First file is 2.7 GB, please be patient)
pip install torch==2.3.1 torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
echo :: %time:~0,8% :: - Installing required packages
pip install -r requirements.txt
echo :: %time:~0,8% :: - Installing onnxruntime (required by some nodes)
pip install onnxruntime
echo :: %time:~0,8% :: - (temporary numpy fix)
pip uninstall numpy -y
pip install numpy==1.26.0
echo.
echo :: %time:~0,8% :: Custom node(s) installation ...
echo.
echo :: %time:~0,8% :: - Installing Comfyui Manager
cd custom_nodes
git clone https://github.com/ltdrdata/ComfyUI-Manager.git
echo :: %time:~0,8% :: - Installing ComfyUI-deepcache
git clone https://github.com/styler00dollar/ComfyUI-deepcache.git
cd ..
echo.
echo :: %time:~0,8% :: - Patching ZLUDA (Zluda 3.9.5 for HIP SDK 5.7.1)
curl -s -L https://github.com/lshqqytiger/ZLUDA/releases/download/rel.5e717459179dc272b7d7d23391f0fad66c7459cf/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 >NUL
copy zluda\cusparse.dll venv\Lib\site-packages\torch\lib\cusparse64_11.dll /y >NUL
copy zluda\nvrtc.dll venv\Lib\site-packages\torch\lib\nvrtc64_112_0.dll /y >NUL
@echo :: %time:~0,8% :: - ZLUDA is patched. (Zluda 3.9.5 for HIP 5.7.1)
echo.
set "endTime=%time: =0%"
set "end=!endTime:%time:~8,1%=%%100)*100+1!" & set "start=!startTime:%time:~8,1%=%%100)*100+1!"
set /A "elap=((((10!end:%time:~2,1%=%%100)*60+1!%%100)-((((10!start:%time:~2,1%=%%100)*60+1!%%100), elap-=(elap>>31)*24*60*60*100"
set /A "cc=elap%%100+100,elap/=100,ss=elap%%60+100,elap/=60,mm=elap%%60+100,hh=elap/60+100"
echo .....................................................
echo *** Installation is completed in %hh:~1%%time:~2,1%%mm:~1%%time:~2,1%%ss:~1%%time:~8,1%%cc:~1% .
echo *** You can use "comfyui.bat" to start the app later.
echo .....................................................
echo.
echo *** Starting the Comfyui-ZLUDA for the first time, please be patient...
echo.
.\zluda\zluda.exe -- python main.py --auto-launch --use-quad-cross-attention
起動用batファイルとZLUDAのPATH設定
ComfyUI ZLUDA版では起動のしかたがcomfyui.batで
.\zluda\zluda.exe -- %PYTHON% main.py %COMMANDLINE_ARGS%
となっていて、ZLUDAのpathの設定無しでやってるんだけど、ここは
起動用batの3行目くらいに
set PATH=%~dp0zluda;%~dp0.zluda;%HIP_PATH%bin;%PATH%
を記述してzludaのPATHを通しておき、
起動は
%PYTHON% main.py %COMMANDLINE_ARGS%
としておくとカスタムノードでトラブルが起きにくい。
実際は起動用に下記の内容のwebui-user.batを用意して使うとよいだろう。
@echo off
set PATH=%~dp0zluda;%~dp0.zluda;%HIP_PATH%bin;%PATH%
set DISABLE_ADDMM_CUDA_LT=1
set ZLUDA_COMGR_LOG_LEVEL=1
set PYTHON="%~dp0/venv/Scripts/python.exe"
set GIT=
set VENV_DIR=./venv
set COMMANDLINE_ARGS=--disable-cuda-malloc --use-quad-cross-attention --auto-launch
echo ***
%PYTHON% main.py %COMMANDLINE_ARGS%
pause
なお、
set DISABLE_ADDMM_CUDA_LT=1
の設定は、ComfyUI-ZLUDAでは
comfy\zluda.py
で設定されており、webui-user.batのこの値を0に変更しても無効である。
これ、comfy\zluda.pyに載せる際に、
ここを0にしたい人はzluda.pyを変えてね、
とのことだったわけだが、でもこういうのは起動用ファイルで設定するように
なりそうなので、いきなりzluda.pyから消されると動かなくなるから、
先回りして載せておいた。 --disable-cuda-malloc も同じ理由。
ComfyUI本家版の自力ZLUDA化
ComfyUIにはComfyUI-ZLUDAがあるが、ComfyUI本家版の自力ZLUDA化も可能である。
#後述する上級者向けバッチファイルを使うといくつか手間を省けるがそれはあくまで上級者向け。
ComfyUI ダウンロード
本家ComfyUIはこれ。
git clone https://github.com/comfyanonymous/ComfyUI.git .
自力ZLUDA化
ComfyUI本家版の自力ZLUDA化。
変更するファイルはmodel_management.pyだけ。comfyフォルダ内にある。
comfy\model_management.py
model_management.pyの変更箇所は1カ所。
Radeon ZLUDAでの自力ZLUDA化と基本同じで、場所は
https://github.com/comfyanonymous/ComfyUI/blob/98bdca4cb2907ad10bd24776c0b7587becdd5734/comfy/model_management.py#L23
だいたいここ23行目のあたりに
import torch
があるので、その直下に下記4行を挿入。
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)
2025年4月追記: 上記4行に加え、予防措置としていくつか追記した。上記4行を含め、合計18行と長くなった……。
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)
if hasattr(torch.backends.cuda, "enable_cudnn_sdp"):
torch.backends.cuda.enable_cudnn_sdp(False)
def jit_script(f, *_, **__):
f.graph = torch._C.Graph() # pylint: disable=protected-access
return f
torch.jit.script = jit_script
_topk = torch.topk
def topk(tensor: torch.Tensor, *args, **kwargs):
device = tensor.device
values, indices = _topk(tensor.cpu(), *args, **kwargs)
return torch.return_types.topk((values.to(device), indices.to(device),))
torch.topk = topk
ComfyUIインストール
ComfyUI本家版のインストール。
基本的には、ComfyUIのサイトに書いてある通常のwindowsインストールの方法と同じ。
それをbat化したのがComfyUI-ZLUDAのinstall.batで、そのinstall.batを修正した上記
のComfyUI-ZLUDA install.bat改を横目で見ながら、コマンドプロンプトを開いて下記を順次実行していく。
python.exe -m venv venv
venv\Scripts\activate
python.exe -m pip install --upgrade pip
pip install torch==2.6.0 torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
pip install -r requirements.txt
pip install onnxruntime
cd custom_nodes
git clone https://github.com/ltdrdata/ComfyUI-Manager.git
git clone https://github.com/styler00dollar/ComfyUI-deepcache.git
cd ..
続いて先に記述した汎用版patchzluda6.batを実行。ZLUDAがインストールされる。
#これ上記コマンド列そのまんま汎用版patchzluda6.batファイルの冒頭付近に記述すると
#クリックだけでComfyUIのインストールとZLUDA化が済むんだけど、
#それをしたのがComfyUI ZLUDA版のinstall.batといえばまぁそう。
#そしてさらに、上級者なら後述するComfyUIの自力ZLUDA化用batファイルを統合すると、
#本当にbat一発でComfyUI本家版のZLUDA化インストールが完了する。
起動用batファイル webui-user.bat を作成
起動用に、webui-user.batを作成する。
@echo off
set PATH=%~dp0zluda;%~dp0.zluda;%HIP_PATH%bin;%PATH%
set DISABLE_ADDMM_CUDA_LT=1
set ZLUDA_COMGR_LOG_LEVEL=1
set PYTHON="%~dp0/venv/Scripts/python.exe"
set GIT=
set VENV_DIR=./venv
set COMMANDLINE_ARGS=--disable-cuda-malloc --use-quad-cross-attention --auto-launch
%PYTHON% main.py %COMMANDLINE_ARGS%
pause
*起動オプションCOMMANDLINE_ARGSのうち、
--use-quad-cross-attention は torch2.3.1 では任意だが、 torch2.6.0 では必須。*
ポイントとしては、
cuda_malloc.py関連で、
起動オプションで --disable-cuda-malloc を指定している。これRadeonでComfyUIを使うには必須で、
linuxでROCmの場合はComfyUI側が自動判定しているのだが、windowsでZLUDAだと指定する必要がある。
#ComfyUI-ZLUDAだとこの--disable-cuda-mallocは必要ないんだけど、それはComfyUI-ZLUDA版では
#わざわざ手間かけてソースコードを変えているから。でも起動オプションで済むことなので、そのうち
#オプションで済ますようになると思う。ComfyUI-ZLUDAは無駄が多い。
ComfyUIは、ComfyUI-ZLUDAを使うか自力ZLUDA化するかどちらにするかだけど、
上級者なら自力ZLUDA化がおススメかな。
他のは、A1111-ZLUDA版やForge-ZLUDA版はメンテしている人の力量が高いので
ZLUDA版をおススメするけど、ComfyUIは、自力ZLUDA化だなぁ。
なお自力ZLUDA化だとgit pullでの更新は、
comfy\model_management.pyで更新があるとgit pullだけのオプション無しでは更新が通らないので、
その時だけは追加の作業が必要になるわけだけど、そのmodel_management.pyの更新頻度はこんな感じ。
https://github.com/comfyanonymous/ComfyUI/commits/master/comfy/model_management.py
model_management.pyは、更新されるときは短期間に集中して更新されているが、
そうでないときはあまり更新されない。
#こういう場合のためのgitのコマンドでスマートなやり方があるんだけど、それよりも
#後述するバッチファイルをダブルクリックで実行して済ますほうが楽かなぁ。
ZLUDAで torch2.4.1 torch2.5.1 (RX7000シリーズ以降)
旧情報。ZLUDA版は既にtorchは2.6.0になっている。ポイントとなるところだけしばらく残しておく。
SD.NextのZLUDAのwiki
https://github.com/vladmandic/automatic/wiki/ZLUDA
参考までに、A1111本家のtorchは旧いtorch2.1.2のままである。
https://github.com/AUTOMATIC1111/stable-diffusion-webui/blob/82a973c04367123ae98bd9abdf80d9eda9b910e2/modules/launch_utils.py#L320
torch_command = os.environ.get('TORCH_COMMAND', f"pip install torch==2.1.2 torchvision==0.16.2 --extra-index-url {torch_index_url}")
このように2.1.2と旧いのは更新が途絶えているという理由もあるが、当時でも既に旧めのバージョンであった。
ちなみにZLUDA版のA1111-ZLUDAは引き続きメンテナンスされているのでtorchは2.6.0になっている。
torchをこれら新しいのにすると使えるようになる機能があるのだけど、それらのうちflash attentionは
torchが2.2.1の頃から使えてたりする。ここのはRX7000限定だけど、
https://github.com/Repeerc/flash-attention-v2-RDNA3-minimal
お試し torch2.4.1, torch2.5.1 torch2.6.0 (RX6000シリーズ以前)
旧情報。ZLUDA版は既にtorchは2.6.0になっている。ポイントとなるところだけしばらく残しておく。
ちなみにZLUDA版のソースコード見たらtorch2.6.0化の方法はここの記述と基本的に同じで、
より洗練化されたものになっている。
上記の RX7000シリーズ以降 ではちゃんとtorch2.4.1 torch2.5.1を使うようになっているんだけど、
RX6000以前でもtorch2.4.1, 2.5.1, 2.6.0的なところを使わないようにしてやれば動く。
そのやり方だが、
ちょいとzludaの配布ページにて書かれているんだけど、
linuxでzluda使ってtorchを動かす場合のところの記述に
DISABLE_ADDMM_CUDA_LT=1
と設定する旨あって、これはlinuxの話でwindowsの場合は不要だったのだけれども、
windowsでもtorch2.4.1, 2.5.1, 2.6.0の場合はこの設定をしてやれば動くようだ。
これを起動用ファイル webui-user.bat でset使って設定してやると動くようになる。
ただ、この方法だと特にBLASLtが使えない。
torch2.3.1まではBLASLtは関係なかったんだけど、torch2.4.0以降はBLASLtを使うようになっていて、
それをこのやりかたでは使わないようにして起動させている。
なので、SD.Nextは本来であればtorchが2.4.1, 2.5.1となるたびに使える拡張機能が増えるのだが、
このやりかただとBLASLtが使えないためにそれら新機能は使えなかったりする。
単純な生成は問題ないのだが、新torch用の新機能を使おうとすると、それらのなかには
内部でBLASLtを使っていたりして、それでこの方法だとそのBLASLtが使えないために
こんな感じのエラーが出てダメ。
error: CUBLAS_STATUS_NOT_SUPPORTED when calling cublasLtMatmul
新機能を使うにはRX7000またはそれ以降でないとダメだね。
#これはnVIDIAもそうで、RTX4000またはそれ以降でないとダメ。
上記の方法でA1111-ZLUDAからComfyUIまでどれも単純な画の生成は出来たのだが、
ネットによると、設定で追加しなければならいのは、先の
set DISABLE_ADDMM_CUDA_LT=1
だけでなく、他にこれら2つも要るとの情報がある。
set TORCH_BLAS_PREFER_HIPBLASLT=0
set ZLUDA_NVRTC_LIB="C:\ComfyUItorch241\zluda\nvrtc.dll"
* set ZLUDA_NVRTC_LIBのフォルダ部分は要修正。各自フォルダをあわせること。*
まず、A1111-ZLUDA, Forge-ZLUDA, SD.Nextでは、ソースコードをみるに、
TORCH_BLAS_PREFER_HIPBLASLT
ZLUDA_NVRTC_LIB
これら2つは自動的に設定されるように作り込まれているので、
わざわざwebui-user.batに追記する必要はない。
一方、ComfyUIだと、これら2つは自動設定されないようだ。
これら2つを設定しなくともComfyUIは動いたのだが、
カスタムノードのなかにはこれら設定が必要なのがあるのかもしれない。
#具体的にどれのことなのかが書かれていないので、確かめようがないんだよなぁ。
まぁ、A1111系では自動で設定されているので、ComfyUIででも追記しておいたほうがよさそうだ。
2025年2月追記:
ZLUDA Fork版の人とこのtorchの新バージョンの件をやりとりして、その際に曰く、
まず、TORCH_BLAS_PREFER_HIPBLASLT=0 は要らないのではと。
なぜなら、ZLUDA使う場合はtorchからはROCmではなくCUDAデバイスに見えるから。
#なるほどいわれてみればそうだ。
#コードがSD.Nextのを元にしてるのでROCm用にそうなってたわけか。
次に、ZLUDA_NVRTC_LIBのパスは、もともと
venv\Lib\site-packages\torch\lib
に入っているnVIDIA用の nvrtc64_112_0.dll の場所を設定するんだそうな。
A1111系のZLUDA版ではnvrtc64_112_0.dllはそのままなのでZLUDA_NVRTC_LIBのパスもそのまま
ZLUDA_NVRTC_LIB="C:A1111\venv\Lib\site-packages\torch\lib\nvrtc64_112_0.dll"
に自動的に設定され、
一方、ConfyUIではZLUDA化の際にnvrtc64_112_0.dllをZLUDAのdllに入れ替えているので、
入れ替え前の元々のnvrtc64_112_0.dllをどこかにおいてそこをZLUDA_NVRTC_LIBに
指定するようだ。よってComfyUIの起動用webui-user.batには下記のような感じに。
set ZLUDA_NVRTC_LIB="C:\ComfyUI\venv\(...???...)\nvrtc64_112_0.dll"
* set ZLUDA_NVRTC_LIBのフォルダ部分は要修正。各自フォルダを修正すること。*
Triton windows ZLUDA (RX7000以降) [ボツねた候補]
旧情報。
2025年3月にいろいろと実装された。くわしくはsdnextのwiki。
https://github.com/vladmandic/automatic/wiki/ZLUDA
ただ、ここの情報は上記とは別のやり方なので、そのまま残しておく。
windows で ZLUDA 使って動かす Triton。 RX7000以降。
最近アプリで実装される新機能のなかにはbackendsにTriton使っていたりする。
ただ、Tritonは公式でサポートしているのはLinuxだけ。
Tritonのgithub
https://github.com/triton-lang/triton
それで、RadeonでもLinuxでROCmならTritonは動くのだが、windowsではどうかというと、
windowsでAMD RadeonにてZLUDAで動くFork版がある。
windows ZLUDA用Trition
https://github.com/Repeerc/triton-amdgpu-windows
#ここのREADMEは紛らわしい……。
使うにはソースコードからビルドする。ビルド方法はコード公開元に書かれている。
Python3.10用のバイナリwhlも公開されており、windowsのZLUDAで動く。
build済みはなぜか別repositoryになっていて、
https://github.com/Repeerc/triton-windows-amdgpu
ここのreleasesにある。
https://github.com/Repeerc/triton-windows-amdgpu/releases
バイナリを使う場合は、
まずバイナリのほかにバイナリであってもビルド環境が必要。ビルド環境というか、
windowsでMSVCをインストールする際に入れるWindows KitsにあるincludeとLibが必要。
それとPythonのLib (Libs) も。
Tritonのビルド済みバイナリをダウンロードし、アプリのフォルダにコピーする。
アプリのフォルダにてコマンドプロンプトを開き、
activateしたのち、
pip install コマンドでインストールする。
実際のコマンドはこんな感じ。
venv\Scripts\activate
pip install triton-3.0.0-cp310-cp310-win_amd64.whl
注意事項?:
HIP_VISIBLE_DEVICES でのGPU指定が効かないような???
A1111-ZLUDA インストール時の時間短縮 (済)
#ボツにしたネタの復活。そして2025年5月、ここの記述と同じ改変が加えられたので、役割を終えたため削除。
GPU VRAM 強制解放でVRAMの空きを確保
APUなどでマザーボードからモニターに出力している場合はVGAのVRAM全領域を全てAI用に使えるが、
そうせずにVGAからモニターに接続している場合だと画面出力用にVRAMを2GBくらい消費してしまう。
そのため、もし画の生成中にVRAMが不足し溢れてスワップが起きてしまうと、途端に遅くなる。
PCを再起動すれば起動直後はVRAM消費が500MB以下になるが、それは一時的なことであり
すぐに増えるわけで、このためにいちいちPCを再起動するわけにもいかないだろう。
そこで、再起動せずにVRAMを解放する方法を書いておく。
cru、Custom Resolution Utilityというソフトがある。
これはCustom Resolution Utilityの名とおりモニターの解像度をカスタマイズするソフトなのだが、
一緒にrestart64.exe というファイルが同梱されている。
このrestart64.exe、何をするexeかというと、VGAのドライバをフルリセットする実行ファイル。
これを実行すると画面が暗転してVGAにフルリセットがかかり、VRAM使用量がPC再起動時並となる。
各種手抜き用バッチファイルの元 (ここでは上級者向け プログラム経験者なら脱初心者の初級レベル程度)
手抜き用のバッチファイルをいくつか貼っておく。
上級者以外は使ってはいけない。
#このwikiは行数制限と文字数制限があり、これがけっこうきついので、コードはガッツリ省略してある。
#コード削る際は、たとえばバックアップファイルの有無で挙動を変える部分などもあったが削除したし、
#バックアップから戻すバッチもボツにした。逆にするだけだからね。
コード自体は「見ればわかる」ようにしてある。「読む」ではなく「見てわかる」ことを重要視した。
学習用のsd-scripts用もボツにしたが、バッチファイルの中の対象ファイルをtrain_network.pyなどに
するだけで流用可能。
先に記載済みのZLUDAファイルの入れ替え用の汎用版patchzluda6.batファイルは、本来はここに
記載するたぐいのものであるが、自力ZLUDA化でなくても使うので、別途に先に記載した。
A1111 dev版, Forge, reForge など、A1111系自力ZLUDA化用バッチファイル
Radeon ZLUDAに記述してあるA1111系自力ZLUDA化の、簡略化のための各種バッチファイル。
これを用いると、A1111の本家や、A1111の各種派生、たとえばForge本家やreForgeなど、
ZLUDA用Fork版ではなくアプリ本家を自力ZLUDA化出来る。
バッチでやっていることはRadeon ZLUDAの自力ZLUDA化に書いてある2つのファイルの編集のほか、
ついでにtorchのバージョンを他にあわせてtorch2.3.1にしてある。2.6.0にした(2025年3月更新)。
あとはwebui-user.batの3行目にまだPATHが追加されていない場合はPATHなどを追加。
*reForgeの場合はこのA1111系が使えるのはmain-oldブランチのほう。現行mainはComfyUI系に
*なったので、A1111系のだけでは使えない。
*reForgeの現行mainブランチには、modules\launch_utils.pyに対しA1111用のを、
*そしてldm_patched\modules\model_management.pyに対し後述のComfyUI用のを用いるのだが、
*reForgeでおススメ出来るのはmain-oldだけなので現行main用のは各自でニコイチして。
*なお、reForge に限り、webui-user.batに --attention-quad は必須につき、各自で
set COMMANDLINE_ARGS=--attention-quad
*のように --attention-quad を追記すること。
バッチファイルは
A1111toZLUDA.bat と、
A1111modules2ZLUDA.sh の、
2ファイル構成。
batでバックアップファイルを作成したあと、Git for windowsのbash経由でshスクリプトを呼び出して、
shスクリプト内のawkで文字列操作をしている。
文字列の入れ替えは最初に合致したもののみにしてある。
実行にはgitのインストールが必須だが、既にインストールしてあるだろう。
あと実はshだけで実行完了するのだが、それなりの理由があってわざわざbat経由にしている。
#上級者なら他のバッチと統合して一発化するだろうからその統合作業を楽にするため。
- A1111toZLUDA.bat
実行すると実行前と実行後のファイルの行数を表示するようにしてある。initialize.pyは6行増えてれば成功。@echo off setlocal set "PATH=C:\Program Files\Git\bin;%PATH%" set "MODULES_DIR=modules" set "INITIALIZE_PY=%MODULES_DIR%\initialize.py" set "INITIALIZE_PY_BACKUP_FILE=%MODULES_DIR%\initialize.py.backup" set "LAUNCH_UTILS_PY=%MODULES_DIR%\launch_utils.py" set "LAUNCH_UTILS_PY_BACKUP_FILE=%MODULES_DIR%\launch_utils.py.backup" set "WEBUI_USER_BAT=webui-user.bat" set "WEBUI_USER_BAT_BACKUP_FILE=webui-user.bat.backup" echo. echo Backing up %INITIALIZE_PY% to %INITIALIZE_PY_BACKUP_FILE% copy "%INITIALIZE_PY%" "%INITIALIZE_PY_BACKUP_FILE%" echo Backing up %LAUNCH_UTILS_PY% to %LAUNCH_UTILS_PY_BACKUP_FILE% copy "%LAUNCH_UTILS_PY%" "%LAUNCH_UTILS_PY_BACKUP_FILE%" echo Backing up %WEBUI_USER_BAT% to %WEBUI_USER_BAT_BACKUP_FILE% copy "%WEBUI_USER_BAT%" "%WEBUI_USER_BAT_BACKUP_FILE%" echo. echo %INITIALIZE_PY% lines find /c /v "" < "%INITIALIZE_PY%" echo %LAUNCH_UTILS_PY% lines find /c /v "" < "%LAUNCH_UTILS_PY%" echo %LAUNCH_UTILS_PY% lines find /c /v "" < "%WEBUI_USER_BAT%" echo. bash A1111modules2ZLUDA.sh echo. echo %INITIALIZE_PY% lines find /c /v "" < "%INITIALIZE_PY%" echo %LAUNCH_UTILS_PY% lines find /c /v "" < "%LAUNCH_UTILS_PY%" echo %LAUNCH_UTILS_PY% lines find /c /v "" < "%WEBUI_USER_BAT%" echo. endlocal pause
- A1111modules2ZLUDA.sh
先のbatから呼び出されるが、このshスクリプトのみでの実行も可能。#!/bin/bash TEMP_FILE0=$(mktemp) wc -l modules/initialize.py awk ' /import torch/ && !found { print; print " torch.backends.cudnn.enabled = False"; print " torch.backends.cuda.enable_flash_sdp(False)"; print " torch.backends.cuda.enable_math_sdp(True)"; print " torch.backends.cuda.enable_mem_efficient_sdp(False)"; print " if hasattr(torch.backends.cuda, \"enable_cudnn_sdp\"):"; print " torch.backends.cuda.enable_cudnn_sdp(False)"; found = 1; next; } { print } ' modules/initialize.py > "$TEMP_FILE0" while IFS= read -r line; do printf "%s\r\n" "$line" done < "$TEMP_FILE0" > modules/initialize.py rm "$TEMP_FILE0" wc -l modules/initialize.py wc -l modules/launch_utils.py SEARCH_STRING1="https://download.pytorch.org/whl/cu12[0-9]" NEW_STRING1="https://download.pytorch.org/whl/cu118" TEMP_FILE1=$(mktemp) gawk_script=$(cat <<EOF { if (found == 0 && \$0 ~ "${SEARCH_STRING1}") { gsub("${SEARCH_STRING1}", "${NEW_STRING1}"); found = 1; } print; } EOF ) gawk -v found=0 "$gawk_script" modules/launch_utils.py > "$TEMP_FILE1" wc -l modules/launch_utils.py SEARCH_STRING2="pip install torch==2.[0-9].[0-9] torchvision==0.[0-9][0-9].[0-9]" NEW_STRING2="pip install torch==2.6.0 torchvision" TEMP_FILE2=$(mktemp) gawk -v search_string="$SEARCH_STRING2" -v new_string="$NEW_STRING2" '{ if (!found && $0 ~ search_string) { gsub(search_string, new_string); found = 1; } print; }' "$TEMP_FILE1" > "$TEMP_FILE2" while IFS= read -r line; do printf "%s\r\n" "$line" done < "$TEMP_FILE2" > modules/launch_utils.py rm "$TEMP_FILE1" rm "$TEMP_FILE2" wc -l modules/launch_utils.py wc -l webui-user.bat target_line=3 TEMP_FILE3=$(mktemp) awk -v target="$target_line" ' { if (NR < target) { print; } else if (NR == target) { line = $0; if (index(line, "set PATH=%~dp0zluda;%~dp0.zluda;%HIP_PATH%bin;%PATH%") == 0) { print "set PATH=%~dp0zluda;%~dp0.zluda;%HIP_PATH%bin;%PATH%"; print "set DISABLE_ADDMM_CUDA_LT=1"; print "set ZLUDA_COMGR_LOG_LEVEL=1"; print line; } else { print; } } else { print; } } ' webui-user.bat > "$TEMP_FILE3" while IFS= read -r line; do printf "%s\r\n" "$line" done < "$TEMP_FILE3" > webui-user.bat rm "$TEMP_FILE3" wc -l webui-user.bat exit 0
ComfyUI自力ZLUDA化用バッチファイル
ComfyUItoZLUDA.bat と、
ComfyUImodules2ZLUDA.sh の、
2ファイル構成。
ComfyUIは書き換えるファイルがA1111系とは異なるので、バッチファイルはA1111系とは別とした。
Fluxの速度改善のための文字列入れ替えもしてある。Fluxの速度改善部分はComfyUIで新オプションが出来たので文字列入れ替えは外した(2025年3月更新)。
起動用のwebui-user.batも作られる。webui-user.baの作成は文字列操作とはちょっと違うので、
bat側で行っている。ただしこれはwebui-user.batが無い場合のみにしており、自前のwebui-user.batが
既にある場合は上書きはされない。
Fluxの速度改善は、新しいオプション--fp16-unetが出来たので、このバッチで自動的に作ら
れる起動用webui-user.batにサンプルとしてREM文で記載してある。必要であれば各自で有効に。
ComfyUItoZLUDA.bat
@echo off
setlocal
set "PATH=C:\Program Files\Git\bin;%PATH%"
set "MODULES_DIR=comfy"
@REM set "MODULES_DIR=ldm_patched\modules"
set "MODEL_MANAGEMENT_PY=%MODULES_DIR%\model_management.py"
set "MODEL_MANAGEMENT_PY_BACKUP_FILE=%MODULES_DIR%\model_management.py.backup"
echo.
echo Backing up %MODEL_MANAGEMENT_PY_BACKUP_FILE% to %MODEL_MANAGEMENT_PY_BACKUP_FILE%
copy "%MODEL_MANAGEMENT_PY%" "%MODEL_MANAGEMENT_PY_BACKUP_FILE%"
echo.
echo %MODEL_MANAGEMENT_PY% lines
find /c /v "" < "%MODEL_MANAGEMENT_PY%"
bash ComfyUImodules2ZLUDA.sh
echo.
echo %MODEL_MANAGEMENT_PY% lines
find /c /v "" < "%MODEL_MANAGEMENT_PY%"
if not exist "webui-user.bat" (
(
echo @echo off
echo.
echo set PATH=%%~dp0zluda;%%~dp0.zluda;%%HIP_PATH%%bin;%%PATH%%
echo set PYTHON="%%~dp0/venv/Scripts/python.exe"
echo set GIT=
echo set VENV_DIR=./venv
echo set COMMANDLINE_ARGS=--disable-cuda-malloc --use-quad-cross-attention --auto-launch
echo @REM set COMMANDLINE_ARGS=--disable-cuda-malloc --use-quad-cross-attention --auto-launch --fp16-unet
echo.
echo set DISABLE_ADDMM_CUDA_LT=1
echo @REM set DISABLE_ADDMM_CUDA_LT=0
echo set ZLUDA_COMGR_LOG_LEVEL=1
echo.
echo %%PYTHON%% main.py %%COMMANDLINE_ARGS%%
echo.
echo pause
echo.
) > webui-user.bat
echo webui-user.bat generated
) else (
echo webui-user.bat not generated
)
endlocal
pause
#!/bin/bash
TEMP_FILE0=$(mktemp)
wc -l comfy/model_management.py
awk '
/import torch/ && !found {
print;
print "torch.backends.cudnn.enabled = False";
print "torch.backends.cuda.enable_flash_sdp(False)";
print "torch.backends.cuda.enable_math_sdp(True)";
print "torch.backends.cuda.enable_mem_efficient_sdp(False)";
print "if hasattr(torch.backends.cuda, \"enable_cudnn_sdp\"):";
print " torch.backends.cuda.enable_cudnn_sdp(False)";
print "";
print "def jit_script(f, *_, **__):";
print " f.graph = torch._C.Graph() # pylint: disable=protected-access";
print " return f";
print "torch.jit.script = jit_script";
print "";
print "_topk = torch.topk";
print "def topk(tensor: torch.Tensor, *args, **kwargs):";
print " device = tensor.device";
print " values, indices = _topk(tensor.cpu(), *args, **kwargs)";
print " return torch.return_types.topk((values.to(device), indices.to(device),))";
print "torch.topk = topk";
print "";
found = 1;
next;
}
{ print }
' comfy/model_management.py > "$TEMP_FILE0"
while IFS= read -r line; do
printf "%s\r\n" "$line"
done < "$TEMP_FILE0" > comfy/model_management.py
rm "$TEMP_FILE0"
wc -l comfy/model_management.py
exit 0
FLUX速度改善 ( Radeon ZLUDA から引っ越し)
2025年現在、FLUXに対応しているのはComfyUIとForge2、それとSD.NextとSDcppの
4種だけど、ComfyUIとForge2でFLUXの速度がやたら遅い。GPUの地力からいってありえない遅さ。
#ちなみにNvidiaの旧型でもそんな感じの速度低下があるようだ。
原因がなんとなくわかったので、対処方法も書いておく。
原因は、演算をBF16でおこなうためにtorch.bfloat16を使っているから。
新型VGAではBF16とFP16の演算速度は同じだが、旧型VGAだとBF16はFP16の半分くらいしか
速度が出ない。
そして、Fluxなど新しい方式のなかにはFP16よりもBF16が優先されるものがいくつかあり、
そういうのだと旧型VGAでは遅くなる。
対処方法は、2通り。演算をFP32かFP16でおこなうようにすればよい。だいたい速度は倍になる。
ちなみにwindows ZLUDAだけでなくLinux ROCmでも同様と思われる。(まだ確認していない。)
- FP32
起動オプションCOMMANDLINE_ARGSでFP32を指定する。
webui-user.batをwebui-userFP32.batという名前でコピーして、
あとはFLUXを使うときだけwebui-userFP32.batで起動する。
副作用として、FP32にするとVRAMとRAMをより消費する。
そのため、VGAの搭載VRAM量によってはVRAMが溢れて速度は逆に低下する。
なので実際のところ、VRAMが20Gや24Gでしかこの手は使えない。- ComfyUIでFP32
webui-user.batをwebui-userFP32.batという名前でコピーして、ComfyUI-ZLIDAは上、ComfyUI本家は下のに。set COMMANDLINE_ARGS=--force-fp32 --auto-launch set COMMANDLINE_ARGS=--disable-cuda-malloc --use-quad-cross-attention --auto-launch --force-fp32 - Forge2でFP32
webui-user.batをwebui-userFP32.batという名前でコピーして、set COMMANDLINE_ARGS=--use-zluda --all-in-fp32
- ComfyUIでFP32
- FP16
FP16での演算はFP32のときよりもVRAMとRAMの消費が少なく生成速度も速い。
ただし、モデルの種類によってはFP16に対応していないものがあり、そういうモデルだと
FP16では黒画面しか生成されない。いちおうFluxはFP16ででも黒画面にならず大丈夫。
あと、FP32やBF16に比べて画の品質がやや落ちる。気にする程度かというと、そこは何とも言えず。- ComfyUIでFP16
新しいオプション--fp16-unetが出来たので、webui-user.batの
COMMANDLINE_ARGSに記述する。
ComfyUI-ZLIDAは上、ComfyUI本家は下のに。set COMMANDLINE_ARGS=--fp16-unet --auto-launch set COMMANDLINE_ARGS=--disable-cuda-malloc --use-quad-cross-attention --auto-launch --fp16-unet - Forge2でFP16
ソースコードを書き換える (上級者向け)
起動オプションにはFP16版の--force-fp16と--all-in-fp16もあるのだが、指定してもBF16を使ってしまう。
仕方がないのでソースコードを書き換える。上級者向けとなるが、VRAM16G機なら試す価値アリ。
FLUX用の設定部分で優先度の並びが BF16, FP16, FP32 となっているので、FP16を先にする。
#ちなみにSD1.5やSDXLでは最初から FP16, BF16, FP32 の順になっている。
repositories\huggingface_guess\huggingface_guess\model_list.py の600行代中盤にFLUX用設定
class Flux(BASE): があり、そこの716行目あたりの(2025年4月現在)
https://github.com/lllyasviel/huggingface_guess/blob/70942022b6bcd17d941c1b4172804175758618e2/huggingface_guess/model_list.py#L716
ここの
supported_inference_dtypes = [torch.bfloat16, torch.float16, torch.float32]
の順番を入れ替え、当面は上記でしのぐとして、supported_inference_dtypes = [torch.float16, torch.bfloat16, torch.float32]
Forgeで起動オプションCOMMANDLINE_ARGSでFP16指定してFP16になるようにするには、
backend\memory_management.py の
def should_use_bf16 のところでを挿入すればよい。これで起動オプションでFP16指定が使えるようになる。if FORCE_FP16: return False
- ComfyUIでFP16
ROCm windows版 (ZLUDAと二刀流インストール)
Computex2025において、AMD曰く、2025年の後半にROCmをwindowsに対応させるとのこと。
現在(2025年6月)、AMD公式ではまだリリースされていないので、
ここにROCm windows版を用いたComfyUIとreForgeのインストール方法を書いておく。
他は、A1111とForgeはTorch2.7.0へ対応しているのかわからないので試していない。
また、SD.NextはもともとROCmとZLUDAの両方対応しており、自動判定自動処理が仕組まれているので、
ここに記述する方法だと逆に不具合が起こりそうな気がするため、これも試していない。
#まぁSD.Nextはアッサリ動きそうではあるが。
そもそも、AMDから公式版が出るまでの暫定的なものであるのだから、この程度でいいかと。
下記のやり方ではwarningが出まくるけど、それらも放置している。
ROCm windows版動かす方法は3通り。
- a. ソースから自ビルド
https://github.com/ROCm/TheRock
- b. scottt氏ビルド版
主に現行最新VGA向け
https://github.com/scottt/rocm-TheRock
https://github.com/scottt/rocm-TheRock/releases
- c. lshqqytiger氏ビルド版
主に旧型RX6000上位モデルおよびRX7000向け
https://github.com/lshqqytiger/TheRock
https://github.com/lshqqytiger/TheRock/releases
ソースからビルドするのが基本ではあるが、そのうち公式からリリースされるだろうから、
ビルド版を使うことにした。
それで、VGAの世代の都合上、上記 c. lshqqytiger氏ビルド版の、2025 May 11版を使った。
上記を用いた情報がネット上で見受けられるが、
ROCm windows版が使えるようになってからまだ日が浅い(2025年6月現在)ためか、
たいてい初期において出てくる情報には誤りが多く含まれるので、あまり真に受けないように。たとえば、よくみかける具体例をいくつか挙げると、
ROCmとZLUDAの比較において、
attentionが変われば速度も変わるしVRAM使用量も変わるのだが、初期状態のattentionが違えば
速度もVRAM使用量も違うのは当たり前で、ROCmとZLUDAの比較をしているように見えて実は
初期attentionの違いを比較しているだけだったり、また、cuDNN/MIOpenの有効無効でも速度やVRAM使用量が変わるのだが、ZLUDAでもcuDNN/MIOpenを有効にすることは可能で、有効にすると1割から2割高速化するのだけど、
これも同じ設定にせずに比較をしていたり、あとは、deep-cahceという高速化機能があり、これは品質をガッツリ犠牲にしながら大幅な高速化をするもので、最近ではtea-cacheとかWaveSpeedなんかもこの系統なんだけど、
それでdeep-cacheがROCmだと初期状態で有効になっていたりすると、大幅に高速化するのは当たり前だ。ROCmとZLUDAで生成速度などが極端に違う場合は、たいていはこういうオチだったりする。
だいたいさ、windows版ROCmがLinux版ROCmより大幅に速くなるなんてそんなわけないんだからさ、Linuxでの速度がどれくらいかわかってれば情報の真偽は見分けがつくのよ。
なので、あまり真に受けないように。
ここではROCm版とZLUDA版とで二刀流ができるようにインストールする。
なお、ここではなるべく特殊なテクニックは用いないようにしてある。
#一度うまくいったあとはご自由に。
- Python
Pythonは、既にA1111-ZLUDAなどで使っており、そしてA1111はPython3.10指定だ。
一方、今回インストールするROCmのlshqqytiger氏ビルド版はPython3.11である。
Pythonは複数バージョンの共存が可能ではあるが、そのやりかたはいくつもあり、
ではどうするか、ということになる。
上級者であればポータブル版を使うのだろうけれども、ポータブル版には気を付けなければ
ならないことがあり、たとえば通常版のPythonと比べてライブラリが不足していたりするので、
こういうのの対処が出来ないと、のちのち落とし穴となる。
なので、ここではポータブル版ではなく通常版のPythonを使う方法で記述する。
通常版をインストールするとなると、Python3.10と3.11の共存をどうするかで、
ここでは、Python3.10を優先とするやりかたとする。これは Radeon ZLUDA との兼ね合い。
Python3.11をインストーラーでインストールする際にPATHを追加するチェックボックスがあり、
Radeon ZLUDAではPython3.10のインストールの際にここをチェックしてインストールしているので、
今回のPyhton3.11ではここをチェックせずにインストールする。
当然、Python3.11はPATHには載らない。
- git
gitはRadeon ZLUDAでインストールしたのそのままでよい
- AMD HIP SDK for Windows
今回は、ZLUDA版と共存させるので、既存のインストール済みHIP SDKはそのままでよい
- HIP SDK developおよびtorch群
HIP SDK developとtorch群を、lshqqytiger氏のgithubから入手する。下記releasesの、
https://github.com/lshqqytiger/TheRock/releases
2025 May 11のところにある、HIP SDK developのリンクからダウンロードする。
サイズが4GBちかくある。
これと、torch, torchvision, torchaudioをダウンロードする。なお、現在(2025年6月)は上記が最新だから用いただけであって、基本的には最新版を用いる。torch-2.7.0+rocm6.5.unofficial-cp311-cp311-win_amd64.whl torchvision-0.22.0+rocm6.5.unofficial-cp311-cp311-win_amd64.whl torchaudio-2.7.0+rocm6.5.unofficial-cp311-cp311-win_amd64.whl
ComfyUIとreForgeのインストール
ComfyUIとreForgeのインストール方法は、基本的には同じで、下記の流れになる。
- comfyUI, reForgeの入手
comfyUIとreForgeを入手する。ComfyUIはComfyUI本家から入手する。
フォルダc:\comfyUIとc:\reForgeそれぞれでコマンドプロンプト(power shellは不可)を開き、comfyUIおよびreForgeをダウンロード(git clone)する。
今回はComfyUIはComfyUI本家なので、ココ。git clone https://github.com/comfyanonymous/ComfyUI.git .
reForgeは、旧main-old版はコレ。旧main-old版はbackendがA1111-Forgeの系譜。git clone --single-branch --branch main-old https://github.com/Panchovix/stable-diffusion-webui-reForge.git .
現main版はコレ。backendがComfyUI。それぞれのコマンドプロンプトはそのまま使うので開いたままにしておく。git clone https://github.com/Panchovix/stable-diffusion-webui-reForge.git .
- HIP SDK developインストール
HIP SDK developのアーカイブをc:\comfyUIおよびc:\reForgeに展開する。ここではそれぞれとなるように展開する。ここに展開するのは、既存のHIP SDKと共存させるため。c:\comfyUI\6.5 c:\reForge\6.5
- Python仮想環境venv作成
続いて、Python仮想環境のvenvを作成する。
ここで、Pythonの3.11はPAHTが通っていないので、フルパスで実行する。
先のコマンドプロンプトにて、下記の「 (ユーザー名) 」のところを各自PCに合わせて書き換えたうえ実行する。C:\Users\(ユーザー名)\AppData\Local\Programs\Python\Python311\python.exe -m venv venv
- Python仮想環境アクティベート
続いて下記コマンドでPython仮想環境をアクティベートアクティベートしたら、下記コマンドでpipをインストールする。それと、最近pipの仕様が変わってwheelが別物になったらしいのでwheelもインストールする。venv\Scripts\activatepython.exe -m pip install --upgrade pip pip install wheel
- torch群のインストール
torch群をインストールする。
ダウンロード済みのtorch群、
torch-2.7.0+rocm6.5.unofficial-cp311-cp311-win_amd64.whl
torchvision-0.22.0+rocm6.5.unofficial-cp311-cp311-win_amd64.whl
torchaudio-2.7.0+rocm6.5.unofficial-cp311-cp311-win_amd64.whl
これらtorch群をc:\comfyUIフォルダおよびreForgeフォルダにコピーする。
そして下記pipコマンドでtorch群をインストール。pip install torch-2.7.0+rocm6.5.unofficial-cp311-cp311-win_amd64.whl pip install torchvision-0.22.0+rocm6.5.unofficial-cp311-cp311-win_amd64.whl pip install torchaudio-2.7.0+rocm6.5.unofficial-cp311-cp311-win_amd64.whl
- 外部モジュール群のインストール(reForgeの場合はここはスキップ)
torch以外の外部モジュールをインストールする。reForgeの場合は自動インストールが可能なのでここはスキップ。
まずモジュール全般。次に、ComfyUIではのちのちおそらくnumpyで問題が出ると思うので、numpyをバージョン指定でインストールする。pip install -r requirements.txtComfyUI定番のComfyUI-Managerをインストールする。pip uninstall numpy pip install numpy==1.26.4cd custom_nodes git clone https://github.com/ltdrdata/ComfyUI-Manager.git
ひとまず手動でのインストールはこれで完了。
起動用batの作成
起動用のbatファイル、comfyUI-user.batを作成する。reForgeの場合はwebui-user.batを編集。
中身はそれぞれこんな感じ。
comfyUI-user.bat
@echo off
set HIP_PATH=%~dp06.5
set PATH=%HIP_PATH%bin;%PATH%
set PYTHON="%~dp0venv/Scripts/python.exe"
SET MIOPEN_FIND_MODE=2
set GIT=
set VENV_DIR=./venv
set COMMANDLINE_ARGS=--use-quad-cross-attention --auto-launch
%PYTHON% main.py %COMMANDLINE_ARGS%
pause
echo.
reForgeの場合はwebui-user.batを編集する。
@echo off
set HIP_PATH=%~dp06.5
set PATH=%HIP_PATH%bin;%PATH%
set PYTHON="%~dp0venv/Scripts/python.exe"
SET MIOPEN_FIND_MODE=2
set GIT=
set VENV_DIR=./venv
set COMMANDLINE_ARGS=
call webui.bat
echo.
ポイントとしては、
set HIP_PATH=%~dp06.5
ここでHIP_PATHを上書きしている。これで既存のHIP SDKと共存が可能となる。
#あとは、set COMMANDLINE_ARGSのところは、一度うまく動くことを確認出来たらあとはご自由に。
#たとえばattentionまわりはtritonをインストールすればいろいろ使えるようになるのだが、
#最初は上記で確認をしておくこと。
起動
comfyUI-user.batもしくはreForgeのwebui-user.batをダブルクリックで起動。
reForgeの場合は自動インストールが始まる。インストールが済むとwebブラウザにreForgeの画面が出る。