ONNX 后端测试

什么是 ONNX 后端测试

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

该套件中有两种类型的测试:节点测试和模型测试。

  • 节点测试 验证后端是否执行了正确的计算,并对每个单独算子的各种属性具有预期的处理行为。在每个测试用例中,后端将接收一个带有某些输入的节点,并将其返回的输出与预期输出进行比较。

  • 模型测试 在模型级别验证后端。测试用例与节点测试类似,但后端接收的是一个 ONNX 模型而不是一个节点。

贡献

鉴于 ONNX 旨在成为深度学习模型格式的规范,确保每个 ONNX 算子的定义没有歧义至关重要;增加更多测试用例是强制执行此规则的唯一方法。

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

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