🗣️

【人柱ログ】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