Radeon 890MでComfyUIをDocker + ROCmで動かす【Ubuntu 24.04】
AILinuxDevOps

Radeon 890MでComfyUIをDocker + ROCmで動かす【Ubuntu 24.04】

目次
  1. はじめに
  2. 環境
  3. ROCmのインストール
  4. docker-compose.yml
  5. OS側のメモリチューニング
  6. OOM(Out of Memory)対策
  7. ComfyUI-Managerの依存パッケージ
  8. モデルの配置
  9. ワークフロー例:yayoi_mix text2img
  10. ハマりどころと注意点
  11. トラブルシューティング
  12. まとめ

はじめに

前回の記事でGTTメモリを24GBに拡張したので、次はいよいよ画像生成です。

ComfyUIをRadeon 890Mで動かすにあたって、最初に言っておくと結構ハマりました。VRAM 1GB + GTT 24GBという構成はかなり特殊で、ネットに情報がほとんどない。「AMD GPUでComfyUI」の記事はあっても、大体がRX 7900 XTXとかの専用GPU向けで、統合GPUの話は皆無に近い。

この記事では、ROCm対応のDockerイメージを使ってComfyUIを動かし、実際にSD1.5モデルで画像生成できるまでの手順と、OOMとの戦いの記録をまとめます。

環境

  • GPU: Radeon 890M(gfx1151、RDNA 3.5)

  • VRAM: 1GB(BIOS設定)+ GTT 24GB

  • RAM: 32GB DDR5

  • Docker: ROCm 7.2 + PyTorch 2.9.1

  • ComfyUI: 最新版(GitHub clone)

前回の記事でGTTメモリの拡張とビデオドライバのインストールは済んでいる前提です。

ROCmのインストール

まだROCmを入れていない場合は、以下でインストールします。前回の記事でamdgpu-installパッケージは導入済みなので、usecaseの追加だけです。

$ sudo amdgpu-install -y --usecase=rocm,hiplibsdk,mlsdk --no-dkms
$ sudo usermod -aG render,video $LOGNAME
$ echo 'export PATH=$PATH:/opt/rocm/bin' >> ~/.bashrc
$ source ~/.bashrc
$ sudo apt-mark hold amdgpu-install
$ sudo reboot

sudo apt-mark hold amdgpu-installは、apt upgradeでamdgpu-installが勝手にバージョンアップするのを防ぐための安全弁です。依存関係が変わって急に動かなくなったら困るので。

ここで重要な注意点--no-dkmsを付けてください。理由は後述の「ハマりどころ」で詳しく書きますが、amdgpu-dkmsを入れるとDockerイメージのROCmバージョンと衝突して画像生成ができなくなります。

docker-compose.yml

ComfyUIのDocker設定です。ROCm 7.2対応のPyTorchイメージをベースに使います。

services:
  comfyui-amd:
    image: rocm/pytorch:rocm7.2_ubuntu24.04_py3.12_pytorch_release_2.9.1
    container_name: ai_comfyui-amd
    restart: always
    ports:
      - "8188:8188"
    devices:
      - "/dev/kfd:/dev/kfd"
      - "/dev/dri:/dev/dri"
    security_opt:
      - seccomp:unconfined
    group_add:
      - video
      - render
    volumes:
      - ./data:/data
    environment:
      - HSA_OVERRIDE_GFX_VERSION=${HSA_OVERRIDE_GFX_VERSION}
      - COMFYUI_ARGS=${COMFYUI_ARGS}
      - PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True
    working_dir: /data
    command: >
      sh -c "if [ ! -d 'ComfyUI' ]; then
               git clone https://github.com/comfyanonymous/ComfyUI.git;
             fi &&
             cd ComfyUI &&
             if [ ! -d 'custom_nodes/ComfyUI-Manager' ]; then
               git clone https://github.com/ltdrdata/ComfyUI-Manager.git custom_nodes/ComfyUI-Manager;
             fi &&
             pip install gitpython toml aiohttp &&
             pip install -r requirements.txt &&
             python main.py --listen 0.0.0.0 --use-pytorch-cross-attention --disable-pinned-memory --reserve-vram 1"
    networks:
      - ai_network

networks:
  ai_network:
    external: true

初回起動時にComfyUIとComfyUI-Managerを自動でcloneします。2回目以降は既存のディレクトリを使うので、モデルやカスタムノードの追加は./data/ComfyUI/以下を直接いじればOKです。

.envファイル

HSA_OVERRIDE_GFX_VERSION=11.5.1
COMFYUI_ARGS=--use-pytorch-cross-attention

HSA_OVERRIDE_GFX_VERSION=11.5.1は、Radeon 890M(gfx1150/gfx1151)をROCmに認識させるための設定です。gfx1151はまだROCmの公式サポートリストに入っていないため、この環境変数でオーバーライドする必要があります。

OS側のメモリチューニング

GTTで24GBをGPUに渡すと、CPU側で使える実メモリは8GB程度しか残りません。その状態でDockerコンテナやComfyUIのPythonプロセスを動かすと、OS側のメモリが逼迫してスワップが頻発します。それを抑えるためのカーネルチューニングです。

$ sudo sysctl vm.swappiness=10
$ sudo sysctl vm.vfs_cache_pressure=200
$ echo -e "vm.swappiness=10\nvm.vfs_cache_pressure=200" | sudo tee -a /etc/sysctl.conf
$ sudo sysctl -p

vm.swappiness=10 — デフォルト60。10にすると「なるべくRAMを使い切るまでスワップしない」動作になります。無駄なスワップを減らしてRAMを有効活用するのに効果的。

vm.vfs_cache_pressure=200 — デフォルト100。200にすると「ファイルシステムキャッシュを通常の2倍積極的に解放する」動作になります。ファイルキャッシュにメモリを取られすぎないようにする効果があります。

最後のsysctl -pで即時反映。/etc/sysctl.confに書いてあるので再起動後も永続化されます。

OOM(Out of Memory)対策

Radeon 890MはVRAMが1GBと極端に少ないため、何も考えずにComfyUIを起動するとすぐOOMで落ちます。以下の起動オプションの組み合わせが効果的でした。

効果があった設定

設定

効果

--reserve-vram 1

VRAM予約を最小化してGTTを最大限活用

--use-pytorch-cross-attention

クロスアテンションのメモリ効率化。AMD環境では必須級

--disable-pinned-memory

ピンドメモリを無効化してメモリ消費を抑制

PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True

PyTorchのメモリアロケータを拡張セグメントモードにしてメモリ断片化を軽減

避けるべき設定

--lowvramは動作はするけど、モデルを部分的にCPUに退避させる方式なので非常に遅くなります。SD1.5の512x512で1枚生成するのに数分かかるレベルで、実用的ではありません。上の4つの設定で足りない場合だけ使うべき。

ComfyUI-Managerの依存パッケージ

ComfyUI-Managerはいくつかの追加パッケージが必要です。docker-compose.ymlのcommandに含めていますが、もし手動で入れる場合は以下。

$ docker exec -it ai_comfyui-amd pip install gitpython toml aiohttp

これがないとManagerの画面が開けなかったり、カスタムノードのインストールに失敗したりします。

モデルの配置

モデルファイルはボリュームマウントした./data/ComfyUI/models/以下に配置します。

data/ComfyUI/models/
├── checkpoints/
│   ├── v1-5-pruned-emaonly-fp16.safetensors  # SD1.5(基本)
│   └── yayoi_mix_v25.safetensors            # SD1.5ベース(リアル系)
├── loras/
│   └── (LoRAファイルを配置)
└── upscale_models/
    └── RealESRGAN_x4.pth

Radeon 890Mの限られたメモリではSD1.5ベースのモデルが推奨です。SDXLやFluxでも動作しますが、解像度を上げすぎるとメモリ不足になる可能性が高いです。まずはSD1.5の512x512で動作確認してから、徐々にモデルや解像度を上げていくのが安全。

ワークフロー例:yayoi_mix text2img

基本的なtext2imgワークフローの構成はこんな感じです。

  1. CheckpointLoaderSimple — yayoi_mix_v25.safetensorsをロード

  2. CLIPTextEncode(正プロンプト) — 生成したい画像の説明

  3. CLIPTextEncode(負プロンプト) — 避けたい要素

  4. EmptyLatentImage — 512x512(SD1.5の標準解像度)

  5. KSampler — Steps: 20, CFG: 7.0, Sampler: euler_ancestral

  6. VAEDecode — 潜在空間から画像に変換

  7. SaveImage — 結果を保存

LoRAを使う場合は、CheckpointLoaderSimpleの後にLoraLoaderノードを追加し、MODELとCLIPの両方に接続します。

こんな画像が作成される

ハマりどころと注意点

amdgpu-dkmsをインストールすると画像生成ができない

これが一番ハマったポイントです。

最初、ROCmの公式ドキュメントに従ってamdgpu-dkmsもインストールしていました。ところがComfyUIで画像生成を実行すると、メモリアクセス違反で毎回クラッシュする。ログを見てもよくわからない。

原因はROCmのバージョン不一致でした。amdgpu-dkmsはROCm 6.3向けのドライバー(バージョン6.16.13)をインストールしますが、DockerイメージはROCm 7.2です。このバージョンの食い違いがメモリアクセス違反を引き起こしていました。

解決策はシンプルで、amdgpu-dkmsをアンインストールすること。

$ sudo apt remove amdgpu-dkms
$ sudo reboot

Ubuntu 24.04のカーネル(6.8系)にはamdgpuドライバーが標準搭載されているので、amdgpu-dkmsがなくてもGPUは問題なく動作します。むしろgfx1151のような新しいGPUの場合、カーネル標準ドライバーの方がサポートが良いケースもあります。

ROCmインストール時に--no-dkmsオプションを付けていればこの問題は回避できます。

トラブルシューティング

コンテナが再起動ループする

$ docker logs ai_comfyui-amd --tail 50

大抵は依存パッケージの不足(gitpythontomlaiohttpあたり)か、ComfyUIのclone先パスの問題です。working_dircommand内のcdのパスが合っているか確認してください。

GPUが認識されない

$ docker exec -it ai_comfyui-amd rocminfo

gfx1151(またはgfx1150)が表示されるか確認してください。表示されない場合は.envHSA_OVERRIDE_GFX_VERSIONの値を確認します。Dockerコンテナ内で環境変数が正しく渡っているかもdocker exec -it ai_comfyui-amd env | grep HSAで確認できます。

OOMで落ちるけどどのモデルが原因かわからない

ComfyUIのコンソールログにOOMのスタックトレースが出ます。nodes_textgen.pyclip.generateでOOMになっている場合、テキストエンコーダーが大きいモデル(SDXLなど)を使おうとしている可能性が高い。SD1.5のモデルに切り替えて試してみてください。

まとめ

Radeon 890Mは専用GPUと比べるとVRAMが極端に少ないですが、GTTメモリの拡張とComfyUIの適切なメモリ設定を組み合わせることで、SD1.5ベースのモデルで画像生成が可能です。OOM対策のキモは--reserve-vram 1--use-pytorch-cross-attentionの組み合わせ。

一番の学びは、amdgpu-dkmsを入れるとDockerイメージのROCmバージョンと衝突するという罠でした。Ubuntu 24.04のカーネルにはgfx1151のサポートが含まれているので、基本的にamdgpu-dkmsは不要です。もし将来ROCmのアップデートなどでdkms版が必要になった場合は、Dockerイメージと同じROCmバージョンのものを使うようにしてください。