Skip to content

feat: TensorRT EP有効のx64 CUDAビルドターゲットを追加 - #118

Draft
HariBote1110 wants to merge 2 commits into
VOICEVOX:mainfrom
HariBote1110:add-tensorrt-targets
Draft

feat: TensorRT EP有効のx64 CUDAビルドターゲットを追加#118
HariBote1110 wants to merge 2 commits into
VOICEVOX:mainfrom
HariBote1110:add-tensorrt-targets

Conversation

@HariBote1110

Copy link
Copy Markdown

内容

#89 の議論に関連して、TensorRT Execution Provider を有効化した x64 CUDA ビルドターゲットを2つ追加する提案です。

  • voicevox_onnxruntime-win-x64-cuda-trt
  • voicevox_onnxruntime-linux-x64-cuda-trt

TensorRT EP は CUDA EP へのフォールバックを内包するため、#89 で議論されている「複数の非CPU EPを同梱したビルド」の最初の実例にもなるかと思います。

動機と実測

VOICEVOX を Discord 読み上げボットの音声合成として常時稼働させており、CUDA EP と比べて TensorRT EP に2つの利点があることを実測で確認しています。

計測は公開されている生ONNXモデル(本リポジトリと同じ VOICEVOX/voicevox_core の model/sample.vvm 同梱 decode.onnx。ダミー重みのため速度のみの評価です)を、pip の onnxruntime-gpu 1.23.2 + tensorrt-cu12 10.9.0.34 で実行したものです。環境は Windows 11 / RTX 3070 Ti、decode 入力フレーム長ごとに20回計測の中央値です。

1. 推論速度(特に長い入力で顕著)

decode入力長 CUDA EP fp32 TensorRT fp32 TensorRT fp16
112 12.4 ms 11.3 ms 6.5 ms
380 27.8 ms 21.6 ms 6.9 ms
1500 622.1 ms(不安定: min 102 / max 4560) 66.2 ms 23.5 ms

2. 動的shape混在時の安定性

長さ 112/380/1500 をラウンドロビンで交互に流すと、CUDA EP は短い入力の所要時間が定常値の7〜13倍に劣化しましたが、TensorRT は概ね ±10〜50% に収まりました。読み上げ用途では短文と長文が混在するため、この安定性の差は体感に直結します。

なお #89 には Jetson (arm64) での同種の要望が出ていますが、こちらは x64(Windows / Linux)での需要の報告になります。

変更点

  • ビルドマトリクスに上記2エントリを追加(既存の win-x64-cuda / linux-x64-cuda の派生、--use_tensorrt 追加)
  • TensorRT SDK の取得・展開ステップを cuDNN と同じ流儀で追加(URL は認証なしで curl ダウンロード可能なことを確認済み)
  • Windows 成果物への voicevox_onnxruntime_providers_tensorrt.dll の同梱
  • spec 生成に TensorRT を反映

制約・正直な注記

  • 手元に GitHub Actions と同等のビルド環境がなく、このワークフロー変更の E2E 検証は未実施です。そのため Draft PR として出します。CI での検証・調整が必要な認識です
  • ONNX Runtime 1.23 系と TensorRT 10.9 の組み合わせは、本家の要件表では 1.22 までしか明記されていません(pip 版 1.23.2 + 10.9.0.34 での動作は上記のとおり手元で確認済み)
  • fp16 は数値精度が変わるため、リリース対象にする場合は fp32(--use_tensorrt のみ)が無難だと考えています
  • TensorRT はモデルの shape 推論済みONNXを要求します(onnxruntime.tools.symbolic_shape_infer で解決)。また decode.onnx は一部ノード(Squeeze 等)が TensorRT 非対応のため TensorRT/CUDA の分割実行になります。この場合も上記のとおり速度向上は得られました
  • engine のビルド(初回のみ)に shape ごと数十秒〜数分かかります。エンジンキャッシュ(trt_engine_cache_enable)で2回目以降は回避できますが、利用側(voicevox_core)でのオプション公開は別の議論になる認識です

補足(作成方法について)

この PR と検証は LLM(Claude)の支援を大きく受けて作成しています。私自身はプログラミングは嗜む程度で、専門的な部分は LLM に頼っているためです。計測はすべて手元の実機で実行したものですが、不備やお作法違いがあればご指摘ください。確認して修正します。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant