XIR ベース コンパイラは、量子化された Caffe を入力として受け取ります。1TensorFlow、TensorFlow2.x、または PyTorch モデルを入力として受け取ります。最初に、このプロセスの土台として、入力モデルを XIR 形式に変換します。異なるフレームワーク間におけるほぼすべての違いが排除され、XIR という統一表現に変換されます。その後、グラフ上にさまざまな最適化を適用し、個々の演算子を DPU で実行できるかどうかに基づいて、グラフを複数のサブグラフに分割します。必要に応じて、各サブグラフに対して、アーキテクチャを意識した最適化が適用されます。DPU サブグラフ用にコンパイラが命令ストリームを生成し、それをサブグラフに付け加えます。最後に、VART 用に必要な情報と命令を含む最適化済みのグラフが、コンパイル済みの XMODEL ファイルへシリアライズされます。
XIR ベースのコンパイラは、エッジ Zynq UltraScale+ MPSoC プラットフォーム上では DPUCZDX8G シリーズ、Alveo プラットフォーム上では DPUCADF8H、高スループット アプリケーションに最適化された Alveo HBM プラットフォーム上では DPUCAHX8H、Versal エッジ プラットフォーム上では DPUCVDX8G と DPUCV2DX8G、Versal データセンター プラットフォーム上では DPUCVDX8H をサポートします。これらのプラットフォーム用の arch.json ファイルは、/opt/vitis_ai/compiler/arch にあります。
VAI_C で Caffe または TensorFlow モデルをコンパイルする手順は、前述した DPU と同じです。この場合、VAI_C を含む Vitis AI パッケージが正常にインストールされており、vai_quantizer でモデルが圧縮されていることが前提となります。
TensorFlow
TensorFlow では、vai_q_tensorflow が pb ファイル (quantize_eval_model.pb) を生成します。vai_q_tensorflow によって生成される pb ファイルは 2 つあります。quantize_eval_model.pb ファイルは、XIR ベースのコンパイラ用の入力ファイルです。コンパイルするには、次のコマンドを実行します。
vai_c_tensorflow -f /PATH/TO/quantize_eval_model.pb -a /PATH/TO/arch.json -o /OUTPUTPATH -n netname
出力は Caffe の出力と同じです。
コンパイル エラーを避けるため、TensorFlow モデルには入力テンソルの形状情報が含まれないことがあります。--options
'{"input_shape": "1,224,224,3"}'
のような追加オプションを指定して、入力テンソルの形状を指定できます。
TensorFlow 2.x
TensorFlow 2.x では、クオンタイザーが量子化済みモデルを hdf5 形式で生成します。
vai_c_tensorflow2 -m /PATH/TO/quantized.h5 -a /PATH/TO/arch.json -o /OUTPUTPATH -n netname
現在、vai_c_tensorflow2 は Keras 機能 API のみをサポートします。
PyTorch
PyTorch では、クオンタイザー NNDCT が量子化済みモデルを XIR 形式で直接出力します。vai_c_xir を使用してモデルをコンパイルします。
vai_c_xir -x /PATH/TO/quantized.xmodel -a /PATH/TO/arch.json -o /OUTPUTPATH -n netname