【TVM 教程】Python Target 参数化

💡 原文中文,约4700字,阅读约需12分钟。
📝

内容提要

Apache TVM 是一个支持多种硬件的深度学习编译框架,通过参数化测试确保在所有目标设备上输出正确结果,便于扩展和管理单元测试。用户可以使用 pytest 标记和环境变量配置灵活运行和管理测试。

🎯

关键要点

  • Apache TVM 是一个支持多种硬件的深度学习编译框架,适用于 CPU、GPU 和各种机器学习加速芯片。
  • TVM 确保在所有支持的 runtime 上输出正确的数字结果,单元测试应在所有支持的 runtime 上正常运行。
  • TVM 的辅助函数可以对所有单元测试进行参数化,便于在所有兼容设备上运行测试。
  • 测试套件的单个 Python 函数可以扩展为多个参数化单元测试,每个单元测试对应一个 target 设备。
  • 使用 @tvm.testing.parametrize_targets 装饰器可以显式列出要使用的 target,便于在多个 target 上运行测试。
  • 可以使用 @tvm.testing.exclude_targets 或 @tvm.testing.known_failing_targets 装饰器来排除特定 target 或标记为预期失败。
  • 参数化功能是在 pytest 标记之上实现的,允许为每个测试函数添加元数据。
  • 使用环境变量 TVM_TEST_TARGETS 可以指定待运行的 target 列表,默认情况下使用 tvm.testing.DEFAULT_TEST_TARGETS。
  • 在本地运行 Python 单元测试时,可以使用 pytest 命令,并通过环境变量配置 target 列表。
  • 在 Docker 容器中运行单元测试时,可以使用 docker/bash.sh 脚本,并指定要运行的 Docker 镜像。
  • CI 中的测试从 Jenkinsfile 中的任务定义开始,定义使用的 Docker 镜像和编译时配置。

延伸问答

Apache TVM 是什么?

Apache TVM 是一个支持多种硬件的深度学习编译框架,适用于 CPU、GPU 和各种机器学习加速芯片。

如何在 TVM 中进行单元测试的参数化?

可以使用 @tvm.testing.parametrize_targets 装饰器显式列出要使用的 target,或通过环境变量 TVM_TEST_TARGETS 自动在所有 target 上进行参数化。

在本地运行 TVM 单元测试需要哪些步骤?

在本地运行 TVM 单元测试时,可以使用 pytest 命令,并通过环境变量配置 target 列表。

如何在 Docker 容器中运行 TVM 单元测试?

可以使用 docker/bash.sh 脚本指定要运行的 Docker 镜像,并在该镜像中执行单元测试。

TVM 如何确保在所有支持的 runtime 上输出正确结果?

TVM 通过参数化测试确保在所有目标设备上输出正确结果,单元测试应在所有支持的 runtime 上正常运行。

如何排除特定的 target 或标记为预期失败?

可以使用 @tvm.testing.exclude_targets 或 @tvm.testing.known_failing_targets 装饰器来排除特定 target 或标记为预期失败。

➡️

继续阅读