🖥️

WSL2×RTX5090でTensorRT-LLMビルド記録と推論時の課題

に公開

概要

⚠️ この記事は2025年10月時点での構築記録です。

🚨 重要: この記事はTensorRT-LLM 1.2.0rc1のビルドとエンジン作成には成功しましたが、RTX 5090(SM120)での推論実行には失敗した記録です。推論を実現したい場合は、NGC Docker環境(TensorRT-LLM 1.0.0rc2)またはvLLM 0.11.0の使用を推奨します。

WSL2 Ubuntu 24.04 × RTX 5090環境でTensorRT-LLM 1.2.0rc1をCMakeビルドした実践記録です。PyTorch 2.8.0へのアップデートを試行しましたが、ABI互換性の問題により失敗。最終的にPyTorch 2.6.0でビルドとエンジン作成は成功しましたが、推論実行時にSM120カーネル未実装によりエラーが発生しました。

失敗した試行も含めた記録として、同じような問題に遭遇した方の参考になれば幸いです。Docker利用と比較して手間はかかりますが、より細かいカスタマイズが可能です。

注意: 技術環境は刻々と変化するため、この手順が将来も有効である保証はありません。最新情報は公式ドキュメントを必ず確認してください。

環境仕様

  • OS: Windows 11 + WSL2 Ubuntu 24.04
  • GPU: NVIDIA GeForce RTX 5090 (32GB VRAM)
  • CPU: Intel Core i7-13700
  • RAM: 64GB
  • CUDA: 12.4
  • TensorRT: 10.8.0
  • Python: 3.10

事前準備

1. 必要な依存関係のインストール

# 基本パッケージの更新
sudo apt update && sudo apt upgrade -y

# ビルドツールのインストール
sudo apt install -y build-essential cmake git wget curl

# CUDA開発ツール
sudo apt install -y cuda-toolkit-12-4

# Python開発環境
sudo apt install -y python3-dev python3-pip python3-venv

# その他必要なライブラリ
sudo apt install -y libnccl-dev libmpi-dev libopenmpi-dev

※「apt」でCUDA Toolkitをインストールする場合は、Ubuntu標準リポジトリのバージョンが導入されます。NVIDIA公式最新版や公式リポジトリからインストールする場合は、手順やパス等が異なる場合があるのでご注意ください。

2. TensorRTのインストール

# TensorRT 10.8.0をダウンロード(NVIDIA Developer Portalから)
wget https://developer.nvidia.com/downloads/compute/machine-learning/tensorrt/secure/10.8.0/tars/tensorrt-10.8.0.0.linux.x86_64-gnu.cuda-12.4.tar.gz

# 展開
tar -xzf tensorrt-10.8.0.0.linux.x86_64-gnu.cuda-12.4.tar.gz
sudo cp -r TensorRT-10.8.0.0 /opt/tensorrt

※TensorRTのダウンロードにはNVIDIA Developer Portalへのログイン(登録)が必要です。取得にはアカウント作成が必要となります。

3. 環境変数の設定

# ~/.bashrcに追加
echo 'export TENSORRT_DIR=/opt/tensorrt' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=$TENSORRT_DIR/lib:$LD_LIBRARY_PATH' >> ~/.bashrc
echo 'export PATH=$TENSORRT_DIR/bin:$PATH' >> ~/.bashrc
source ~/.bashrc

ビルド手順

1. リポジトリのクローン

git clone https://github.com/NVIDIA/TensorRT-LLM.git
cd TensorRT-LLM
# 注意: v1.2.0rc1以降のバージョンではRTX 5090 (SM120)の
# カーネル実装が不完全なため、推論時にエラーが発生します
git checkout v1.2.0rc1  # または main

2. Python仮想環境の作成

python3 -m venv tensorrt_llm_env
source tensorrt_llm_env/bin/activate
pip install --upgrade pip

3. Python依存関係のインストール

pip install torch==2.6.0 torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124
pip install transformers datasets accelerate
pip install tensorrt

主要なエラーと解決策

エラー1: UCX設定ファイルのパスエラー

エラーメッセージ:

CMake Error: Imported target "ucx::ucp" includes non-existent path "/usr/lib/include"

原因: UCXライブラリのCMake設定ファイルに存在しないパスが含まれている

解決策:

# UCX設定ファイルを修正
sudo sed -i 's|/usr/lib/include|/usr/include|g' /usr/lib/cmake/ucx/ucx-config.cmake
sudo sed -i 's|/usr/lib/include|/usr/include|g' /usr/lib/cmake/ucx/ucx-targets.cmake

エラー2: PyTorch 2.8.0アップデート試行とダウングレード

初期の試行: RTX 5090の完全サポートのためPyTorch 2.8.0へのアップデートを試行

エラーメッセージ:

CMake Error at CMakeLists.txt:643 (parse_make_options):
  Function invoked with incorrect arguments

追加で発生したエラー:

undefined symbol: _ZN3c1019UndefinedTensorImpl10_singletonE
Cannot import extension: xformers/flash-attn unreadable
NVIDIA GeForce RTX 5090 with CUDA capability sm_120 is not compatible

原因:

  • PyTorch 2.8.0のABI変更による互換性問題
  • CUDA toolkitやTensorRT-LLMのC++バイナリとのABI・連携不一致
  • WSL2 Ubuntu 24.04環境での依存関係の競合

解決策(最終的にダウングレード):

# PyTorch 2.6.0にダウングレード(安定版)
pip uninstall torch torchvision torchaudio
pip install torch==2.6.0 torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124

判断理由:

  • CMake/ABIフラグ(_GLIBCXX_USE_CXX11_ABI)とPyTorchバイナリの合致が最優先
  • TensorRT-LLMのバインディング連携とモデル変換・推論が動作
  • 現時点(2025年10月)ではPyTorch 2.6.0+cu124が安定オプション

エラー3: NCCLライブラリが見つからない

エラーメッセージ:

Could not find NCCL

解決策:

# NCCL環境変数を設定
export NCCL_ROOT=/usr
export NCCL_INCLUDE_DIR=/usr/include
export NCCL_LIB_DIR=/usr/lib/x86_64-linux-gnu

エラー4: RTX 5090のCompute Capability警告

エラーメッセージ:

NVIDIA GeForce RTX 5090 with CUDA capability sm_120 is not compatible with the current PyTorch installation.

原因: PyTorch 2.6.0はRTX 5090 (Compute Capability 12.0) を完全サポートしていない

対処法:

  • この警告は機能制約であり、TensorRT-LLMの本質機能は動作する
  • TensorRT-LLMは独自のCUDAカーネルを使用するため、実際の推論には影響しない
  • サーバー推論やモデル変換など、主要ユースケースは全て問題なく使用可能

PyTorch 2.8.0への将来のアップグレード:

  • RTX 5090を本格的に活用したい場合は、PyTorch 2.8.0+cu128への挑戦を推奨
  • ただし、現時点ではWSL2環境での依存関係の競合により、PyTorch 2.6.0+cu124が安定オプション

CMake設定オプション

RTX 5090最適化設定

cd cpp/build
cmake .. \
  -DCMAKE_BUILD_TYPE=Release \
  -DCMAKE_CUDA_ARCHITECTURES='90' \
  -DTRT_ROOT=$TENSORRT_DIR \
  -DTRT_LIB_DIR=$TENSORRT_DIR/lib \
  -DTRT_INCLUDE_DIR=$TENSORRT_DIR/include \
  -DENABLE_MULTI_DEVICE=OFF \
  -DENABLE_MPI=OFF \
  -DPYTORCH_DIR=$(python -c "import torch; print(torch.__path__[0])") \
  -DTORCH_CUDA_ARCH_LIST="8.0;8.6;8.9;9.0" \
  -DCMAKE_CXX_STANDARD=17

重要なポイント:

  • CMAKE_CUDA_ARCHITECTURES='90': RTX 5090のCompute Capability指定
  • ENABLE_MULTI_DEVICE=OFF: 単一GPU環境でのビルド最適化
  • ENABLE_MPI=OFF: MPI不要な場合の無効化

ビルド実行

make -j$(nproc)

Pythonバインディングのビルド

1. build_wheel.pyの実行

cd ..  # TensorRT-LLMのルートディレクトリに戻る
python scripts/build_wheel.py \
  --trt_root $TENSORRT_DIR \
  --cuda_architectures 90 \
  --clean

2. 生成されたwheelのインストール

pip install dist/tensorrt_llm-0.19.0-*.whl

動作検証

1. インストール確認

python -c "import tensorrt_llm; print('TensorRT-LLM version:', tensorrt_llm.__version__)"

2. 利用可能なコマンドの確認

# モデル変換コマンド
trtllm-build --help

# 推論サーバー起動コマンド
trtllm-serve --help

3. GPU情報の確認(✅ 成功)

import tensorrt_llm
import torch

# GPU情報の確認
print(f"CUDA available: {torch.cuda.is_available()}")
print(f"GPU count: {torch.cuda.device_count()}")
print(f"Current GPU: {torch.cuda.get_device_name(0)}")

4. 実際の推論実行(❌ 失敗)

エラー内容:

RuntimeError: [TensorRT-LLM][ERROR] Assertion failed: Masked MHA is not supported on Hopper+ (/TensorRT-LLM/cpp/tensorrt_llm/kernels/gptKernels.cu:187)
CUDA ERROR: invalid resource handle

原因:
RTX 5090 (SM120) 向けのCUDAカーネルがTensorRT-LLM 1.2.0rc1では未実装のため、推論時にエラーが発生します。

対処法:

  • NGC Docker環境でTensorRT-LLM 1.0.0rc2を使用(公式検証済み)
  • TensorRT-LLM v1.3.0以降のリリース待機
  • vLLM 0.11.0等の代替フレームワークの使用

ビルド時間とパフォーマンス

ビルド時間

  • C++ライブラリ: 約45分(16コア並列ビルド)
  • Pythonバインディング: 約15分
  • 総時間: 約1時間

メモリ使用量

  • ビルド時最大メモリ: 約12GB
  • 最終バイナリサイズ: 約2.5GB

トラブルシューティング

よくある問題と解決策

  1. プロキシ設定の影響

    # プロキシ設定を無効化
    unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY
    
  2. 権限エラー

    # ビルドディレクトリの権限確認
    sudo chown -R $USER:$USER .
    
  3. 依存関係の競合

    # 仮想環境を再作成
    deactivate
    rm -rf tensorrt_llm_env
    python3 -m venv tensorrt_llm_env
    source tensorrt_llm_env/bin/activate
    

    ※仮想環境の削除は必ず仮想環境のあるディレクトリで「rm -rf ./tensorrt_llm_env」などパスを明示して実行するか、仮想環境はホームディレクトリ等リポジトリ外で作成すると安全です。

参考資料

まとめ

WSL2 Ubuntu 24.04環境でRTX 5090を使用したTensorRT-LLM 1.2.0rc1の自力ビルドとエンジン作成には成功しましたが、推論実行時にSM120(Compute Capability 12.0)非対応によるエラーが発生し、実用レベルの動作は確認できませんでした

主なポイントは:

  1. ビルド成功: UCX設定ファイルの修正でビルド完了
  2. PyTorchバージョンの調整: 2.8.0試行→2.6.0ダウングレードでABI互換性を確保
  3. エンジン作成成功: Qwen2.5-7Bのエンジンファイル生成完了
  4. 推論失敗: SM120カーネル未実装により推論時にCUDAエラー発生

推論失敗の詳細

  • エラー内容: invalid resource handle (GPT Attention Plugin)CUDA ERROR: 35
  • 根本原因: TensorRT-LLM 1.2.0rc1はSM120カーネルが未実装
  • 回避策: NGC Docker 1.0.0rc2の使用、またはv1.3.0以降のリリース待機

重要な判断ポイント

PyTorch 2.8.0へのアップデート試行とダウングレード:

  • 当初はRTX 5090の完全サポートのためPyTorch 2.8.0へのアップデートを試行
  • しかし、WSL2環境での依存関係の競合により「undefined symbol」や「xformers/flash-attn unreadable」エラーが発生
  • 最終的にPyTorch 2.6.0+cu124へダウングレードし、TensorRT-LLMのバインディング連携とモデル変換・推論が実用レベルで動作

技術的な背景:

  • CUDAとPyTorch、TensorRT-LLMバイナリの「ABI完全一致が超重要」
  • CMake/ABIフラグ(_GLIBCXX_USE_CXX11_ABI)とPyTorchバイナリの合致が最優先の技術要件
  • PyTorch警告(sm_120未サポート等)は「機能制約」であり、TensorRT-LLMの本質機能は動作

今後の展望と推奨事項

現時点での推奨アプローチ(2025年10月)

  1. vLLM 0.11.0の使用(推奨)

    • RTX 5090で即座に動作(38.40 tokens/sec)
    • OpenAI互換API提供
    • WSL2環境で安定動作
  2. NGC Docker環境の使用

    • TensorRT-LLM 1.0.0rc2が公式検証済み
    • Qwen2.5-7B推論成功実績あり
    • NVFP4量子化対応
  3. TensorRT-LLM v1.3.0以降のリリース待機

    • SM120完全対応の予定
    • ネイティブビルド環境での推論実現

長期的な展望

  • PyTorch 2.8.0へのアップグレード: RTX 5090の完全サポート(依存関係の競合解決後)
  • NVFP4量子化の活用: より高速な推論(Docker環境で実現可能)
  • マルチGPU対応: 複数RTX 5090での分散推論

補足: RTX 5090での推論成功事例

本記事のネイティブビルド環境では推論に失敗しましたが、以下の方法で推論に成功しています:

方法1: vLLM 0.11.0(最も簡単)

  • 所要時間: 約1時間
  • 推論速度: 38.40 tokens/sec
  • VRAM使用量: 27.19GB
  • OpenAI互換API対応

方法2: NGC Docker + TensorRT-LLM 1.0.0rc2

  • 所要時間: 約3時間(Docker DL含む)
  • チェックポイント変換: 1分41秒
  • エンジンビルド: 1分5秒
  • 推論: 成功(日本語テキスト生成確認)

詳細はこちらの記事を参照してください。

Discussion