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 仅支持膨胀等于一的情况,因此测试中膨胀始终设置为一。此外,填充类型设置为 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 不支持窥孔张量,因此未对其进行测试。当使用 --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 包含测试用例和指令名称。如果在共享库中找不到指令名称,测试将失败。