文章      动态     相关文章     最新文章     手机版动态     相关动态     |   首页|会员中心|保存桌面|手机浏览

nacjhe

http://keair.bhha.com.cn/comnacjhe/

相关列表
文章列表
  • 暂无文章
推荐文章
联系方式
  • 联系人:赵先生
  • 电话:18929305874
.net开发网站的优点/google官网浏览器
发布时间:2024-12-21        浏览次数:3        返回列表

本篇文章译自英文文档 Making your Hardware Accelerator TVM-ready with UMA

.net开发网站的优点/google官网浏览器

作者是 Michael J. Klaiber,Christoph Gerum,Paul Palomero Bernardo。

更多 TVM 中文文档可访问 →TVM 中文站

本节介绍通用模块化加速器接口(UMA)。UMA 提供了一个易用的 API 来将新的硬件加速器集成到 TVM 中。

本教程详细介绍了如何利用 UMA 使得你的硬件加速器可直接用于 TVM。虽然这个问题没有万能的解决方案,但 UMA 旨在提供一个稳定的纯 Python API,从而将许多种类的硬件加速器集成到 TVM 中。

本教程将通过三个逐渐复杂的用例来介绍 UMA API。这些用例引入了三个模拟加速器 Vanilla、Strawberry 和 Chocolate,并用 UMA 将它们集成到 TVM 中。

Vanilla 是一个由 MAC 数组组成的简单加速器,没有内部存储器。它只能处理 Conv2D 层,所有其他层都在 CPU 上执行,同时也协调 Vanilla。 CPU 和 Vanilla 共享内存。

Vanilla 的 C 接口 vanilla_conv2dnchw(…) 用于执行 Conv2D 操作(包括 same-padding,它接收指向输入特征图、权重和结果的指针,以及 Conv2D 的维度oc、iw、ih、ic、kh 和 kw

 

脚本 uma_cli 为新的加速器创建带有 API(UMA-API)调用的代码骨架。

Vanilla 的使用方式如下(–tutorial vanilla 添加了本部分教程所需的所有附加文件

 

uma_cli.py 在 vanilla_accelerator 目录中生成这些文件。

 

Vanilla 后端

vanilla 生成的后端位于 vanilla_accelerator/backend.py

 

定义迁移模式

为了指定 Conv2D 迁移到 Vanilla,vanilla_accelerator/patterns.py 中将其描述为 Relay 数据流模式(DFPattern)。

 

为了将输入计算图的 Conv2D 算子映射到 Vanilla 的底层函数调用 vanilla_conv2dnchw(…),在 VanillaAcceleratorBackend 中注册了 TIR pass VanillaAcceleratorConv2DPass(稍后讨论)。

Codegen

文件 vanilla_accelerator/codegen.py 定义了静态 C 代码,它被添加到生成的结果 C 代码(由 gen_includes 中的 TVM 的 C-Codegen 生成)中,其目的是包含 Vanilla 的底层库 vanilla_conv2dnchw()。

 

如上面的 VanillaAcceleratorBackend 所示,用 self._register_codegen 可将其注册到 UMA。

 

构建神经网络并在 Vanilla 上运行

为了演示 UMA 的功能,将为单个 Conv2D 层生成 C 代码,并在 Vanilla 加速器上运行。文件 vanilla_accelerator/run.py 提供了一个使用 Vanilla 的 C-API 运行 Conv2D 层的 demo。

 

运行 vanilla_accelerator/run.py,将以模型库格式(MLF)生成输出文件。

输出结果

 

查看生成的文件

输出结果

 

若要评估生成的 C 代码,请查看 codegen/host/src/default_lib2.c。

 

在 default_lib2.c 中,可以看到生成的代码调用了 Vanilla 的 C-API,然后执行了一个 Conv2D 层

 
 

即将上线

即将上线

若本教程不适合你的加速器,请将你的需求添加到 TVM 论坛中的 UMA 帖子 中。我们很乐意通过扩展本教程来提供更多指导,例如如何利用 UMA 接口使得更多种类的 AI 硬件加速器可直接用于 TVM。

参考​
[UMA-RFC]UMA:通用模块化加速器接口,TVM RFC,2022 年 6 月。

[DFPattern]Relay 中的模式匹配

下载 Python 源代码:uma.py

下载 Jupyter Notebook:uma.ipynb