ONNX 模型在 MLIR 编译器基础设施中的表示和参考降低
该项目由 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 只支持膨胀等于 1 的情况,因此在测试中膨胀始终设置为 1。此外,填充类型设置为 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 不支持它。使用 --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 使用环境变量 TEST_ATOL
和 TEST_RTOL
在 CMakeLists.txt
中设置。此外,环境变量 TEST_INSTRUCTION_CHECK
和 TEST_CASE_BY_USER
允许您检查 NNPA 指令是否在共享库中生成。在 CMakeLists.txt
中,TEST_INSTRUCTION_CHECK
设置为 true,而 TEST_CASE_BY_USER
包含测试用例和指令名称。如果在共享库中找不到指令名称,则测试将失败。