ONNX 后端测试

什么是ONNX后端测试

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

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

  • 节点测试 验证后端是否执行了正确的计算,是否具有处理每个单独操作符的各种属性的预期行为。在每个测试案例中,后端将获得一个带有一些输入的节点,返回的输出将与预期输出进行比较。

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

贡献

由于ONNX旨在成为深度学习模型格式的规范,确保每个ONNX操作符的定义没有歧义非常重要;添加更多的测试用例是强制执行这一点的唯一方法。

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

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