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でホストされています。テーマはorderedlistによるものです

MLIRでのエラーを処理する

2種類のエラーが考えられます。ユーザー入力からのエラーとコンパイラエラーです。ユーザー入力エラーには有意義なユーザーフィードバックを提供し、emitError関数を使用する必要があります。コンパイラエラーはassertsまたはllvm_unreachableコールを使用して報告する必要があります。実際、エラーをチェックする関数があり、「失敗」を返すことができる場合、優先される方法はemitErrorを使用して失敗を返すことです。一方、その関数が失敗を返すことができない場合は、assertまたはunreachableコールを使用する必要があります。エラーを返すことは、例えばONNXモデルの取り込み中など、ユーザー入力をチェックするパスにとって重要です。

ユーザーエラー

MLIRは、重大度に応じて3つの異なるコールを提供します。 emitErroremitWarning、および「emitRemark」。通常、エラーは適切な処理のために呼び出し関数に報告する必要があります。典型的な使用法は以下に示されています。

  return op->emitError("message");
  return op->emitError() << "message";

上記のコールには、演算の位置が含まれます。LogicalResultを返します。これは、以下のように設定/テストできます。emitErrorコールはfailure()値を返すことに注意してください。

  LogicalResult isEven(int i) { return (i%2 == 0) success() : failure(); }

  if (succeeded(isEven(0)) && failed(isEven(1))) printf("It is all good.\n");

エラーは、演算のコンテキストの外でも報告できます。この場合、場所を指定する必要があります。警告またはリマークを報告するには、上記の例で「エラー」の代わりに「警告」または「リマーク」を置き換えるだけです。

コンパイラエラー

ONNXグラフが検証されると、その後のすべての誤った状況は、適切に処理する必要があるコンパイラエラーなので、コンパイルを停止するためのアサートで報告する必要があります。使用できるコールは2つあります。

  assert(condition-that-should-hold-true && "error message");
  llvm_unreachable("error message");

到達不能なコールは、そのパスにダミー値の戻りステートメントがない場合、コンパイラは警告を出さないので、値を返す必要がある関数で役立ちます。それ以外の場合は、void関数では、assertを使用しても問題ありません。

参照

追加の関連情報は、以下に示すLLVMおよびMLIRのドキュメントにあります。