AMD Radeon 780M(ROCm 7.1)で ACE-Step 1.5 を動かすまで

目次
─ bool sort 問題・5Hz-LM クラッシュ・DiT-only BPM挙動の検証ログ
ClaudeCodeにまとめさせた記事になります。一応確認していますが、全く分からないことを書いている部分もあるので間違っていたらすいません。
はじめに
AI作曲ツール ACE-Step 1.5 を、RDNA3統合GPUである AMD Radeon 780M 上で API サーバーとして動作させようとした際、複数の問題に遭遇しました。
本記事では、
ROCm 固有の問題
ACE-Step の設計上の挙動
単純な設定ミス
を切り分けながら、原因と対処法をまとめます。
検証環境
項目内容
GPU AMD Radeon 780M(gfx1103 / RDNA3 iGPU)
VRAM共有 32GB
OSUbuntu 24.04
ROCm7.1.0PyTorch2.10.0+rocm7.1
ACE-Step1.5(DiT-only、5Hz-LM未導入)APIport 8002 / ACESTEP_LM_BACKEND=pt
問題1:venv に古い PyTorch が残っていた
症状
動作不安定。
原因
venv に torch 2.5.1+rocm6.2 が残っていた。
ROCm 7.1 と非互換。
解決
pip install torch==2.10.0+rocm7.1 torchaudio==2.10.0+rocm7.1 \
--index-url https://download.pytorch.org/whl/rocm7.1
補足:ROCm 7.2 は使用不可
ROCm 7.2 では:
vector_quantize_pytorch
torch.distributed API変更
が衝突し、ImportError 発生(GitHub #561)。
👉 現時点では ROCm 7.1 が安定版
問題2:bool dtype sort が ROCm(HIP)で未サポート
症状
RuntimeError: Sort currently does not support bool dtype on CUDA
原因
ROCm HIP backend では
torch.bool に対する argsort / sort が未実装。
CUDA 版では修正済みだが、ROCm 版には未反映。
DiT アテンション内部で bool mask の sort が発生。
回避策:monkey patch
import torch
_original_argsort = torch.argsort
_original_tensor_sort = torch.Tensor.sort
def patched_argsort(input, dim=-1, descending=False, stable=False):
if input.dtype == torch.bool:
input = input.to(torch.uint8)
return _original_argsort(input, dim=dim,
descending=descending, stable=stable)
def patched_tensor_sort(self, dim=-1, descending=False, stable=False):
if self.dtype == torch.bool:
self = self.to(torch.uint8)
return _original_tensor_sort(self, dim=dim,
descending=descending, stable=stable)
torch.argsort = patched_argsort
torch.Tensor.sort = patched_tensor_sort
bool → uint8 変換はアルゴリズム的に同等であり安全。
これで 90秒生成が通過。
問題3:5Hz-LM が見つからず即クラッシュ
症状
RuntimeError: 5Hz LM init failed
原因
DiT-only モードなのに
use_format=True(デフォルト) のままだった。
内部判定:
need_llm = thinking or sample_mode or has_sample_query \
or use_format or use_cot_caption or use_cot_language
use_format が True なので LLM 初期化が走る。
解決策
payload["use_format"] = False
完全版:
if self.dit_only_mode:
payload["init_llm"] = False
payload["thinking"] = False
payload["use_format"] = False
payload["use_cot_metas"] = False
payload["use_cot_caption"] = False
payload["use_cot_language"] = False
👉 これが最大のボトルネック
問題4:BPM が 160 付近で頭打ち
実測結果
指定実測
160 BPM 161.5 BPM
170 BPM 161.5 BPM
180 BPM 161.5 BPM
原因
DiT-only モードでは:
BPM はテキスト条件として渡るだけ
prefix tree 強制がない
audio codes injection がない
モデルは訓練データ分布に従う。
高BPMデータが少ないジャンルでは
120〜160付近に戻る。
コード上の制限ではない:
BPM_MIN = 30
BPM_MAX = 300
対策
暫定策
caption = "drum and bass, hardcore, VOCALOID, 180 BPM, high energy"
メタ+caption 両方に明示。
根本解決
👉 5Hz-LM 導入
生成速度
780M(共有32GB)
90秒
50 steps
batch=1
約 40〜55秒
統合GPUとしては十分実用レベル。
最終整理
ROCm 固有問題
bool sort 未サポート
ROCm 7.2 非互換
7.1 安定
ACE-Step 設計由来
use_format=True が LLM 起動トリガー
DiT-only では高BPM弱い
セットアップ問題
venv 使い回しによる torch 不一致
総評
780M + ROCm 7.1 + DiT-only 構成は 実用可能。
ただし:
ROCm の未実装部分を把握すること
LLM 初期化フラグを明示すること
高BPMは 5Hz-LM 推奨
が重要。
SwitchBot公式ページ
クーポン「AF-4903」で5%引き(アフィリエイトクーポンになりますのでご協力お願いします)
割引の詳しい仕組みに関してはこちらのページを参照ください。