ZLUDAannex1

Last-modified: 2025-10-05 (日) 10:56:44
 

ZLUDA別館1 ZLUDAannex1
初版: 2025年1月

 

Radeon ZLUDA に以前載せていて削除した内容や、載せずにボツにしたもの、
また初回インストールとは関係ない内容のをこちらに。

Radeon ZLUDAは初心者向けだが、ここannex1は、内容は初心者向けではないよ。
そもそもRadeon ZLUDAZLUDAannex1もどちらも自分用メモを元に公開用に手を加えたもので、
特にここ別館では自分用のままになっているところもアリ。
あとバッチファイルなどを添付形式にせずにここに張り付けているのは理由があってあえてそうしている。

 

目次

 
 

関連ページ

 
 

Radeonグラフィックスアーキテクチャ名

 

Radeonのアーキテクチャ名と製品名の対応リスト
Radeon ZULUDA の旧情報2024年8月10日からの復元です
https://wikiwiki.jp/sd_toshiaki/?cmd=diff_log&action=detail&did=20240810223533f23fd&page=Radeon+ZLUDA

 
Radeonグラフィックスアーキテクチャ名とVGAのリスト


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なら、まず、A1111ComfyUIなどの起動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ファイルがA1111ComfyUIなどのフォルダに出来上がる。
ちなみにいきなりコマンドプロンプト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通り。

  • Forge ZLUA版を使う
  • Forge本家を自力ZLUDA化する

どちらが良いかは、動いたほう。いま(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

の395行目
( https://github.com/lshqqytiger/stable-diffusion-webui-amdgpu-forge/blob/4a93f424d40948a1f4630872517a6281dc7daa11/modules/launch_utils.py#L395 )

            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 ZLUDAComfyUI 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 (長いので折りたたみ)

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 を指定している。これRadeonComfyUIを使うには必須で、
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 (ComfyUIは折りたたみしとく)

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
ComfyUImodules2ZLUDA.sh (ComfyUIは折りたたみしとく)

ComfyUImodules2ZLUDA.sh

#!/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
  • 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 のところで
          if FORCE_FP16:
              return False
      を挿入すればよい。これで起動オプションで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通り。

ソースからビルドするのが基本ではあるが、そのうち公式からリリースされるだろうから、
ビルド版を使うことにした。
それで、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をダウンロードする。
    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
    なお、現在(2025年6月)は上記が最新だから用いただけであって、基本的には最新版を用いる。

ComfyUIとreForgeのインストール

ComfyUIとreForgeのインストール方法は、基本的には同じで、下記の流れになる。

  • フォルダ作成
    フォルダを作成する。
    例えば、c:\comfyUI や c:\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に展開する。ここではそれぞれ
    c:\comfyUI\6.5
    c:\reForge\6.5
    となるように展開する。ここに展開するのは、既存のHIP SDKと共存させるため。
  • Python仮想環境venv作成
    続いて、Python仮想環境のvenvを作成する。
    ここで、Pythonの3.11はPAHTが通っていないので、フルパスで実行する。
    先のコマンドプロンプトにて、下記の「 (ユーザー名) 」のところを各自PCに合わせて書き換えたうえ実行する。
    C:\Users\(ユーザー名)\AppData\Local\Programs\Python\Python311\python.exe -m venv venv
  • Python仮想環境アクティベート
    続いて下記コマンドでPython仮想環境をアクティベート
    venv\Scripts\activate
    アクティベートしたら、下記コマンドでpipをインストールする。それと、最近pipの仕様が変わってwheelが別物になったらしいのでwheelもインストールする。
    python.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の場合は自動インストールが可能なのでここはスキップ。
    まずモジュール全般。
    pip install -r requirements.txt
    次に、ComfyUIではのちのちおそらくnumpyで問題が出ると思うので、numpyをバージョン指定でインストールする。
    pip uninstall numpy
    pip install numpy==1.26.4
    ComfyUI定番のComfyUI-Managerをインストールする。
    cd 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の画面が出る。