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 模型,请联系我们。