onnx-mlir

Logo

ONNX 模型在 MLIR 编译器基础设施中的表示和参考降低

在 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 中的错误

存在两种不同类型的错误:来自用户输入的错误和编译器错误。我们应该为用户输入错误提供有意义的用户反馈,并且应该使用 emitError 函数。编译器错误应该使用 assertsllvm_unreachable 调用进行报告。在实践中,如果存在检查错误的函数,并且能够返回“失败”,则首选使用 emitError 并返回失败。另一方面,如果函数不允许返回失败,则应使用断言或不可达调用。返回错误对于检查用户输入的传递很重要,例如在摄取 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");

错误也可以在操作上下文之外进行报告。在这种情况下,必须提供一个位置。要报告警告或备注,只需在上面的示例中用“Warning”或“Remark”替换“Error”。

编译器错误

一旦 ONNX 图表经过验证,所有后续的错误情况都应使用断言进行报告以停止编译,因为这是一个需要正确处理的编译器错误。可以使用两个调用

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

不可达调用在应返回值的函数中很有用,因为如果该路径上没有虚拟返回值语句,编译器不会报告警告。否则,在 void 函数中,使用断言完全没问题。

参考

相关信息可在下面提到的 LLVM 和 MLIR 文档中找到。