MLIRコンパイラインフラストラクチャにおけるONNXモデルの表現と参照ローワーリング
GitHubでプロジェクトを見る onnx/onnx-mlir
このプロジェクトは onnx によってメンテナンスされています。
GitHub Pagesでホスト — テーマ by orderedlist
Neural Network Processing Assist Facility (NNPA) は、IBM z16のプロセッサユニットに実装されています。onnx-mlirは、IBM Z Deep Neural Network Library (zDNN) を介してこれを使用できます。他のIBM Zシステム(例:z15)でもビルドとlitテストを実行できますが、数値テストはz16で実行する必要があります。
NNPA向けにonnx-mlirをビルドするには、次のCMakeオプションを追加します。Linux OSのビルドコマンドについては、こちらを参照してください。
-DONNX_MLIR_ACCELERATORS=NNPA
NNPAのlitテストは、test/mlir/accelerators/nnpa
に含まれています。NNPA向けにonnx-mlirをビルドする際、これらのlitテストはCPUと同じコマンドで実行されます。
cmake --build . --target check-onnx-lit
NNPAの数値テストは、test/accelerators/NNPA/numerical
に用意されています。現在、Conv2D、MatMul2D、Gemm、LSTM、GRUのテストが提供されており、次のコマンドを使用して実行されます。これらのテストでは、環境変数TEST_INSTRUCTION
を使用して、生成された共有ライブラリにzDNN命令が含まれているかどうかを確認できます。また、結果の精度を確認するために、環境変数TEST_ATOL
とTEST_RTOL
を使用してATOLとRTOLを設定できます。データ範囲の下限と上限を設定するための環境変数TEST_DATARANGE
が用意されています。「
cmake --build . --config Release --target check-onnx-numerical-nnpa
これらのテストは、CPUの数値テスト(test/modellib
とtest/numerial
)と同じテストコードを使用しますが、異なるcmakeファイル(test/accelerator/NNPA/numerical/CMakeLists.txt
)を使用します。
zDNNライブラリのConv2Dは、dilationが1の場合のみをサポートしているため、テストではdilationは常に1に設定されます。また、パディングタイプは、サポートされているものとしてVALIDとSAME_UPPERに設定されます。動的な高さおよび幅の次元は現在サポートされていないため、すべての次元は静的です。これらの構成は、--maccel=NNPA
を使用すると自動的に設定され、環境変数TEST_CONFIG
を手動で「-dim=static -dilation=1 -padding=valid_upper」に設定した場合と同じです。
Gemmのalpha
とbeta
は、zDNNライブラリでサポートされているケースとして常に1です。これらの構成は、--maccel=NNPA
を使用すると自動的に設定され、環境変数TEST_CONFIG
を手動で「-alpha=1 -beta=1」に設定した場合と同じです。
zDNNライブラリのLSTMはPeepholeテンソルをサポートしていないため、テストされていません。これらの構成は、--maccel=NNPA
を使用すると自動的に設定され、環境変数TEST_CONFIG
を手動で「-peephole=0」に設定した場合と同じです。
zDNNライブラリのGRUは、リセットゲートの出力を乗算する前に線形変換が適用される場合のみをサポートしています。これは、--maccel=NNPA
を使用すると自動的に構成され、環境変数TEST_CONFIG
を手動で「-linearBeforeReset=1」に設定した場合と同じです。
NNPAのバックエンドテストは、test/accelerators/NNPA/backend
に用意されています。次のコマンドで実行できます。test/accelerators/NNPA/backend/CMakeLists.txt
にリストされているように、zDNNでサポートされているテストケースのみが実行されます。
cmake --build . --config Release --target check-onnx-backend-nnpa
NNPAのATOLとRTOLは、CMakeLists.txt
内の環境変数TEST_ATOL
とTEST_RTOL
を使用して設定されます。また、環境変数TEST_INSTRUCTION_CHECK
とTEST_CASE_BY_USER
を使用すると、共有ライブラリにNNPA命令が生成されているかどうかを確認できます。CMakeLists.txt
では、TEST_INSTRUCTION_CHECK
はtrueに設定され、TEST_CASE_BY_USER
にはテストケースと命令名が含まれています。共有ライブラリに命令名が見つからない場合、テストは失敗します。