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 提供

为加速器 NNPA 构建和测试

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

构建

添加以下 CMake 选项以构建用于 NNPA 的 onnx-mlir。关于 Linux 操作系统的构建命令,请参阅 此处

测试

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 只支持膨胀等于 1 的情况,因此在测试中膨胀始终设置为 1。此外,填充类型设置为 VALID 和 SAME_UPPER,因为它们是唯一受支持的类型。所有维度都是静态的,因为当前不支持动态高度和宽度维度。使用 --maccel=NNPA 时,这些配置会自动设置,这相当于手动将环境变量 TEST_CONFIG 设置为 “-dim=static -dilation=1 -padding=valid_upper”。

Gemm

Gemm 中的 alphabeta 始终为 1,这是 zDNN 库支持的情况。使用 --maccel=NNPA 时,这些配置会自动设置,这相当于手动将环境变量 TEST_CONFIG 设置为 “-alpha=1 -beta=1”。

LSTM

不测试窥视孔张量,因为 zDNN 库中的 LSTM 不支持它。使用 --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 使用环境变量 TEST_ATOLTEST_RTOLCMakeLists.txt 中设置。此外,环境变量 TEST_INSTRUCTION_CHECKTEST_CASE_BY_USER 允许您检查 NNPA 指令是否在共享库中生成。在 CMakeLists.txt 中,TEST_INSTRUCTION_CHECK 设置为 true,而 TEST_CASE_BY_USER 包含测试用例和指令名称。如果在共享库中找不到指令名称,则测试将失败。