ONNX 模型在 MLIR 编译器基础设施中的表示和参考下推
此项目由 onnx 维护
托管于 GitHub Pages — 主题来自 orderedlist
神经网络处理辅助功能 (NNPA) 在 IBM z16 的处理器单元上实现。Onnx-mlir 可以通过 IBM Z 深度神经网络库 (zDNN) 使用它。构建和 lit 测试在其他 IBM Z 系统(例如 z15)上运行,但数值测试需要在 z16 上运行。
添加以下 CMake 选项以构建支持 NNPA 的 onnx-mlir。关于 Linux OS 的构建命令,请在此处参阅 此处。
-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
来设置数据范围的下限和上限。它们可以设置为“TEST_CONFIG
。当前的配置写在下面每个测试的章节中。
cmake --build . --config Release --target check-onnx-numerical-nnpa
这些测试使用与 CPU 数值测试相同的测试代码(test/modellib
和 test/numerial
),但使用了不同的 cmake 文件(test/accelerator/NNPA/numerical/CMakeLists.txt
)。
由于 zDNN 库中的 Conv2D 仅支持 dilation 等于一的情况,因此测试中 dilation 始终设置为一。此外,padding 类型设置为 VALID 和 SAME_UPPER,因为它们是唯一支持的。所有维度都是静态的,因为动态的高度和宽度维度目前不受支持。当使用 --maccel=NNPA
时,这些配置会自动设置,这等同于手动将环境变量 TEST_CONFIG
设置为“-dim=static -dilation=1 -padding=valid_upper”。
Gemm 中的 alpha
和 beta
始终为一,这是 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
包含测试用例和指令名称。如果在共享库中找不到指令名称,测试将失败。