Ubuntu日和
【第42回】RadeonだってStable Diffusionは高速だ。そう、Ubuntuならね
2024年1月6日 06:14
画像生成AI、それは2023年を彩った大きなトピックであった。
ただ、どれもこれも前提となるのはNVIDIAのGPUだ。AMDのRadeonユーザーは歯がゆい思いをしていることだろう。
NVIDIAが画像生成で使用しているプラットフォームはCUDAであることはご存知であろう。Radeonでこれに当たるのはROCmだ。Windows用もあるが、ROCm component supportによると「AI Frameworks」は「Not available」となっている。現在の画像生成AIの多くはPyTorchをベースにしており、これに非対応ということはすなわち画像生成も非対応と考えていい。
従ってWindowsユーザーはDirectMLを使用することになるが、これがあまり速くない。しかし、UbuntuだとROCmが使用できるのでDirectMLよりも速くなることが期待できる。
今回使用するStable Diffusion WebUIもDirectMLで動作する派生版があるので、動かしてみよう。
使用するハードウェア
その前に、今回使用するハードウェアを確認しておこう。
分類 | メーカー | 型番 |
---|---|---|
CPU | Intel | Core i5-13500 |
メモリー | Crucial | CT32G4DFD832A |
マザーボード | ASRock | B660M Pro RS |
SSD | Western Digital | WDS500G3X0C |
dGPU | ASRock | RX6600XT CLI 8G |
ケース | Silver Stone | SST-SG11B |
電源 | 玄人志向 | KRPW-SXP600W/90+ |
なおUbuntuもWindowsも同一のハードウェアにインストールしている。厳密にはWindowsのSSDはIntel製のSSDSC2KW480H6というSATA接続の2.5インチモデルだが、SSDの速度差は生成速度には影響しないと考えていいだろう。
Windowsでの結果
Windowsでのインストール方法は省略して、結果を見てみよう。
生成にかかった時間は左下にあり、今回は1分40秒かかっている。同じパラメータだと生成時間にほぼ差が出ないことは確認している。従って複数回やってもおおむね同じ結果と期待できる。
512×512の画像を1枚生成するのに1分40秒はかかりすぎる。通常画像生成は1枚で済むものではなく、数十枚生成してそのうち使えるものは1枚とかそんな感じで、実用性があるかと問われると、厳しいと言わざるを得ない。
実はCPUで処理しているのではと疑ってみたものの、タスクマネージャーを見る限り確かに生成中のGPU負荷が高くCPU負荷は低いので、疑う余地はなかった。
ROCmのインストール方法
ではUbuntuに移って、実際にROCmをインストールしていこう。Ubuntuのバージョンは22.04.3 LTSとする。カーネルのバージョンは6.2で、ROCmのバージョンは執筆時点で最新である6.0.0だ。今後予定されているカーネルのバージョンアップにより6.5になるとそれに対応したROCmの新バージョンが必要となるので注意してほしい。セキュアブートはオフとする。
なおROCmが対応するのはdGPUであり、iGPUは非対応とのことなので注意してほしい。
インストールはすべてコマンドで行なう。端末を起動してコマンドを実行していこう。
丁寧なインストールドキュメントがあるので、この通りなのだが、細かく見ていこう。
まずはリポジトリの登録からだ。
$ wget https://repo.radeon.com/rocm/rocm.gpg.key -O - | gpg --dearmor | sudo tee /etc/apt/keyrings/rocm.gpg > /dev/null
$ echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/rocm.gpg] https://repo.radeon.com/amdgpu/6.0/ubuntu jammy main" | sudo tee /etc/apt/sources.list.d/amdgpu.list
$ echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/rocm.gpg] https://repo.radeon.com/rocm/apt/6.0 jammy main" | sudo tee --append /etc/apt/sources.list.d/rocm.list
$ echo -e 'Package: *\nPin: release o=repo.radeon.com\nPin-Priority: 600' | sudo tee /etc/apt/preferences.d/rocm-pin-600
インストールは次の通りだ。
$ sudo apt update
$ sudo apt install amdgpu-dkms
$ sudo apt install rocm-hip-libraries
$ sudo usermod -a -G render,video $LOGNAME
ここで一度再起動しよう。
ROCmが正しく動作しているかどうかは、次のコマンドで確認できる。
$ rocminfo
ここでdGPUが認識されていれば、インストールは成功したことになる。次は今回の例だ。
(前略)
*******
Agent 2
*******
Name: gfx1032
Uuid: GPU-XX
Marketing Name: AMD Radeon RX 6600 XT
Vendor Name: AMD
Feature: KERNEL_DISPATCH
Profile: BASE_PROFILE
Float Round Mode: NEAR
Max Queue Number: 128(0x80)
Queue Min Size: 64(0x40)
Queue Max Size: 131072(0x20000)
Queue Type: MULTI
Node: 1
Device Type: GPU
Cache Info:
L1: 16(0x10) KB
L2: 2048(0x800) KB
L3: 32768(0x8000) KB
Chip ID: 29695(0x73ff)
ASIC Revision: 0(0x0)
Cacheline Size: 64(0x40)
Max Clock Freq. (MHz): 2900
BDFID: 768
Internal Node ID: 1
Compute Unit: 32
SIMDs per CU: 2
Shader Engines: 2
Shader Arrs. per Eng.: 2
WatchPts on Addr. Ranges:4
Coherent Host Access: FALSE
(後略)
Stable Diffusion WebUIのインストール
Stable Diffusion WebUIのインストールは次の通りだ。
$ sudo apt install git python3.10-venv libstdc++-12-dev -y
$ git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui && cd stable-diffusion-webui
$ python3.10 -m venv venv
$ ./webui.sh --upcast-sampling
コマンドは簡単だが、モデルのダウンロードなどに時間がかかる。高速なインターネット回線が役に立つ時だ。
インストールが完了するとデフォルトのWebブラウザが起動し、画像生成できるようになる。なお、なぜか初回は生成に時間がかかるので、その時間は今回は考慮しない。従って2回目以降に生成した結果となる。
NVIDIAとの比較
とはいえNVIDIAのGPUとの比較はどうなんだというのが気になるところであろう。第25回で「やはりGeForce RTX 3060 AERO ITX 12G OCを買うことにした」と書いたが、本当に手に入れたのでこれを使用する。インストール方法は第25回を読んでほしい。ただし起動用のシェルスクリプトは不要で、webui.shを使用するか、webui-user.shにオプションを追加するのがいいだろう。本文にもある通りメモリが12GBもあれば「–lowmem」オプションは不要だ。
約19秒とのことで、Radeon RX 6600XTとあまり変わらない結果になっている。もちろん100枚生成するとそれなりの時間差になるが、今回は画像生成AIのために手持ちのdGPUを使用するのがコンセプトなので、充分に満足できる結果であろう。
生成する画像の解像度が512×512だとあまり差が出ないが、1,024×768などより大きな画像にすると、如実に差が出てきてしまう。しかし、これはおそらくVRAMの容量の違いによるものと考えられる。正直なところ画像生成AIを使用するにはVRAMが8GBでは足りない。RadeonでもミドルレンジでVRAM 12GBのモデルが出てきてほしいものだ。
NPUはどうなるか
本誌の読者であれば2024年のトピックになりそうなことの1つとしてNPU(Neural Processing Unit)の普及がある。すでにNPU内蔵CPUが市場に出回っており、今後増える上さらなる高速化も見込まれている。そう考えると、来年にはCUDAやROCmではなくNPUとそのライブラリで画像を生成するようになっているのかもしれない。1年後に本記事が無用の長物になっているのであれば、それはとても愉快なことだ。