在 MLIR 编译器基础设施中表示和参考降低 ONNX 模型
本项目由 onnx 维护
托管于 GitHub Pages — 主题由 orderedlist 提供
神经网络处理辅助设施 (NNPA) 实现于 IBM z16 的处理器单元上。Onnx-mlir 可以通过 IBM Z 深度神经网络库 (zDNN) 使用它。构建和 lit 测试可以在其他 IBM Z 系统(例如 z15)上运行,但数值测试需要在 z16 上运行。
添加以下 CMake 选项以构建用于 NNPA 的 onnx-mlir。有关 Linux 操作系统的构建命令,请参见 此处
-DONNX_MLIR_ACCELERATORS=NNPA
用于 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_ATOL
和 TEST_RTOL
设置 ATOL 和 RTOL。提供了环境变量 TEST_DATARANGE
来设置数据范围的下限和上限。可以设置“
cmake --build . --config Release --target check-onnx-numerical-nnpa
这些测试与 CPU 的数值测试(test/modellib
和 test/numerial
)使用相同的测试代码,但使用不同的 cmake 文件(test/accelerator/NNPA/numerical/CMakeLists.txt
)。
由于 zDNN 库中的 Conv2D 仅支持 dilation 等于 1 的情况,因此测试中 dilation 始终设置为 1。此外,padding 类型设置为 VALID 和 SAME_UPPER,因为它们是唯一支持的。所有维度都是静态的,因为目前不支持动态高度和权重维度。使用 --maccel=NNPA
时会自动设置这些配置,这等同于手动将环境变量 TEST_CONFIG
设置为 “-dim=static -dilation=1 -padding=valid_upper”。
Gemm 中的 alpha
和 beta
总是为 1,这是 zDNN 库支持的情况。使用 --maccel=NNPA
时会自动设置这些配置,这等同于手动将环境变量 TEST_CONFIG
设置为 “-alpha=1 -beta=1”。
由于 zDNN 库中的 LSTM 不支持 Peephole 张量,因此不对其进行测试。使用 --maccel=NNPA
时会自动设置这些配置,这等同于手动将环境变量 TEST_CONFIG
设置为 “-peephole=0”。
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_ATOL
和 TEST_RTOL
设置。此外,环境变量 TEST_INSTRUCTION_CHECK
和 TEST_CASE_BY_USER
允许您检查共享库中是否生成了 NNPA 指令。在 CMakeLists.txt
中,TEST_INSTRUCTION_CHECK
设置为 true,并且 TEST_CASE_BY_USER
包含测试用例和指令名称。如果在共享库中找不到指令名称,则测试将失败。