diffusers や transformers で書かれたモデルの公式手順や例は、CUDA(NVIDIA の GPU)前提で書かれていることが多くあります。そうしたモデルを AMD の GPU(ROCm)で試す技術検証では、手順をそのまま踏むと CUDA 版の torch が入って ROCm の環境が壊れる所や、生成が終わった後の保存で落ちる所が多くありました。私たちが避けた物と、代わりに使った物をまとめます。

結論

  • 公式手順の --extra-index-url …/cu128、公式の torch-runtime、CUDA 版の torch を pin した requirements.txt は踏みません。ACE-Step 1.5 は requirements-rocm-linux.txt を使います。
  • flash-attn と xformers は入れません。注意(attention)は attn_implementation="sdpa" で足りました。
  • torchcodec は ROCm には無いので、音は soundfile で wav に書き、librosa で読みます。
  • gfx1100 では HSA_OVERRIDE_GFX_VERSION は通常要りません。torch.cuda.is_available() が False なら、利用者が render と video のグループにいるかを見ます。

試した環境

  • GPU: AMD Radeon RX 7900 XT(gfx1100、VRAM 20 GiB)
  • OS と ROCm: Ubuntu、ROCm 7.2.4
  • ライブラリ: torch 2.13.0+rocm7.2、diffusers 0.40.0.dev0、transformers 5.15.0
  • モデル: FLUX.2-klein-4B、Qwen-Image-Edit-2511、MOSS-SoundEffect v2.0、MOSS-Audio、ACE-Step 1.5、Qwen3-VL-8B

踏まない物と代わりの物

次の表は、踏まなかった物と、代わりに使った物です。

踏まない物代わりに使う物理由
--extra-index-url …/cu128・公式の torch-runtimeROCm 版の torch(版を固定して入れる)CUDA 版の torch が入り、ROCm の環境が壊れる
ACE-Step 1.5 の requirements.txt(torch==2.10.0+cu128 を pin)requirements-rocm-linux.txt同上
flash-attn・xformersattn_implementation="sdpa"flash-attn は RDNA3 でハングするという報告がある(未検証)。xformers の ROCm 公式イメージは MI 系向け
torchcodecsoundfile(書く)・librosa(読む)ROCm には無く、保存や読み込みで落ちる

どれも、公式の手順や例の通りに打つと入ってくる物です。以下で1つずつ見ます。

台所でレシピ本を開いた料理人が、合わない材料を脇に置き、自分の棚の材料に取り替えている絵

CUDA 版の torch が入る道

公式手順には、--extra-index-url …/cu128 を付けて入れるように書かれていたり、公式の torch-runtime を使うように書かれていたりします。ACE-Step 1.5 の requirements.txt は torch==2.10.0+cu128 を pin しています。これらを踏むと CUDA 版の torch が入り、ROCm の環境が壊れます。

ACE-Step 1.5 には ROCm 向けの requirements-rocm-linux.txt があるので、そちらを使います。torch そのものは ROCm 版の版を固定して入れ、ほかのパッケージの依存で入れ替わらないようにしました。

flash-attn と xformers は入れない

flash-attention には、RDNA3 でハングするという報告があります。xformers の ROCm の公式イメージは MI 系向けです。どちらも私たちの環境では入れておらず、試してもいません。

注意の計算は、attn_implementation="sdpa" で足りました。

生成が終わったのに保存で落ちる

torchcodec は ROCm には無いので、torchcodec を使う所で落ちます。私たちが踏んだのは次の3つです。

  • save_audio() での保存
  • mp3 での出力
  • MOSS-Audio の音の読み込み(src.audio_io)

生成そのものは進むので、最後まで待ってから落ちることになります。音は soundfile で wav に書き、読むときは librosa を使います。

import soundfile as sf
import librosa

sf.write("out.wav", audio, sample_rate)  # 書くのは wav に
y, sr = librosa.load("in.wav", sr=None)  # 読むのは librosa で

GPU が見えないとき

torch.cuda.is_available() が False になるときは、生成を走らせる利用者が render と video のグループに入っているかを見ます。入れたら、再ログインして効かせます。サービス用の利用者や別の利用者を新しく作ったときも同じです。

sudo usermod -aG render,video <利用者>
# 再ログインしてから
python -c 'import torch; print(torch.cuda.is_available())'

HSA_OVERRIDE_GFX_VERSION は、gfx1100 は公式に対応しているので通常は要りません。GPU を検出できないときだけ 11.0.0 を試します。ただし私たちの環境では、音楽の生成(ACE-Step 1.5)を起こすときだけは、GPU を検出できるかにかかわらず毎回 HSA_OVERRIDE_GFX_VERSION=11.0.0 を付けて起こしました。

確かめていないこと

  • flash-attention が RDNA3 でハングするという報告(入れておらず、試していません)。
  • ACE-Step 1.5 は ROCm では dtype が既定で float32 になります(ログに set ACESTEP_ROCM_DTYPE=bfloat16 or float16 to override と出ます)。ACESTEP_ROCM_DTYPE=float16 が効かないという他の人の報告(Windows 11 + ROCm 7.2)もありますが、私たちの環境では試していません。

おわりに

公式手順を ROCm の環境で踏むときは、CUDA の index や CUDA 版の pin が混ざっていないかを先に見てください。注意の計算と音の入出力は、sdpa と soundfile・librosa で置き換えれば足りました。

※ 各モデルの公式手順と、PyTorch・torchcodec の ROCm への対応は執筆時点の物で、いまは変わっている可能性があります。