onnx-mlir

Logo

MLIRコンパイラインフラストラクチャにおけるONNXモデルの表現と参照ローワーリング

GitHubでプロジェクトを見る onnx/onnx-mlir

ハウツー

Pythonを使用した推論
C/C++を使用した推論
Javaを使用した推論

参考文献

ONNXダイアレクト
OMTensor C99ランタイムAPI
OMTensorList C99ランタイムAPI
OMTensor JavaランタイムAPI
OMTensorList JavaランタイムAPI
ONNXダイアレクトの生成
ドキュメントについて

開発

オペレーションの追加
テストガイドライン
エラー処理
コマンドラインオプション
インストゥルメンテーション
定数伝播
アクセラレータの追加

ツール

ツール

RunONNXModel.py
DocCheck

このプロジェクトは onnx によってメンテナンスされています。

GitHub Pagesでホスト — テーマ by orderedlist

アクセラレータNNPAのビルドとテスト

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のビルドコマンドについては、こちらを参照してください。

テスト

Litテスト

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_ATOLTEST_RTOLを使用してATOLとRTOLを設定できます。データ範囲の下限と上限を設定するための環境変数TEST_DATARANGEが用意されています。「,」など、"-0.1,0.1"のように設定できます。テストケースを構成するには、環境変数`TEST_CONFIG`が用意されています。現在の構成は、以下の各テストのセクションに記載されています。

cmake --build . --config Release --target check-onnx-numerical-nnpa

これらのテストは、CPUの数値テスト(test/modellibtest/numerial)と同じテストコードを使用しますが、異なるcmakeファイル(test/accelerator/NNPA/numerical/CMakeLists.txt)を使用します。

Conv2D

zDNNライブラリのConv2Dは、dilationが1の場合のみをサポートしているため、テストではdilationは常に1に設定されます。また、パディングタイプは、サポートされているものとしてVALIDとSAME_UPPERに設定されます。動的な高さおよび幅の次元は現在サポートされていないため、すべての次元は静的です。これらの構成は、--maccel=NNPAを使用すると自動的に設定され、環境変数TEST_CONFIGを手動で「-dim=static -dilation=1 -padding=valid_upper」に設定した場合と同じです。

Gemm

Gemmのalphabetaは、zDNNライブラリでサポートされているケースとして常に1です。これらの構成は、--maccel=NNPAを使用すると自動的に設定され、環境変数TEST_CONFIGを手動で「-alpha=1 -beta=1」に設定した場合と同じです。

LSTM

zDNNライブラリのLSTMはPeepholeテンソルをサポートしていないため、テストされていません。これらの構成は、--maccel=NNPAを使用すると自動的に設定され、環境変数TEST_CONFIGを手動で「-peephole=0」に設定した場合と同じです。

GRU

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_ATOLTEST_RTOLを使用して設定されます。また、環境変数TEST_INSTRUCTION_CHECKTEST_CASE_BY_USERを使用すると、共有ライブラリにNNPA命令が生成されているかどうかを確認できます。CMakeLists.txtでは、TEST_INSTRUCTION_CHECKはtrueに設定され、TEST_CASE_BY_USERにはテストケースと命令名が含まれています。共有ライブラリに命令名が見つからない場合、テストは失敗します。