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