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
![]()
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
![]()
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 が入れば成功です。ldd で libamdhip64.so.7 /
librocblas.so.5(= ROCm 7.14 の soname) にリンクされていれば OK。
![]()
-DCMAKE_POLICY_VERSION_MINIMUM=3.5が無いと、CMake 4.x では同梱の
third_party/cpu_featuresのcmake_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 等が出れば成功。
![]()
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_features の cmake_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_model は whisperx.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 点でした。
-
PyTorch は gfx1151 専用インデックス(
repo.amd.com/rocm/whl/gfx1151/)を使う。
multi-arch 版はhipErrorInvalidImageで全滅。 - torch/torchaudio は 2.8 系に固定(pyannote が torchaudio 2.9 で削除された API を使う)。
-
torch を ctranslate2 より先に importし、
LD_LIBRARY_PATHに/opt/rocm/libを含める
ことで、torch 同梱 ROCm とシステム ROCm を共存させる。
ここさえ押さえれば、WhisperX も llama.cpp も CTranslate2 も 1 台の APU で快適に動きます。