バージョン 2.5 以降、Vitis AI はカスタム OP で Pytorch および Tensorflow2 モデルをサポートしています。カスタム OP の基本的なワークフローは、次のとおりです。
図 1. カスタム OP ワークフロー
このワークフローの手順は次のとおりです。
- OP を XIR にとって未知のカスタム OP として定義し、モデルを量子化します。
- 量子化済みモデルをコンパイルします。
- カスタム OP を登録して実装します。
- graph_runner API を使用してモデルを運用します。
注記: カスタム OP 用にアクセラレーションされた (PL または AI エンジン) 関数を実装する場合は、関数を CPU OP として作成し、この CPU OP の実装の中に PL/AI エンジン呼び出しコードを実装します。
手順 4 では、graph_runner API は C++ と Python の両方をサポートします。Graph_runner API を使用してカスタム OP を運用する場合の実行時間は最適化されています。これには、異なる DPU OP と CPU OP 間のゼロ コピー技術が含まれます。ゼロ コピーとは、データのコピーなしでの異なるレイヤー間のアドレス共有という意味です。
次のモデル構造がゼロ コピーでサポートされます。
タイプ | OP の出力 | OP の入力 | ゼロ コピーの使用 |
---|---|---|---|
a | シングル dpu OP | シングル cpu OP | あり |
b | シングル cpu OP | シングル dpu OP | あり |
c | シングル cpu OP | シングル cpu OP | あり |
d | シングル dpu OP | マルチ cpu OP | あり |
e | マルチ cpu OP およびマルチ dpu OP | シングル cpu OP | あり |
注記: 次の図に、モデル構造タイプ a ~ e を示します。
図 2. モデル構造タイプ
注記: その他のモデル構造にゼロ コピーを適用できるかどうかは、状況に依存します。
次に、2 つのモデルそれぞれの例を示します。
- Tensorflow2 に基づく MNIST モデル
- Pytorch に基づく Pointpillars モデル