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