【TVM 教程】在 TVM 中使用 Bring Your Own Datatypes
💡
原文中文,约12100字,阅读约需29分钟。
📝
内容提要
Apache TVM 是一个深度学习编译框架,支持用户自定义数据类型。通过 Bring Your Own Datatypes 框架,用户可以在 TVM 中注册和使用这些自定义数据类型。本文提供了实现和使用自定义数据类型的示例代码及运行步骤。
🎯
关键要点
- Apache TVM 是一个深度学习编译框架,支持 CPU、GPU 和各种机器学习加速芯片。
- Bring Your Own Datatypes 框架允许用户在 TVM 中注册和使用自定义数据类型。
- 该框架目前仅处理数据类型的软件模拟版本,不支持编译自定义加速器数据类型。
- 用户可以通过库的形式实现自定义数据类型,例如 libposit 和 SoftFloat。
- 示例库 myfloat 是一个 IEE-754 浮点数的实现,展示了如何在 BYODT 框架中使用自定义数据类型。
- 使用 ctypes.CDLL 引入自定义数据类型库的函数。
- 编写简单的 TVM 程序并使用 numpy 创建随机输入。
- 通过 relay.cast(...) 将输入变量转换为自定义数据类型。
- 需要在 TVM 中注册自定义数据类型及其类型代码。
- 注册降级函数以处理自定义数据类型的 Cast 操作。
- 为其他操作(如 Add)注册降级函数以确保程序正常运行。
- 选择 Mobilenet 模型进行测试,定义辅助函数获取模型和图像。
- 使用原生 TVM 执行 MobileNet 模型并打印结果。
- 定义函数将 NDArray 转换为指定的数据类型以支持 myfloat。
- 编写一个 pass 将模型中的所有节点转换为使用新的数据类型。
- 注册更多的降级函数以支持神经网络中的各种操作。
- 运行模型并验证 myfloat 输出与浮点数输出相同。
❓
延伸问答
什么是 Bring Your Own Datatypes 框架?
Bring Your Own Datatypes 框架允许用户在 TVM 中注册和使用自定义数据类型。
如何在 TVM 中使用自定义数据类型?
用户可以通过注册自定义数据类型及其类型代码,并编写相应的降级函数来使用自定义数据类型。
Bring Your Own Datatypes 框架支持哪些数据类型?
该框架支持用户自定义的数据类型实现,如 libposit 和 SoftFloat,但目前仅处理软件模拟版本,不支持编译自定义加速器数据类型。
如何在 TVM 中注册自定义数据类型?
可以使用 tvm.target.datatype.register 函数注册自定义数据类型,并指定名称和类型代码。
在 TVM 中如何处理自定义数据类型的 Cast 操作?
需要注册降级函数以处理自定义数据类型的 Cast 操作,确保 TVM 能够理解如何将其转换为可编译的数据类型。
如何测试自定义数据类型在 TVM 中的输出?
可以选择模型(如 Mobilenet),并使用自定义数据类型运行模型,验证输出与标准浮点数输出是否一致。
➡️