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

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 仅支持 dilation 等于 1 的情况,因此测试中 dilation 始终设置为 1。此外,padding 类型设置为 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 不支持 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 包含测试用例和指令名称。如果在共享库中找不到指令名称,则测试将失败。