ONNX 后端测试

什么是 ONNX 后端测试

ONNX 后端测试是一个测试套件,每个 ONNX 后端都应运行此套件来验证其是否符合 ONNX 标准。它既是后端实现的验证工具,也是定义每个算子预期行为的两种方式之一(另一种方式是将其添加到文档中)。

此套件中有两种类型的测试 - 节点测试 (Node Tests) 和模型测试 (Model Tests)

  • 节点测试 (Node Tests) 验证后端是否执行正确的计算,并具有处理每个独立算子的各种属性的预期行为。在每个测试用例中,后端将获得一个带有某些输入的节点,并且返回的输出将与预期输出进行比较。

  • 模型测试 (Model Tests) 在模型级别验证后端。测试用例类似于节点测试,但后端获得的是 ONNX 模型而不是节点。

贡献

由于 ONNX 旨在成为深度学习模型格式的规范,因此确保每个 ONNX 算子的定义没有歧义非常重要;增加更多测试用例是实现这一目标的唯一方法。

节点测试 (Node Tests) 在 onnx/backend/test/case/node 中作为 Python/Numpy 代码创建,然后通过调用 shell 命令 backend-test-tools generate-data 导出为 protobuf 文件到 onnx/backend/test/data/node 作为事实来源。每个算子的测试用例位于一个独立文件中,例如对于 Add 算子,其测试用例在 add.py 中,代码中的每个 expect(...) 语句对应一个测试用例。所有 export.* 函数的源代码也将作为示例代码片段嵌入到 算子文档页面 中。您正在同时为测试和文档做出贡献!

对于模型测试 (Model Tests),由于每个模型 protobuf 文件可能很大,我们不将文件直接放在仓库中。相反,我们将它们上传到云端,并在运行测试时按需下载。每个测试用例由一个模型定义 protobuf 文件和几对输入输出文件组成。添加新的测试用例需要管理员进行一些手动工作(例如将文件上传到云端),因此如果您有想要贡献的 ONNX 模型,请联系我们。