環境
- OS: Ubuntu (Wayland/GNOME)
- CPU/GPU: AMD Ryzen AI (Radeon 890M内蔵, gfx1150)
- ROCm: 10.0.0
- Python: 3.12.3
- ComfyUI: comfy-cli経由でインストール済み
問題: CPUモードで1枚334秒かかる
ComfyUIを comfy launch -- --cpu で起動していたため、画像生成に1枚あたり約335秒かかっていた。ROCm環境は構築済みだったが、ComfyUIでは活用できていなかった。
原因: PyTorchがCUDA版だった
venv内のPyTorchを確認したところ、CUDA版 (torch 2.10.0+cu128) がインストールされていた。
$ python -c "import torch; print(torch.__version__); print(torch.cuda.is_available())"
2.10.0+cu128
False
rocm-smi ではGPUが認識されており、ROCm自体は正常に動作していた。PyTorchがROCm対応ビルドではなかったことが原因。
対応1: PyTorchをROCm版に入れ替え
PyTorchのROCm 6.3用wheelインデックスから強制再インストールした。
pip install torch torchvision torchaudio --force-reinstall \
--index-url https://download.pytorch.org/whl/rocm6.3
torch-2.9.1+rocm6.3 がインストールされた。
対応2: HSA_OVERRIDE_GFX_VERSIONの設定
Radeon 890Mのアーキテクチャはgfx1150 (RDNA 3.5) だが、PyTorchのROCm wheelにはgfx1150用のカーネルが含まれていない。HSA_OVERRIDE_GFX_VERSION=11.0.0 を設定することで、gfx1100 (RDNA 3) として認識させる。
# ~/.bashrcに追加
export HSA_OVERRIDE_GFX_VERSION=11.0.0
エラー: hipErrorInvalidDeviceFunction
ROCm版PyTorchのインストール後、comfy launch(--cpuなし)で起動したところ、以下のエラーが発生した。
HIP error: invalid device function
Search for `hipErrorInvalidDeviceFunction' in ...
スタックトレースは torch.nn.functional.embedding の呼び出し時に発生。CLIPモデルのテキストエンコード処理中にGPUカーネルの実行に失敗していた。
原因
.bashrc に HSA_OVERRIDE_GFX_VERSION を追加した後、ターミナルを再起動せずにComfyUIを起動したため、環境変数が反映されていなかった。
確認
環境変数を明示的に指定した状態でembedding操作をテストしたところ、正常に動作した。
HSA_OVERRIDE_GFX_VERSION=11.0.0 python -c "
import torch
emb = torch.nn.Embedding(1000, 128).cuda()
inp = torch.randint(0, 1000, (1, 77)).cuda()
out = emb(inp)
print('OK', out.shape) # OK torch.Size([1, 77, 128])
"
新しいターミナルを開き直して comfy launch を実行することで解決。
結果
| モード | 生成時間 |
|---|---|
CPU (--cpu) |
334.80秒 |
| iGPU (ROCm) | 12.50秒 |
約27倍の高速化。
起動方法
source ~/デスクトップ/aimage/comfy-env/bin/activate
comfy launch
- venvに入る(
comfy-cliやROCm版PyTorchはここにインストールされている) -
comfy launchがComfyUI本体(~/comfy/ComfyUI)を起動する
--cpu フラグは不要。HSA_OVERRIDE_GFX_VERSION は .bashrc でexportしているため、新しいターミナルならそのまま起動すればiGPUが使われる。