【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),并使用自定义数据类型运行模型,验证输出与标准浮点数输出是否一致。

➡️

继续阅读