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

AMD Radeon 780M(ROCm 7.1)で ACE-Step 1.5 を動かすまで
目次
  1. ─ bool sort 問題・5Hz-LM クラッシュ・DiT-only BPM挙動の検証ログ
  2. はじめに
  3. 検証環境
  4. 問題1:venv に古い PyTorch が残っていた
  5. 問題2:bool dtype sort が ROCm(HIP)で未サポート
  6. 回避策:monkey patch
  7. 問題3:5Hz-LM が見つからず即クラッシュ
  8. 解決策
  9. 問題4:BPM が 160 付近で頭打ち
  10. 原因
  11. 対策
  12. 生成速度
  13. 最終整理
  14. ROCm 固有問題
  15. ACE-Step 設計由来
  16. セットアップ問題
  17. 総評

─ 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 購入はこちらから

SwitchBot公式ページ
クーポン「AF-4903」で5%引き(アフィリエイトクーポンになりますのでご協力お願いします)
割引の詳しい仕組みに関してはこちらのページを参照ください。