カスタム OP ワークフロー - 2.5 日本語

Vitis AI ユーザー ガイド (UG1414)

Document ID
UG1414
Release Date
2022-06-15
Version
2.5 日本語

VAI2.5 リリースでは、カスタム op を使用した Pytorch および Tensorflow2 モデルがサポートされます。カスタム op の基本的なワークフローは、次のとおりです。

図 1. カスタム OP ワークフロー
このワークフローの手順は次のとおりです。
  1. OP を XIR にとって未知のカスタム OP として定義し、モデルを量子化します。
  2. 量子化済みモデルをコンパイルします。
  3. カスタム OP を登録して実装します。
  4. graph_runner API を使用してモデルを運用します。
手順 3 では、カスタム OP の実装および登録用に C++Python の両方がサポートされます。Vitis AI ライブラリでサポートされる一般的な OP は 50 以上あります。一般的な OP のソース コードは、https://github.com/Xilinx/Vitis-AI/tree/master/src/Vitis-AI-Library/cpu_task/ops にあります。
注記: カスタム op 用にアクセラレーションされた (PL または AIE) 関数を実装する場合は、関数を CPU OP として作成し、この CPU OP の実装の中に PL/AIE 呼び出しコードを実装します。

手順 4 では、graph_runner API は C++Python の両方をサポートします。Graph_runner API を使用してカスタム OP を運用する場合の実行時間は最適化されています。これには、異なる DPU OP と CPU OP 間のゼロ コピー技術が含まれます。ゼロ コピーとは、データのコピーなしでの異なるレイヤー間のアドレス共有という意味です。

次のモデル構造がゼロ コピーでサポートされます。

表 1. ゼロ コピーでサポートされるモデル構造
タイプ 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 つのモデルそれぞれの例を示します。
  • Tensorflow2 に基づく MNIST モデル
  • Pytorch に基づく Pointpillars モデル