0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Ubuntu 26.04 + ROCm 7.14 で gfx1151(Ryzen AI Max+ 395) の WhisperX / ローカル音声AIを動かす

0
Last updated at Posted at 2026-07-24

AMD Ryzen AI Max+ 395 (Radeon 8060S / gfx1151 / Strix Halo) のマシンを Ubuntu 26.04 +
ROCm 7.14 に移行し、CTranslate2 の再ビルド・WhisperX・自作のローカル音声AI「AIassistant」
までを GPU で動かすまでの記録です。

前半は成功手順、後半は詰まったところの解決策一覧です。gfx1151 はまだハマりどころが多いので、
同じ APU で ROCm を使う方の参考になれば。

環境

項目
CPU/GPU AMD Ryzen AI Max+ 395 / Radeon 8060S (gfx1151, 48GB VRAM)
OS Ubuntu 26.04 (resolute)
ROCm 7.14.0 (/opt/rocm)
Python system 3.14 / 各 venv は 3.12
カーネル 7.0.0-28-generic (in-tree amdgpu が gfx1151 対応)

最新のGitHub


成功手順

1. Ubuntu 26.04 と ROCm

Ubuntu 26.04 (resolute) からは ROCm が公式リポジトリに入りsudo apt install rocm
導入できるようになりました(同梱は 7.1.0)。ただし本記事では、最新機能と gfx1151 対応の観点から
AMD 公式リポジトリの ROCm 7.14 を使います。

ポイントは以下です。

  • 26.04 のカーネル同梱 amdgpu が gfx1151 に対応しているため、DKMS は不要
    むしろ AMD の amdgpu-install --dkms は 26.04 でビルド失敗する既知不具合があります
    (ROCm/ROCm#6193)。
  • ROCm 7.14 は repo.amd.comマルチアーチ・リポジトリが 26.04(ubuntu2604) を
    正式サポートしており、24.04(noble) 用を無理やり載せる必要がありません。

2. 古い ROCm / amdgpu-install の削除

24.04 時代の amdgpu-install や AMD リポジトリ設定が残っていると 26.04 で衝突するので、
先に掃除します(sudo が必要なので実ターミナルで)。

# 旧 installer を purge
sudo apt purge -y amdgpu-install

# radeon リポジトリのピンと旧リポジトリ設定を削除
sudo rm -f /etc/apt/preferences.d/repo-radeon-pin-600
sudo rm -f /etc/apt/sources.list.d/amdgpu-proprietary.{list,sources,list.disabled} \
           /etc/apt/sources.list.d/amdgpu.list.disabled \
           /etc/apt/sources.list.d/rocm.list.disabled

# 孤立パッケージの掃除(何が消えるか確認してから)
sudo apt autoremove --purge

:warning: amdgpu-install --uninstall は不要です。26.04 では DKMS ドライバを使っていない
ため、消すべきカーネルモジュールはありません(in-tree amdgpu はカーネルパッケージ由来)。

3. ROCm 7.14 のインストール

AMD 公式のマルチアーチ・リポジトリ(ubuntu2604)を登録し、gfx1151 専用の SDK メタパッケージ
入れます。

# GPG 鍵
sudo mkdir --parents --mode=0755 /etc/apt/keyrings
wget -qO - https://repo.amd.com/rocm/packages-multi-arch/gpg/rocm.gpg \
  | gpg --dearmor | sudo tee /etc/apt/keyrings/amdrocm.gpg > /dev/null

# リポジトリ登録
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/amdrocm.gpg] \
https://repo.amd.com/rocm/packages-multi-arch/ubuntu2604 stable main" \
  | sudo tee /etc/apt/sources.list.d/rocm.list > /dev/null

sudo apt update

# gfx1151 専用 ROCm 7.14 (SDK 一式: ソースビルド用のヘッダ込み)
sudo apt install -y amdrocm-core-sdk7.14-gfx1151

ランタイムだけでよければ amdrocm7.14-gfx1151、開発ヘッダ込みなら amdrocm-core-dev7.14-gfx1151
ソースビルドまでやるなら上記の amdrocm-core-sdk7.14-gfx1151 を選びます。

インストール後の確認:

ls -d /opt/rocm*
/opt/rocm/bin/rocminfo | grep -i gfx
# → Name: gfx1151 / Device Type: GPU が出ればOK

:warning: HSA_OVERRIDE_GFX_VERSION は設定しないこと。
今回入れるのは gfx1151 ネイティブビルド(amdrocm*-gfx1151)なので、アーキテクチャを
上書きすると逆に壊れます。旧 ROCm 時代の手順で 11.5.1 を export していた人は、
~/.bashrc などから消しておいてください。

4. CTranslate2-ROCm の再コンパイル

faster-whisper が呼ぶ CTranslate2 を ROCm/HIP 対応でビルドします。ROCm を入れ替えたら
再ビルドが必要です。

cd ~/whisperx/ctranslate2-rocm
rm -rf build && mkdir -p build && cd build

export AMDGPU_TARGETS=gfx1151
export ROCM_PATH=/opt/rocm

cmake .. -DWITH_HIP=ON -DWITH_MKL=OFF -DWITH_OPENBLAS=ON \
  -DCMAKE_HIP_ARCHITECTURES=gfx1151 -DCMAKE_BUILD_TYPE=Release \
  -DOPENMP_RUNTIME=COMP -DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
  -DCMAKE_HIP_COMPILER=/opt/rocm/lib/llvm/bin/clang++ \
  -DCMAKE_CXX_COMPILER=/opt/rocm/lib/llvm/bin/clang++ \
  -DCMAKE_C_COMPILER=/opt/rocm/lib/llvm/bin/clang \
  -DCMAKE_PREFIX_PATH=/opt/rocm -DBUILD_CLI=OFF

make -j$(nproc) && sudo make install && sudo ldconfig

/usr/local/lib/libctranslate2.so が入れば成功です。lddlibamdhip64.so.7 /
librocblas.so.5(= ROCm 7.14 の soname) にリンクされていれば OK。

:warning: -DCMAKE_POLICY_VERSION_MINIMUM=3.5 が無いと、CMake 4.x では同梱の
third_party/cpu_featurescmake_minimum_required が古すぎて configure が失敗します。
詳しくは後半の「詰まったところ」参照。

5. WhisperX 用 PyTorch (gfx1151) のインストール

ここが一番ハマるところです。結論だけ書くと:

  • PyTorch は gfx1151 専用インデックス https://repo.amd.com/rocm/whl/gfx1151/ を使う
  • torch/torchaudio は 2.8 系に固定する(pyannote 互換のため)
  • venv は Python 3.11 以上(これらのホイールに cp310 が無い)

WhisperX の venv を 3.12 で作り直し、CUDA 版 torch を gfx1151 版に差し替えます。

cd ~/whisperx/whisperX-rocm
echo "3.12" > .python-version
rm -rf .venv
uv venv --python 3.12
uv pip install -e .        # ← この時点では NVIDIA CUDA 版 torch が入る

# gfx1151 専用の ROCm ホイールに差し替え
uv pip uninstall torch torchaudio
uv pip install \
  --index-url https://repo.amd.com/rocm/whl/gfx1151/ \
  --extra-index-url https://pypi.org/simple \
  --index-strategy unsafe-best-match --prerelease allow \
  torch==2.8.0+rocm7.12.0 torchaudio==2.8.0a0+rocm7.12.0

# ROCm 版 ctranslate2 の Python バインディングを再ビルド(cp312 用)
rm -rf .venv/lib/python3.12/site-packages/ctranslate2*
export CTRANSLATE2_ROOT=/usr/local
uv pip install --reinstall --no-deps pybind11 ~/whisperx/ctranslate2-rocm/python

確認:

export ROCM_PATH=/opt/rocm HIP_VISIBLE_DEVICES=0
export LD_LIBRARY_PATH=/usr/local/lib:/opt/rocm/lib:/opt/rocm/lib/llvm/lib
.venv/bin/python -c "
import torch, ctranslate2
print('torch', torch.__version__, 'cuda', torch.cuda.is_available())
y = torch.randn(512,512, device='cuda'); torch.cuda.synchronize()
print('matmul OK', (y@y).sum().item())
print('ct2 devices', ctranslate2.get_cuda_device_count())
"

cuda True かつ matmul が例外なく走れば成功です(hipErrorInvalidImage が出る場合は
後半参照)。

6. WhisperX 動作確認

export ROCM_PATH=/opt/rocm HIP_VISIBLE_DEVICES=0
export LD_LIBRARY_PATH=/usr/local/lib:/opt/rocm/lib:/opt/rocm/lib/llvm/lib

.venv/bin/whisperx audio.wav --language en --model large-v3 \
  --compute_type float16 --device cuda --batch_size 8 \
  --vad_method silero --output_dir ./output --output_format all

--device cuda で動くのは、ROCm の HIP レイヤーが CUDA API を翻訳するためです。
word-level タイムスタンプ付きの srt/vtt/json 等が出れば成功。

:warning: uv run whisperx ... は使わないこと。uv run/uv sync は PyPI(CUDA)版の
ctranslate2 を再同期してローカル ROCm バインドを上書きします。.venv/bin/whisperx
直接叩くか uv run --no-sync を使ってください。

7. AIassistant を動かす

自作のローカル音声AI(AIassistant: 音声→STT→LLM→TTS→VRM
リップシンク)を、上記の ROCm スタックで動かします。

  • llama.cpp: ROCm 7.14 でも soname 互換で再ビルド不要でした(既存バイナリがそのまま
    GPU 動作。8B で 41 t/s 実測)。新規ビルドするなら -DGGML_HIP=ON -DAMDGPU_TARGETS=gfx1151
  • WhisperX(STT): 上記 5〜6 の venv をそのまま使用。AIassistant の whisperX-rocm
    シンボリックリンクをこの venv に向けます。
  • ttllm ブリッジ: WhisperX の venv を共有。server.py の先頭で import torch
    ctranslate2 より先にしておく(後半参照)。
  • three-vrm: system python(3.14)には aiohttp が無いので、venv の python で起動する。
  • VOICEVOX: Docker(CPU) なので ROCm とは無関係。

テキスト経路(マイク以外)での疎通確認例:

# LLM (ttllm → llama-server)
curl -s -X POST http://127.0.0.1:8001/chat \
  -H "Content-Type: application/json" \
  -d '{"text":"こんにちは!自己紹介してね"}'

# 音声→STT→LLM を一括
curl -s -X POST http://127.0.0.1:8001/voice_chat -F "audio=@sample.wav"

# TTS (three-vrm → VOICEVOX)
curl -s -X POST http://127.0.0.1:8000/speak \
  -H "Content-Type: application/json" -d '{"text":"やっほー!","speaker_id":3}'

STT+LLM が約 1 秒、TTS が約 0.6 秒で返り、ブラウザで VRM のリップシンク付き音声会話まで
確認できました。


詰まったところと解決策一覧

gfx1151 + ROCm 7.14 で実際に踏んだ地雷です。

① CMake 4.x で CTranslate2 の configure が落ちる

CMake Error at third_party/cpu_features/CMakeLists.txt:1 (cmake_minimum_required):
  Compatibility with CMake < 3.5 has been removed from CMake.

Ubuntu 26.04 の CMake は 4.x で、同梱 cpu_featurescmake_minimum_required が古すぎて
弾かれます。より新しい cmake を入れても直りません(逆効果)。

解決: cmake に -DCMAKE_POLICY_VERSION_MINIMUM=3.5 を渡す(エラーメッセージ自身が案内する
正攻法)。

② torch が hipErrorInvalidImage で全 GPU 操作が落ちる

HIP error: device kernel image is invalid
kpack_load_code_object failed with error: 13

AMD 公式のマルチアーチ版 torch(repo.amd.com/rocm/whl-multi-arch/
torch[device-all])は、gfx1151 では同梱 kpack から gfx1151 コードオブジェクトをロードできず、
torch.cuda.is_available() は True なのにあらゆる GPU 演算が落ちます。torch 2.8/2.12 の
どちらでも再現しました。

一方、hipcc --offload-arch=gfx1151 で自作した最小カーネルはシステム ROCm 7.14 で動くので、
問題は multi-arch ホイール側です(ROCm/TheRock#5543
と同種)。

解決: gfx1151 専用インデックス https://repo.amd.com/rocm/whl/gfx1151/
torch を使う。こちらは単一アーキ用の rocm-sdk-libraries-gfx1151 を同梱し、正しくロードできます。

uv pip install \
  --index-url https://repo.amd.com/rocm/whl/gfx1151/ \
  --extra-index-url https://pypi.org/simple \
  --index-strategy unsafe-best-match --prerelease allow \
  torch==2.8.0+rocm7.12.0 torchaudio==2.8.0a0+rocm7.12.0

torchaudio has no attribute 'AudioMetaData'

AttributeError: module 'torchaudio' has no attribute 'AudioMetaData'

torchaudio 2.9 以降torchaudio.info / AudioMetaData が削除され、pyannote-audio
(WhisperX の VAD/話者分離)が import 時点で落ちます。WhisperX が元々 torchaudio~=2.8.0
固定していたのはこのためでした。

解決: torch/torchaudio を 2.8 系に固定(torch==2.8.0+rocm7.12.0 /
torchaudio==2.8.0a0+rocm7.12.0)。gfx1151 インデックスの 2.8 系は cp312 まであります。

④ STT 実行時に undefined symbol: rocRoller...

OSError: .../_rocm_sdk_libraries_gfx1151/lib/libhipblaslt.so.1:
  undefined symbol: _ZN9rocRoller10Expression10setComment...

whisperx.load_modelwhisperx.asr 経由で ctranslate2 を先に import し、その最中に
torch が読まれます。この順序だと ctranslate2 がシステム ROCm(7.14)の rocblas/hipblas を先に
ロードし、後から来る torch 同梱の libhipblaslt.so.1 が rocRoller シンボルを解決できず落ちます。

解決: torch を ctranslate2 より先に import する。エントリポイント(ttllm なら
server.py)の先頭で:

import torch  # ctranslate2/whisperx より前に。torch 同梱 ROCm を先にロードさせる

単体スクリプトなら import torch を一行目に置くだけで回避できます。

⑤ torch と CTranslate2 の ROCm ランタイム共存

torch は自前の ROCm(rocm-sdk-libraries-gfx1151, 7.12)を同梱し、CTranslate2 はシステム
ROCm 7.14(/opt/rocm)を使います。両者を 1 プロセスで共存させるには、
LD_LIBRARY_PATH/opt/rocm/lib を含める必要があります。無いと ctranslate2 を先に
import したときに libhiprand.so.1: cannot open になります。

export LD_LIBRARY_PATH=/usr/local/lib:/opt/rocm/lib:/opt/rocm/lib/llvm/lib

uv run がローカル ROCm バインドを上書きする

uv run whisperx ... を使うと、uv sync が lockfile から PyPI(CUDA)版の ctranslate2
再インストールし、せっかく入れたローカル ROCm バインドを潰します。torch も CUDA 版に戻される
ことがあります。

解決: .venv/bin/whisperx を直接実行するか、uv run --no-sync。pyproject の
[tool.uv.index] を gfx1151 の ROCm インデックスに向けておくと uv sync 時の torch は
ROCm 版になりますが、ctranslate2 はローカルパス参照にしない限り毎回 PyPI 版に戻るので注意。

⑦ venv の Python が壊れる / CUDA 版 torch が入る

  • OS を 26.04 に上げると system python が 3.14 になり、3.12 で作った古い venv の
    インタプリタ参照が切れます
    (.venv/bin/python が消える)。→ venv を作り直す。
  • uv pip install -e .(WhisperX)は既定で NVIDIA CUDA 版 torch(+cu128) を入れます。
    → 上記②の手順で gfx1151 ROCm 版に差し替える。

⑧ three-vrm が ModuleNotFoundError: aiohttp

AIassistant の three-vrm は python3 server.py(system python)で起動しますが、
system python(3.14)には aiohttp がありません。

解決: WhisperX の venv に aiohttp を入れ、venv の python で起動する。

VIRTUAL_ENV=~/whisperx/whisperX-rocm/.venv uv pip install aiohttp
~/whisperx/whisperX-rocm/.venv/bin/python three-vrm/server.py

⑨ (既知)WhisperX が 60 秒超の音声で GPU memory fault

Memory access fault by GPU node-1 ... Page not present or supervisor privilege.

ROCm + PyTorch の既知問題。長尺音声は VAD で 55 秒程度に区切って処理して回避します。


まとめ

gfx1151(Strix Halo)+ ROCm 7.14 のキモは以下の 3 点でした。

  1. PyTorch は gfx1151 専用インデックス(repo.amd.com/rocm/whl/gfx1151/)を使う。
    multi-arch 版は hipErrorInvalidImage で全滅。
  2. torch/torchaudio は 2.8 系に固定(pyannote が torchaudio 2.9 で削除された API を使う)。
  3. torch を ctranslate2 より先に importし、LD_LIBRARY_PATH/opt/rocm/lib を含める
    ことで、torch 同梱 ROCm とシステム ROCm を共存させる。

ここさえ押さえれば、WhisperX も llama.cpp も CTranslate2 も 1 台の APU で快適に動きます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?