【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 或标记为预期失败。
➡️