AI

公開AIモデルのC++推論、構築と実行をバンドルで分離

この記事のポイント

  1. 実現したこと

    対応する公開AIモデルを、TensorRTを使うC++アプリケーションから実行できる。

  2. 実現の仕組み

    モデルIDまたはチェックポイントから、TensorRTエンジンと実行用資産を一つのバンドルに構築する。

  3. 得られた結果

    配備先のC++アプリケーションは、PyTorchやPythonインタープリターなしでバンドルを読み込める。

  4. 従来との違い

    モデル固有の前後処理と実行制御を参照実装が担い、構築と実行の間をバンドルで受け渡す構成になった。

TensorRTエンジンとモデル固有の資産を収めたバンドルが、チェックポイントからC++推論用の配備機へ渡る構成図
AI生成画像

対応する公開AIモデルのチェックポイントから実行用バンドルを作り、C++アプリケーションでTensorRT推論を動かす経路が用意された。構築にはPythonを使うが、配備先の実行時にはPyTorchもPythonインタープリターも必要としない。

モデル固有の処理を参照実装へまとめる

NVIDIAが公開したTensorRT Model Connectは、対応する公開AIモデルをネイティブC++アプリケーションで実行するための参照実装群だ。チェックポイントと実装の対応付けを担い、モデルごとに必要な前処理と後処理も扱う。

これらの処理はTensorRTエンジンの構築や実行制御につながる。モデルごとの統合作業を参照実装に収めることで、アプリケーションは構築済みのモデルを読み込むところから始められる。

チェックポイントを実行用バンドルに変える

対応モデルの構築では、Hugging FaceのモデルIDまたはローカルのチェックポイントをPythonのCLIに渡す。生成されるバンドルには、TensorRTエンジンと実行時に必要なモデル固有の資産が入る。

C++アプリケーションはそのバンドルを読み込み、タスク単位の入力を渡して推論結果を受け取る。Pythonを使う構築段階と配備先での実行段階が分かれているため、実行時にPyTorchやPythonインタープリターは必要ない。

二つのC++ APIで入力と制御の粒度を選ぶ

semantic APIでは、プロンプト、画像、音声などをタスク単位の入出力として扱う。モデル固有の前処理、実行、後処理はModel Connect側が引き受ける。

推論パイプラインを細かく調整する場合は、module-level APIから名前付きテンソルや個々のTensorRTコンポーネントを直接扱える。二つのAPIは同じ実装を利用するため、タスク単位の呼び出しから部品単位の制御へ移れる。

カスタムGPUカーネルを一部分に組み込む

既存の推論経路に独自のGPU処理を加える場合、TVM FFIを介してモデルの対象部分をカスタムGPUカーネルに置き換えられる。TVM FFIは、呼び出す側とカーネルの実装環境を密接に結び付けずに処理を呼び出すためのインターフェースだ。

置き換えた部分以外の推論パイプラインはTensorRTが引き続き実行する。カスタム処理を局所的に組み込みながら、バンドルからC++アプリケーションへ渡す実行経路を利用できる。