【TVM 教程】向 TVM 中添加 Codegen

💡 原文中文,约25300字,阅读约需61分钟。
📝

内容提要

Apache TVM 是一个支持多种硬件的深度学习编译框架,提供统一的编程接口,简化高性能模型在不同设备上的实现。开发手册指导如何为硬件生成代码并注册为 Relay 后端编译器,支持生成 C 代码或其他计算图形式。用户可通过自定义标签注释模型以提升性能。

🎯

关键要点

  • Apache TVM 是一个支持多种硬件的深度学习编译框架,简化高性能模型在不同设备上的实现。
  • 统一的编程接口可以让用户和硬件厂商信息同步,提供高性能的解决方案。
  • 开发手册指导硬件厂商如何实现自己的 Codegen,并注册为 Relay 后端编译器。
  • 用户可以生成 C 代码或其他计算图形式,提升模型性能。
  • 实现 C Codegen 需要生成函数声明、函数调用和分配中间数组。
  • CodegenC 类用于遍历子图并生成 C 代码,支持多种算子。
  • ExampleJson 计算图表征可以通过自定义 Codegen 生成,并实现自定义 runtime 模块。
  • 自定义 runtime 模块需要实现 GetFunction、SaveToBinary 和 LoadFromBinary 等函数。
  • 用户可以通过 Python API 加载和创建自定义模块,支持直接从文件创建模块。

延伸问答

Apache TVM 是什么?

Apache TVM 是一个支持多种硬件的深度学习编译框架,旨在简化高性能模型在不同设备上的实现。

如何为硬件实现自己的 Codegen?

硬件厂商可以通过开发手册指导,轻松实现自己的 Codegen,并将其注册为 Relay 后端编译器。

用户如何生成 C 代码?

用户可以实现一个能为子图生成 C 代码的 Codegen,并将生成的 C 源代码模块集成到 TVM runtime 模块中。

CodegenC 类的作用是什么?

CodegenC 类用于遍历子图并生成 C 代码,支持多种算子。

如何实现自定义 runtime 模块?

用户需要实现 GetFunction、SaveToBinary 和 LoadFromBinary 等函数,以创建自定义 runtime 模块。

ExampleJson 计算图表征是什么?

ExampleJson 是一种简单的计算图表征,适用于没有控制流的计算图,用户可以通过自定义 Codegen 生成。

➡️

继续阅读