※ 2024/1/23更新 内容の説明を補足しました。
※ 2024/2/29更新 内容を大幅に変更しました。
2023年12月17日にROCm6.0が公開されました。
当サイトもこちらの記事でコンパイルに挑戦してみましたが、残念ながらまたROCm用の変更がコミットされていかなったため、失敗に終わりました。
今回、Pytorchが公式で対応しましたので、改めて挑戦してみました。
今回は残念ながら世界有数だとは思いますが、最速ではないと思います。
[更新] 今回セットアップ内容を大幅に見直しましたので、記事を更新して対応します。
注意:公開に当たっては複数回セットアップをテストしていますが、どの環境でもトラブルなく必ず正常動作するところまでは保証いたしかねます。あくまでも個人が公開しているものですので、使用に当たっては自己責任でお願いします。使用によって生じた結果には一切の責任を負えません。納得できる方のみ使用してください。
テスト環境
- CPU:Intel Core i7-13700K
- CPUクーラー:サイズ Big shuriken3 RGB
- マザーボード:Asrock Z690M-ITX/ax
- SSD:M2_2(チップセット側) Moment MT34 NVMe Gen3 SSD 256GB(今回は使用していません)
- M2_1(CPU側) FPI256MWR7(今回は使用していません)
- NVMe-USB3.2 Gen2X2 アルミエンクロージャー BLM20C:SUNEAST SE900NVG3-256G(システムドライブ)
- 電源:Corsair SFX 750W電源 SF-750
- メモリ:G Skill Trident Z DDR4-3600 OCメモリ16GB*2=32GB
- ケース:QDIY 0040-*PCJMK6-ITX(テストベンチ)
- OS:Lubuntu 22.04LTS(jammy-jellyfishベース)
- GPU Sapphire Pulse Radeon RX7900XTX 24GB
いつも通りになります。
必要なもの
デュアルブートや専用環境を使用していると思われているようですので、一応お断りしておきます。
本記事の作成に当たってはUSB-SSDで接続して、Windows環境との併用を行っています。
デュアルブートの場合、インストールに失敗するとWindows環境も起動しなくなる可能性があること、使用を中止したときに初心者がもとに戻すのが困難であることがその理由です。
USBメモリ2本・・・Lubuntu(Ubuntu)インストールUSB作成用、スクリプト保管用1本
わたくしは上の製品を使っています。
USB-SSDエンクロージャ1個・・・・2.5インチSSD用のアダプタでも構いませんし、10Gbps用の変換ケースでもよいと思います。
できるだけ高速なものがよいですが、10Gbpsと20Gbpsではモデルデータの読み込み時間はあまり変わりませんでした。
リッチな方はThunderBolt3でもよいのではないかと思います。(マザーボードの対応が必要)
2.5 SATA-USBアダプター
わたくしは上の製品を所有しています。
USB10Gbps対応M.2外付けケース
私は上のメーカーの20Gbps版を使っています。
配布スクリプト
ファイルは上からダウンロードしてください。
ROCm6.0は5.7以前とは大きく変更になり、バイナリ互換性がありません。
すでに公式でバイナリがビルドされていますが、今回はビルドの方法を変更したので基本はわたくしがビルドしたバイナリを使うように変更しています。
公式のバイナリが使いたい方はセットアップスクリプトの該当箇所を書き換えてください。
コメントに解説があります。
解凍して、USBメモリに入れておいてください。
「setup_webui_r60」フォルダ直下にファイルが配置されるようにしてください。
Linuxのインストール方法についてはこちらに説明してあります。
変更点
公式pytorch/torchvisionの違い
すでに対応が終了とされているgfx900=Vega56/64/Instinct Mi25などに対応
公式にはサポート終了していますが、内部にgfx900の情報を持っていますので、をつければ動作可能だと思います。(未確認)
わたくしのXアカウントをフォローされている方ならご存知のことと思いますが、RX580 2048SP 16GBを購入しました。
これを使ってPolarisにも対応させようと思ったのですが、残念ながらROCm6.0から完全に非対応になりました。
ROCm自体にPolarisの情報がなくなりました。
また今までは
- Stable Diffusion WebUI
- kohya_ss GUI
に対応していましたが、それに加えて
- Stable Diffusion WebUI Forge
- ComfyUI
- Fooocus
- SD-Next
に対応しました。
申し訳ありませんが、すべての機能が正常に使えるところまでの動作確認はしておりません。
確認できた不具合情報などは各WebUIのインストールの仕方の中で説明します。
また、今まではhomeディレクトリ直下にインストールしていましたが、「ai-app」というディレクトリを作成し、そこにインストールするようにしました。
/ai-app直下にai_datというフォルダを作成し、そこにモデルデータなどを集めて、データを共用し、ディスク容量を節約するようにしました。
~/ai-app/ai_dat/sd/models
以下にモデルデータ、Lora、アップスケーラー、embedding、VAE、ControlNetモデルデータが入っています。
セットアップ時に各WebUIのインストールフォルダ内にシンボリックリンクを張っておりますのでわかる方はセットアップスクリプトを見てみてください。
各フォルダが何を意味するのかはイラストAIを使っていてる方にはわかると思いますので解説は省きます。
また、
~/ai-app/ai_dat/kohya_ss
にkohya_ss GUIのサンプルデータが収められています。
~/ai-app/ai_dat/sd/comfyui
にComfyUIのユーザーデータが収められています。
~/ai-app/ai_dat/sd/images
に出力したイメージを納めています。
これによって不具合が起きて再インストールするときも最小の作業で再インストールできるようになっています。
バックアップや環境の移行が非常に簡単になっています。
バックアップする場合は~/ai-app/ai_dat以下をバックアップしてください。
ConkyとHardinfoをインストール
新たにConkyとHardinfoをインストールしています。
Hardinfoは少し古いソフトですが、ハードウェアの情報を確認することができます。
ConkyはGPUの情報をリアルタイムでモニターできます。
こちらはWindowsのデフォルト機能よりかなり詳しくモニターできます。
Lubuntuメニューの上から2番目にConky Mnagerがありますので起動すると上の画面が表示されます。
一番下のAMD_GPUにチェックを入れてください。
こちらはネットの情報から、わたくしが独自で作成いたしました。
FullHDだと画面の右下に上のように表示されます。
GPUの使用率、温度、クロック、メモリクロック、使用メモリ、ファンの回転数がモニターできます。
これでかなり便利になったのではないでしょうか。
位置の変更はConky Mnagerの設定から変更できます。
※ スパナとドライバーがクロスしているアイコンです。
共通
USBメモリに入れた「setup_webui_r60」フォルダをlinadm(homeフォルダ)直下にコピーしてください。
アップデートインストール
今回から大幅にセットアップ内容が変化しましたので、アップデートは非推奨とさせていただきます。
新規インストール
OSをクリーンインストールした方向け
ターミナルを開いてください。
ホームフォルダ直下から
cd ~/setup_webui_r602
bash 1_setup_os.sh
途中で上のようなウィンドウがポップアップしますが、赤線で囲った「Update Names」をクリックしてください。
スクリプトの最後に再起動を求められます。指示通り再起動してください。
再起動後、ホームフォルダ直下から
cd ~/setup_webui_r602
bash 2_prepare.sh
です。
今回から「2_prepare.sh」で各種のデータをダウンロードするようになりました。
20GB程度ダウンロードしますので、光回線推奨です。
回線が細いと莫大な時間がかかりますので、セットアップ時間を短縮されたい方は「2_prepare.sh」を編集して不要な項目をコメントアウトしてください。
デフォルトではSDXL用のデータをダウンロードするように設定されています。
また、「2_Prepare_add.txt」の拡張子をshに直して使うとSDv1.5のデータをダウンロードします。
現時点では切り替えではなく排他選択になっています。
今後、切り替えられるようにするかもしれません。
現時点でどちらを使うのかはユーザーの側で選択してください。
Stable Diffusion WebUI
セットアップ
ホームフォルダ直下から
cd ~/setup_webui_r602
bash st1_setup_wui.sh
でセットアップします。
Stable diffusion WebUI起動
cd ~/ai-app/sd-wui
bash webui.sh
以上で起動します。
RX7900XT/XTX以外の方は「webui-user.sh」の最後の部分ある「HSA_OVERRIDE_GFX_VERSION」を書き換えてください。
不具合など
現在確認されている不具合は
- ハローアスカベンチマークのモデルデータで画像生成するとエラーで落ちる
- Hires.Fixで拡大するとOOMエラーで落ちる
- ControlNetを使うとエラーで落ちる
です。解決方法はないので、後述する「Stable Diffusion WebUI Forge」を使用するようにしてください。
ハローアスカベンチマークのモデルデータに関してはリポジトリのほうでプログラムの更新(コミット)が入ると治るかもしれません。
SD-WebUIのパフォーマンス
- ROCm5.5 ハローアスカベンチマーク 19.67s
- ROCm5.6 ハローアスカベンチマーク 17.10s
- 配布版バイナリ=ROCm5.7+pytorch2.0.1+torchvision0.15.2 ハローアスカベンチマーク 17.2s
- ROCm5.7+公式ROCm5.6版Nightly pytorch+torchvision ハローアスカベンチマーク 16.9s
- ROCm 6.0+当サイトビルドバイナリ ハローアスカベンチマーク 16.8s
kohya_ss GUI
セットアップ
ホームフォルダ直下から
cd ~/setup_webui_r602
bash st2_setup_kohya.sh
でセットアップします。
セットアップ終了後に「accelarate config」を行うように変更いたしました。
セットアップ終了後に「bash st2_setup_kohya.sh
」で何度でも「accelarate config」をやり直すことができます。
「accelarate config」の内容についてはこちらの記事で詳しく解説しておりますので参照してください。
RX7900XTX/XT以外の方はgui.shの先頭部分に記載されているgfxナンバーの記述を適宜書き換えてください。
cd ~/ai-app/kohya_ss
bash gui.sh
で実行します。
kohya_ssの使用は比較的専門的で複雑ですので、詳細はネットで検索して各自調べてください。
セットアップまではやりますがそこから先はスペースの都合でちょっと無理です。
参考までに以下のサイトを挙げておきます。
人工知能と親しくなるブログ – 誰でもわかるStable Diffusion LoRAを作ってみよう(実践編)
使い方が詳しく書いてあり、参考になります。
人工知能と親しくなるブログ – 誰でもわかるStable Diffusion kohya_ssの追加パラメータを解説
kohya_ssのあまりにも多い各オプションの意味についてはこちらに詳しく解説されています。
ベンチマーク
私もそうですが、LoRAに全く興味がない方のために、簡易的なベンチマークとして使えるように設定ファイルとデータを用意しています。
作者さんが用意されたカエルの画像を使いますので「LoRAカエルベンチマーク」とでも呼んでください。
推論はいくつかありますが、学習におけるベンチマークはほとんど存在しませんので結構貴重ではないかと思います。
※ 画像をクリックすると別Window・タブで拡大します。
1.LoRAのタブをクリックしてください。ここは間違いやすいので必ず確認するようにしてください。わたくしも何度も間違いました。
2.Configuration Fileの横の◀をクリックして上の画像のように▼にしてメニューを展開してください。
3.Openをクリックしてください。
上のように表示されますので「users-settings」を開いてください。
ファイルが4つあります。
- frog_a8.json・・・AdamW8bit
- frog_a.json・・・AdamW
- frog_l8.json・・・Lion8bit
- frog_l.json・・・Lion
このようになっています。
※ 画像をクリックすると別Window・タブで拡大します。
設定ファイルを選んだら赤線で囲った「Start training」をクリックしてください。
ターミナルエミュレーターに進捗が表示されます。
RX7900XTXでの結果
バッチ数600*2=1,200ステップの学習をAdamW8bit、AdamW、Lion8bit、Lionと4つのオプティマイザーでテストした。
結果は下の通り、最速はAdamWの02:53, 6.94it/sが最速だった。
このテストはほとんど行っている人がいないため、「ちもろぐ」さんの結果を参考にさせていただくとおおよそ、RTX4060Tiと同程度だった。
なんで遅いのか?
おそらく、8bit演算に対応しているとちゃんと早くなるのだと思います。
しかし、bitsandbyte-rocmをきちんとビルドしてインストールしているにも関わらず、RX7900XTXでは速くなりませんでした。
残念ながら現時点では8bit演算には対応していない、もしくは速くならないと考えたほうがよさそうです。
一応実用レベルのタイムは出ていますが、なかなか厳しい性能と言わざるを得ません。
この点はとても残念です。
そもそも、非常に敷居の高い学習を行う人自体があまり多くはないのでしょう。
TensorFlowはWindowsへの対応をやめてしまったため、WSL2を使わざるを得ない状況です。
Geforceにおいてもかなり手間がかかる状況でしょう。
ほぼスクリプトを3回実行するだけでテストするところまでこぎつけられる当サイトのスクリプトはなかなか貴重ではないでしょうか。
※ 補足
8bitオプティマイザーの利点は使うメモリ量が少なくなることのようです。
また8bit処理を高速にするにはハードウェア側での対応が必要のようなので現状Radeonでの高速化は期待できないようです。
Xで教えていただきました。ありがとうございます。
AdamW 8bit 03:21, 5.97it/s
Lion 8bit 03:12, 6.25it/s
AdamW 02:53, 6.94it/s
Lion 03:00, 6.65it/s
Stable Diffusion WebUI Forge
省メモリの「Stable Diffusion WebUI」として突如公開された新星WebUIです。
「Stable Diffusion WebUI」ではメモリエラーで実行できなかったHires.FixやControlNetを使った作業も実行できるので、ROCmではこちらを使うことを推奨します。
Forgeの登場でROCmでもようやく応用的な使い方が使えるようになったという感じです。
ホームフォルダ直下から
cd ~/setup_webui_r602
bash ex1_setup_forge.sh
でセットアップします。
終了後
ホームフォルダ直下から
cd ~/ai-app/forge
bash webui.sh
で実行します。
RX7900XTX/XT以外の方は「webui-user.sh」の末尾にある_「HSA_OVERRIDE_GFX_VERSION」の記述を適宜書き換えてください。
ComfyUI
変わった操作体系を持ち、動画の作成に強いWebUIです。
多機能な分、使いこなすのは非常に難しいです。
ホームフォルダ直下から
cd ~/setup_webui_r602
bash ex2_setup_cmfy.sh
でセットアップします。
終了後
ホームフォルダ直下から
cd ~/ai-app/ComfyUI
bash cui.sh
で実行します。
RX7900XTX/XT以外の方は「cui.sh」の先頭にある「HSA_OVERRIDE_GFX_VERSION」の記述を適宜書き換えてください。
Fooocus
非常に簡単にイラストAIが使えるWebUI。
使える機能は限られていますが、とにかくやってみたいという方向けです。
難しいことはよくわからないという方はとりあえずこれからやってみましょう。
SDXL専用となります。
ホームフォルダ直下から
cd ~/setup_webui_r602
bash ex3_setup_focus.sh
でセットアップします。
終了後
ホームフォルダ直下から
cd ~/ai-app/Fooocus
bash fcs.sh
で実行します。
RX7900XTX/XT以外の方は「fcs.sh」の先頭にある「HSA_OVERRIDE_GFX_VERSION」の記述を適宜書き換えてください。
SD-NEXT
ホームフォルダ直下からex4_setup_sdn.sh
cd ~/setup_webui_r602
bash ex4_setup_sdn.sh
でセットアップします。
終了後
ホームフォルダ直下から
cd ~/ai-app/sd-next
bash sdn.sh
で実行します。
RX7900XTX/XT以外の方は「fcs.sh」の先頭にある「HSA_OVERRIDE_GFX_VERSION」の記述を適宜書き換えてください。
終わりに
今回複数のWebUIのセットアップを追加しました。
本家のAutomatic1111ではROCm環境で正常に動作しない機能もStable Diffusion WebUI Forgeなら動作するので、まさにRadeonにとっては福音となるソフトだと思います。
今回のセットアップスクリプトで一応Radeonの生成AI用途も一応、市民権を得たのかなと思います。
残念ながらWindowsでの対応は一向に進みませんが、Linuxでは一通り使えるようになったと考えてよいのではないかと思います。
今出ている不具合に関しては、ROCmは非常にバージョンアップの早いソフトウェアですから、今後の改善に期待したいと思います。
https://twitter.com/chimolog7/status/1755421144562475445
ちもろぐのやかもちさんに動作のチェックをしていただきました。この場を借りて御礼申し上げます。ありがとうございました。
これだけの機種で動くという報告があるのは心強いのではないでしょうか。
TORCH_USE_HIP_DSA エラー対策として、「HSA_OVERRIDE_GFX_VERSION」の記述の下に「#export HIP_VISIBLE_DEVICES=0」を入れました。
TORCH_USE_HIP_DSA エラーが出たらコメントアウトを外すと動作するかもしれません。
はっきりしないのとはこちらでは動作確認できませんのでその旨ご了承ください。
また、HiresFixのメモリエラーに関してはこちらではどうしようもありませんのでお困りの方がいましたらForgeを使って対応してください。
ROCmのメモリの使い方がよくないのか、Automatic1111側の問題なのかあるいは両方の問題なのかちょっとよくわかりません。
付録
インストールしたROCmがどのアーキテクチャーに対応しているかを確認する
ls /opt/rocm/lib/rocblas/library/ | grep TensileLibrary_lazy_
/opt/rocm/lib/rocblas/library/TensileLibrary_lazy_gfx1100.dat
/opt/rocm/lib/rocblas/library/TensileLibrary_lazy_gfx90a.dat
/opt/rocm/lib/rocblas/library/TensileLibrary_lazy_gfx906.dat
/opt/rocm/lib/rocblas/library/TensileLibrary_lazy_gfx908.dat
/opt/rocm/lib/rocblas/library/TensileLibrary_lazy_gfx1102.dat
/opt/rocm/lib/rocblas/library/TensileLibrary_lazy_gfx942.dat
/opt/rocm/lib/rocblas/library/TensileLibrary_lazy_gfx940.dat
/opt/rocm/lib/rocblas/library/TensileLibrary_lazy_gfx1101.dat
/opt/rocm/lib/rocblas/library/TensileLibrary_lazy_gfx1030.dat
/opt/rocm/lib/rocblas/library/TensileLibrary_lazy_gfx941.dat
/opt/rocm/lib/rocblas/library/TensileLibrary_lazy_gfx900.dat
上はROCm6.0のGPU対応状況
- Vega 56/64
- Radeon VII
- RX6900XT/6950XT
- RX7900XTX/XT,RX7800XT/RX7700XT,RX7600
に対応していることが確認できます。
gfx1100=Navi31、gfx1101=Navi32、gfx1102=Navi33です。