【人柱ログ】RTX 5090 (Blackwell) でMuseTalkを動かすまで:PyTorch 2.9.1 + 自ビルドmmcvの試行
はじめに
なぜローカルでAIを動かすのか
AITuber(AI VTuber)を開発していると、どうしてもローカル環境でAIを動かしたいという欲求が出てきます。
SaaSは便利ですが、以下のような制限があります:
- API制限: リアルタイム配信では遅延が致命的
- コスト: 長時間配信だと課金が嵩む
- データ秘匿性: 音声や映像をクラウドに送りたくない場合もある
一方、ローカル環境なら:
- 低遅延: ネットワーク往復がない
- カスタマイズ性: モデルやパラメータを自由に調整
- データ秘匿: すべてのデータが手元で完結
2025年、NVIDIA RTX 5090(Blackwell世代)が発売されました。32GB VRAMという大容量メモリは、AITuber用途では非常に魅力的です。
ただし、Blackwell世代はまだソフトウェアサポートが追いついていないという問題がありました。
この記事の位置づけ
この記事は「誰でもできるチュートリアル」ではありません。
RTX 5090という未成熟なハードウェア上で、MuseTalk(AITuber用リップシンク技術)を動かすまでの人柱ログです。
環境が変わりやすいため、再現性は保証できません。同じ挑戦をする人への参考資料として読んでください。
1. 環境概要
ハードウェア
| 項目 | 仕様 |
|---|---|
| GPU | NVIDIA GeForce RTX 5090 (Blackwell, sm_120) |
| VRAM | 32GB |
| OS | WSL2 (Ubuntu 22.04) |
ソフトウェア(最終的に動作した構成)
| 項目 | バージョン |
|---|---|
| Python | 3.10.11 (pyenv) |
| CUDA Toolkit | 12.8 (nvcc V12.8.61) |
| PyTorch | 2.9.1+cu128 |
| torchvision | 0.24.1+cu128 |
| torchaudio | 2.9.1+cu128 |
| mmcv | 2.1.0 (ソースビルド) |
| mmdet | 3.2.0 |
| mmpose | 1.1.0 |
| mmengine | 0.10.7 |
| MuseTalk | commit 0a89dec |
| NVIDIA Driver | 575.x+ (WSL2) |
2. 最初の壁:PyTorch 2.5.x では動かない
遭遇したエラー
最初、PyTorch 2.5.x で MuseTalk を動かそうとしたところ、以下のエラーが発生しました:
RuntimeError: CUDA error: no kernel image is available for execution on the device
原因の推測
このエラーは、PyTorchがRTX 5090(sm_120)用のCUDAカーネルを持っていないことを示唆しているようです。
調査した結果、以下のことがわかりました:
- RTX 5090 の Compute Capability は sm_120(Blackwell アーキテクチャ)
- PyTorch 2.5.x 以前は sm_120 をサポートしていない【要確認】
- PyTorch 2.6+ で Blackwell サポートが追加されたらしい【要確認】
解決策
PyTorch 2.9.1+cu128 にアップグレードしました:
pip install torch==2.9.1 torchvision torchaudio --index-url https://download.pytorch.org/whl/cu128
確認コマンド:
python -c "import torch; print(f'PyTorch: {torch.__version__}'); print(f'CUDA available: {torch.cuda.is_available()}'); print(f'CUDA device: {torch.cuda.get_device_name(0)}')"
期待される出力:
PyTorch: 2.9.1+cu128
CUDA available: True
CUDA device: NVIDIA GeForce RTX 5090
学んだこと
- Blackwell世代(RTX 5090)を使う場合、PyTorch 2.6 以上が必須のようです
- CUDA 12.8 も必要で、12.1 へのダウングレードは不可能でした
3. 第二の壁:mmcv の自ビルドが必要
遭遇したエラー
PyTorch をアップグレードしたら、今度は mmcv が動かなくなりました:
ImportError: mmcv._ext undefined symbol
原因の推測
mmcv は C++ 拡張(CUDA カーネル)を含むため、PyTorch のバージョンと厳密に一致させてビルドする必要があるようです。
pip でインストールした mmcv は古い PyTorch 用にビルドされていたため、PyTorch 2.9.1 とは互換性がなかったと思われます。
解決策
mmcv をソースから再ビルドしました:
# キャッシュをクリアしてソースからビルド
pip uninstall -y mmcv
pip cache remove mmcv
MMCV_WITH_OPS=1 FORCE_CUDA=1 pip install mmcv==2.1.0 --no-cache-dir --no-build-isolation
注意点
mmpose は mmcv>=2.0.0rc4,<=2.1.0 を要求するため、mmcv のバージョンは 2.1.0 に固定する必要がありました【要確認】。
4. 第三の壁:PyTorch 2.6+ の breaking change
遭遇したエラー
さらに別のエラーが発生しました:
UnpicklingError: Weights only load failed
原因の推測
PyTorch 2.6 以降で torch.load のデフォルト動作が変更されたようです:
-
2.5.x 以前:
weights_only=False(デフォルト) -
2.6 以降:
weights_only=True(デフォルト)【要確認】
mmengine や mmpose の古いチェックポイントは、この新しいデフォルト設定と互換性がないようでした。
解決策
server.py の先頭で torch.load をパッチしました:
import torch
_original_torch_load = torch.load
def _patched_torch_load(*args, **kwargs):
if 'weights_only' not in kwargs:
kwargs['weights_only'] = False
return _original_torch_load(*args, **kwargs)
torch.load = _patched_torch_load
学んだこと
最新版を使うリスクを痛感しました。後方互換性が壊れることは珍しくないようです。
5. その他の落とし穴
numpy/xtcocotools の互換性問題
pip の xtcocotools が古い numpy 用にビルドされていたため、ソースからビルドが必要でした:
cd /tmp && git clone https://github.com/pzc163/xtcocoapi.git
cd xtcocoapi && pip install -e .
MuseTalk のディレクトリ構造
MuseTalk はカレントディレクトリからの相対パスでモデルを探すため、シンボリックリンクの作成が必要でした:
cd /path/to/MuseTalk
ln -sf ../weights/models models
ln -sf ../weights weights
待機動画の配置
MuseTalk はリアルな人物画像で最適に動作するようです。アニメキャラクター画像では口元がぼやける傾向がありました【要確認】。
コスプレ風のリアル人物画像を使用することを推奨します。
6. 動作確認とベンチマーク
推論速度
【要確認】具体的な FPS 測定値は未計測です。体感では十分リアルタイムに動作していますが、正確な数値は今後追記予定です。
VRAM使用量
【要確認】推論時のVRAM使用量は未計測です。32GB VRAMのRTX 5090では余裕がありそうに見えました。
品質評価
リップシンクの精度は、リアルな人物画像を使用した場合は良好でした。アニメキャラクターでは口元がぼやける傾向がありました。
7. 再現性の担保
この記事の環境を再現するための情報をまとめます。
環境固定情報
| 項目 | バージョン/値 |
|---|---|
| PyTorch | 2.9.1+cu128 |
| mmcv | 2.1.0 (ソースビルド) |
| MuseTalk | commit 0a89dec |
| CUDA | 12.8 (nvcc V12.8.61) |
| NVIDIA Driver | 575.x+ (WSL2) / 576.x+ (Windows) |
requirements.lock.txt
完全な依存関係リストは GitHub リポジトリで公開予定です【要確認】。
Docker化の検討
将来的には Dockerfile を提供する可能性があります。ただし、CUDA 12.8 + PyTorch 2.9.1 の組み合わせは Docker 化にも課題がありそうです【要確認】。
8. MuseTalkの問題点と限界
使ってみて感じた問題点をまとめます。
表情遅延
リアルタイム処理での遅延は約100-200msと思われます【要確認】。長い音声では同期がずれることがありました。
FPSの安定性
負荷が高い場合、フレームドロップが発生することがありました。
アニメキャラクター対応
MuseTalk はリアルな人物画像向けに最適化されているようです。アニメキャラクターでは口元がぼやける傾向がありました。
9. なぜローカルで動かすのか(再論)
最後に、なぜここまでしてローカルで動かすのかを改めて整理します。
SaaSの制限
- API制限: リアルタイム配信では遅延が致命的
- コスト: 長時間配信だと課金が嵩む
- データ秘匿性: 音声や映像をクラウドに送りたくない場合もある
ローカルの優位性
- 低遅延: ネットワーク往復がない
- カスタマイズ性: モデルやパラメータを自由に調整
- データ秘匿: すべてのデータが手元で完結
技術的挑戦の価値
未成熟な環境を開拓することには、以下のような価値があると思います:
- 知見の蓄積: 後から来る人のための道標
- 技術力の証明: 難しい問題を解決できることの証明
- 自己満足: 動いた瞬間の達成感
おわりに
この記事の価値
- 未成熟環境での動作報告: RTX 5090 + PyTorch 2.9.1 + 自ビルド mmcv の組み合わせはレアケース
- エラー解決の記録: 同じエラーに遭遇した人への参考資料
この記事の限界
- 再現性の低さ: 環境依存が大きく、同じ結果が得られる保証はない
- 検証不足: ベンチマーク等の具体的な数値は未計測
今後の展望
- Docker化による再現性の向上
- ベンチマークの拡充
- 他のGPUでの検証
読者へのメッセージ
この記事が、同じ挑戦をする人の参考になれば幸いです。
RTX 5090 + MuseTalk という組み合わせは、まだ「動くことが分かった」段階です。実用レベルに持っていくには、まだまだ検証が必要だと思います。
何か質問や指摘があれば、コメントで教えてください。
Discussion