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

为 Accelerator NNPA 构建和测试

神经网络处理辅助功能 (NNPA) 在 IBM z16 的处理器单元上实现。Onnx-mlir 可以通过 IBM Z 深度神经网络库 (zDNN) 使用它。构建和 lit 测试在其他 IBM Z 系统(例如 z15)上运行,但数值测试需要在 z16 上运行。

构建

添加以下 CMake 选项以构建支持 NNPA 的 onnx-mlir。关于 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 等于一的情况,因此测试中 dilation 始终设置为一。此外,padding 类型设置为 VALID 和 SAME_UPPER,因为它们是唯一支持的。所有维度都是静态的,因为动态的高度和宽度维度目前不受支持。当使用 --maccel=NNPA 时,这些配置会自动设置,这等同于手动将环境变量 TEST_CONFIG 设置为“-dim=static -dilation=1 -padding=valid_upper”。

Gemm

Gemm 中的 alphabeta 始终为一,这是 zDNN 库支持的情况。当使用 --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 中提供。可以使用以下命令运行。只有 zDNN 支持的测试用例才会运行,如 test/accelerators/NNPA/backend/CMakeLists.txt 中所述。

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 包含测试用例和指令名称。如果在共享库中找不到指令名称,测试将失败。