AMD Radeon RX 6600M で Windows上でStable Diffusionを動かしてみた


こんにちは！今回は、AMD Radeon RX 6600Mを使ってWindows環境でStable Diffusionを動かす手順を紹介します。AMD GPUでのStable Diffusion稼働は少し手間がかかりますが、適切なツールと設定を使えば快適に動作します。この記事では、HIP SDKのインストールからパッチ適用、環境構築、そして起動までの一連の流れを詳しく解説します。さっそく始めましょう！

## 環境
- **GPU**: AMD Radeon RX 6600M
- **OS**: Windows 11
- **Python**: 3.10ベース（3.12がインストールされた環境に追加）
- **ROCmバージョン**: 6.2.4
- **ツール**: HIP SDK, ZLUDA, stable-diffusion-webui-amdgpu

## 手順

### 1. HIP SDK (ROCm 6.2.4) のインストール
まず、AMDの公式サイトからHIP SDKをインストールします。以下のリンクにアクセスしてください：

- [HIP SDKダウンロードページ](https://www.amd.com/en/developer/resources/rocm-hub/hip-sdk.html)

ここで、Windows 10 & 11向けの「ROCm 6.2.4」を選択し、「HIP SDK」のリンクからダウンロードします。インストールは指示に従って進めればOKです。これにより、AMD GPUを活用するための基本的なAPIとツールがセットアップされます。

### 2. ROCmLibsのパッチ適用
次に、ROCm 6.2.4向けの特定のパッチを適用します。以下のGitHubリポジトリからファイルを入手します：

- [rocm gfx1032 for rocm6.2.4.7z](https://github.com/brknsoul/ROCmLibs/blob/main/rocm%20gfx1032%20for%20rocm6.2.4.7z)

このファイル（7.47MB）は、Radeon RX 6600M（gfx1032アーキテクチャ）向けの最適化を含んでいます。ダウンロード後、解凍して指示に従い適用してください。これにより、HIP SDKがGPUに適切に動作するようになります。

### 3. Python環境の準備
Stable Diffusionを動かすにはPython 3.10が必要です。私の環境ではPython 3.12がデフォルトでしたが、3.10を追加インストールしました。以下の手順で進めます：

1. [Python公式サイト](https://www.python.org/downloads/release/python-3106/)からPython 3.10.6をダウンロードし、インストール（「Add to PATH」にチェックを忘れずに）。
2. 仮想環境（venv）を作成：
   ```
   python -m venv venv
   ```
3. `venv`のPythonを3.10に変更。Windowsでは、`py`コマンドを使ってバージョンを指定します：
   ```
   py -3.10 -m venv venv
   ```
4. 仮想環境を有効化：
   ```
   venv\Scripts\activate
   ```

これで、Stable Diffusionに必要なPython 3.10環境が整いました。

### 4. Stable Diffusion WebUIのインストール
次に、Stable Diffusion WebUIをインストールします。今回は、AMD GPU向けに最適化されたフォーク版を使用します。以下の手順を参考にしました：

- [Install and Run on AMD GPUs](https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Install-and-Run-on-AMD-GPUs)

※ 現在提供されているのは`lshqqytiger/stable-diffusion-webui-amdgpu` のようです

具体的には、以下のコマンドを実行します：

```
git clone https://github.com/lshqqytiger/stable-diffusion-webui-amdgpu && cd stable-diffusion-webui-amdgpu && git submodule init && git submodule update
```

このコマンドで、DirectMLやZLUDAを利用可能なStable Diffusion WebUIがクローンされ、サブモジュールも初期化されます。インストールが完了したら、`stable-diffusion-webui-amdgpu`フォルダ内に必要なファイルが揃います。

### 5. WebUIの起動
インストール後、`webui.bat`を使って起動します。ただし、RX 6600MのVRAM（8GBだが低VRAM設定が必要な場合も）を考慮し、以下のオプションを`webui-user.bat`に追加しました：

```bat
set COMMANDLINE_ARGS=--opt-sub-quad-attention --lowvram --disable-nan-check --use-zluda --upcast-sampling
```

各オプションの意味は以下の通りです：
- `--opt-sub-quad-attention`: メモリ効率を改善する最適化。
- `--lowvram`: 低VRAM環境向けに調整。
- `--disable-nan-check`: NaNエラーのチェックを無効化し、安定性を向上。
- `--use-zluda`: ZLUDAを利用して動作を最適化（後述）。
- `--upcast-sampling`: サンプリング精度を上げて安定性を確保。

設定後、`webui-user.bat`をダブルクリックで実行。初回は依存関係のインストールに時間がかかる場合がありますが、途中で止まったように見えたらEnterキーを押すと進行します。

### 6. ZLUDAとは？
`--use-zluda`オプションで使ったZLUDAについて簡単に解説します。ZLUDAは、NVIDIAのCUDAをAMD GPUで動作させるための互換レイヤーです。Stable Diffusionは元々CUDA向けに最適化されていますが、ZLUDAを使うことでAMD GPUでも同様のパフォーマンスを引き出せます。HIP SDKと組み合わせることで、RX 6600Mでもスムーズに動作しました。

詳細は[ZLUDAの公式リポジトリ](https://github.com/vosen/ZLUDA)を参照してください。インストールは手動で行う必要がありますが、今回はWebUI側で対応済みだったのでそのまま利用できました。

## 結果
以上の手順で、AMD Radeon RX 6600M上でStable Diffusionが問題なく動作しました！生成速度はそこそこで、VRAM使用量も6〜7GB程度に収まっています。LoRAやControlNetなどの拡張機能はこれから動作確認予定です。

## 注意点
- 初回のWebui.batで何度かエラーが出ると思いますが、詳細メモし忘れました。何度かpipをたたいてモジュールの手動インストールが必要でした。

## まとめ
AMD GPUでStable Diffusionを動かすのは一見ハードルが高そうですが、HIP SDKやZLUDAのおかげで現実的な選択肢になっています。RX 6600MのようなミドルレンジGPUでも十分実用的です。ぜひ試してみてください！

何か質問があればコメントでどうぞ。それでは、楽しいAIアート生成を！