ACE-Step 1.5でローカル音楽生成【AMD ROCm Docker導入ガイド】
AILinuxDevOps

ACE-Step 1.5でローカル音楽生成【AMD ROCm Docker導入ガイド】

目次
  1. はじめに
  2. 環境
  3. ディレクトリ構成
  4. Docker Compose構成
  5. ハマりポイント①:nano-vllmが見つからない
  6. ハマりポイント②:CUDA版torchを要求される
  7. ハマりポイント③:torchcodecが使えない
  8. ハマりポイント④:デフォルトのオーディオフォーマット
  9. 起動手順
  10. 使い方(簡易)
  11. まとめ

はじめに

Qwen3-TTSで音声生成ができるようになったので、次は音楽生成を試してみました。ACE-Step 1.5はACE StudioとStepFunが共同開発したオープンソースの音楽生成モデルで、テキストでスタイルや歌詞を指示すると、ボーカル付きの楽曲をまるごと生成してくれます。MITライセンスで商用利用可能。

SunoやUdioのようなクラウドサービスと違い、完全にローカルで動きます。VRAM 4GB未満で動作し、50以上の言語の歌詞に対応。RTX 5090なら数十秒で1曲生成できるとのこと。

今回はこれをROCm環境でDocker Composeを使って動かすまでの手順をまとめます。ハマりポイントは4つありました。nano-vllmのインストール、CUDA版torch依存のスキップ、torchcodecの非対応、そしてMP3/FLAC出力の対応です。

環境

  • ホスト: GMKtec NucBox EVO X1(Ubuntu 24.04)

  • GPU: AMD Radeon 890M(VRAM 1GB + GTT 24GB)

  • Docker Image: rocm/pytorch:rocm7.2_ubuntu24.04_py3.12_pytorch_release_2.9.1

ディレクトリ構成

~/local_LLMとは別のディレクトリに構築します。ACE-Stepは使うときだけ起動して、普段はOllamaやComfyUIにメモリを譲る運用です。

mkdir -p ~/acestep/data
cd ~/acestep

Docker Compose構成

services:
  acestep:
    image: rocm/pytorch:rocm7.2_ubuntu24.04_py3.12_pytorch_release_2.9.1
    container_name: ai_acestep
    restart: "no"
    ports:
      - "7860:7860"
    devices:
      - "/dev/kfd:/dev/kfd"
      - "/dev/dri:/dev/dri"
    security_opt:
      - seccomp:unconfined
    group_add:
      - video
      - render
    ipc: host
    volumes:
      - ./data:/data
    environment:
      - HSA_OVERRIDE_GFX_VERSION=${HSA_OVERRIDE_GFX_VERSION}
      - MIOPEN_FIND_MODE=FAST
      - ACESTEP_LM_BACKEND=pytorch
    working_dir: /data
    command: >
      bash -c "
        if [ ! -d 'ACE-Step-1.5' ]; then
          git clone https://github.com/ace-step/ACE-Step-1.5.git;
        fi &&
        cd ACE-Step-1.5 &&
        pip install -r requirements-rocm.txt &&
        pip install acestep/third_parts/nano-vllm &&
        pip install --no-deps -e . &&
        pip install audio-separator onnxruntime &&
        apt-get update && apt-get install -y ffmpeg &&
        acestep --server-name 0.0.0.0 --port 7860 --config_path acestep-v15-turbo --backend pt --language ja --enable-api
      "

.envファイル:

HSA_OVERRIDE_GFX_VERSION=11.5.1

Qwen3-TTSの記事と同じROCm PyTorchベースイメージを使っています。audio-separatorffmpegも一緒に入れているのは、音源分離やMP3変換で必要になるためです。

ハマりポイント①:nano-vllmが見つからない

pip install -e .を実行すると以下のエラーが出ます。

ERROR: Could not find a version that satisfies the requirement nano-vllm

nano-vllmはPyPIに公開されておらず、リポジトリ内のacestep/third_parts/nano-vllmにローカルパッケージとして含まれています。先にこれを個別にインストールしておく必要があります。

pip install acestep/third_parts/nano-vllm

ハマりポイント②:CUDA版torchを要求される

nano-vllmを入れた後でpip install -e .を実行すると、今度は別のエラーが出ます。

ERROR: Could not find a version that satisfies the requirement torch==2.10.0+cu128

pyproject.tomlがCUDA版torchを要求しているのが原因です。ROCm版torch(2.9.1+rocm7.2)は既にインストール済みなので、--no-depsで依存解決をスキップします。

pip install --no-deps -e .

必要なパッケージはrequirements-rocm.txtで既に入っているので、これで問題ありません。

ハマりポイント③:torchcodecが使えない

起動はできるのですが、音楽を生成するとMP3やFLACの保存段階でエラーが出ます。

ImportError: TorchCodec is required for save_with_torchcodec.

ROCm環境のDockerイメージに含まれているtorchaudioは、音声の保存時にtorchcodecを呼び出します。torchcodecはROCm環境では利用できないため、ここで失敗します。

解決策:torchaudio.saveをsoundfileに差し替え

torchaudio.saveを使っている箇所をsoundfileベースの保存処理に差し替えます。

docker exec -it ai_acestep bash
cd /data/ACE-Step-1.5

# バックアップ
cp acestep/audio_utils.py acestep/audio_utils.py.bak

# soundfileでの保存関数をファイル先頭に追加
sed -i '1s/^/import soundfile as sf\nimport numpy as np\ndef _sf_save(filepath, tensor, sample_rate, **kwargs):\n    audio = tensor.cpu().numpy()\n    if audio.ndim == 2:\n        audio = audio.T\n    sf.write(str(filepath), audio, sample_rate)\n\n/' acestep/audio_utils.py

# torchaudio.saveを_sf_saveに置換
sed -i 's/torchaudio\.save(/_sf_save(/g' acestep/audio_utils.py

exit
docker restart ai_acestep

この修正でtorchaudiotorchcodec依存を完全に回避できます。MP3の場合は_sf_saveで一時WAVに保存した後、ffmpegでMP3に変換する既存の処理がそのまま動きます。FLACもWAVも問題なく出力されます。

ハマりポイント④:デフォルトのオーディオフォーマット

③の修正をしない場合の回避策として、UIのオーディオフォーマット設定を「MP3」から「FLAC」に変更するだけでもエラーは回避できます。ただし根本的にはtorchaudio.saveが問題なので、③の修正を行っておくのが確実です。

デフォルト値をFLACに変更したい場合は以下で対応できます。

sed -i 's/params.get("audio_format", "mp3")/params.get("audio_format", "flac")/' \
  acestep/ui/gradio/interfaces/generation_advanced_output_controls.py

起動手順

OllamaやComfyUIを停止してメモリを確保してから起動します。

cd ~/local_LLM && docker compose stop
cd ~/acestep && docker compose up

初回はリポジトリのクローン、依存パッケージのインストール、モデルのダウンロード(数GB)で時間がかかります。ログに以下の表示が出ればGPUが正常に認識されています。

ROCm GPU detected: AMD Radeon Graphics (24.0 GB, HIP 7.2.26015-fc0010cf6a)

ブラウザでhttp://[サーバのIPアドレス]:7860にアクセスするとGradio UIが表示されます。

backendの選択肢

--backendオプションは3つあります。

backend

説明

vllm

NVIDIA環境向け。ROCmでは使えない

pt

PyTorchバックエンド。AMD環境ではこれ一択

mlx

Apple Silicon向け

環境変数の補足

変数

説明

MIOPEN_FIND_MODE=FAST

MIOpenのカーネル検索を高速化。これがないとVAE処理でハングすることがある

ACESTEP_LM_BACKEND=pytorch

LMバックエンドをPyTorchに固定

使い方(簡易)

  1. サービスを初期化ボタンをクリック

  2. キャプション欄に音楽のスタイルを英語で記述(🎲ボタンでランダムサンプルも可)

  3. 歌詞欄に歌詞を記述(日本語OK。インスト曲ならInstrumentalチェックをON)

  4. 音楽を生成ボタンを押す

キャプションは英語の方が精度が高いです。歌詞は日本語に対応しています。

実際に作成した曲がこちら

まとめ

ROCm環境でのACE-Step 1.5は、4つのハマりポイント(nano-vllmのローカルインストール、CUDA版torch依存のスキップ、torchcodecsoundfile差し替え、オーディオフォーマットのデフォルト値変更)を超えれば安定して動きます。MP3、FLAC、WAVいずれの形式でも出力可能です。

Qwen3-TTSが音声合成、ACE-Stepが音楽生成。ComfyUIで画像、Ollamaでテキスト。Radeon 890MのGTT 24GBでここまでできるようになりました。全部ローカルで動いているのは普通にすごいですよね。