"); //-->
背景

图 1 Attention 结构示例
由于在 Transformer 模型中,Reshape 和 Transpose 操作出现的概率很高,并且对于大部分加速器来说,都没有相应的硬件单元来直接支持。因此,高效的支持 Reshape 和 Transpose 就成为 Transoformer 模型优化的关键。
征程 6 平台高效支持 Reshape 和 Transpose
架构介绍

图 2 征程 6 芯片架构图
如图 2 所示,征程 6 芯片为异构架构设计,包含 Tensor 单元、Vector 单元以及 Scalar 单元。Tensor 单元中又包含多种计算单元,如 TAE、VAE、AAE 等,每个计算单元对数据的排布格式(即 layout)有不同的要求。因此,芯片中有强大的 layout 转换单元来支持数据在不同 layout 之间转换。Reshape 和 Transpose 即可利用该 layout 转换单元来高效实现。
下面介绍一下当前编译器为了高效支持 Reshape 和 Transpose,所做的一些优化手段。一方面,将 Reshape 和 Tranpose 转换为硬件高效支持的操作,另一方面,对 Reshape 和 Transpose 实现高效的 Tiling 支持,从而充分的利用数据局部性,提高并行性。
Reshape 和 Transpose 的变换
一般情况下,对于加速器来说,不同的硬件计算单元会设置不同的 layout(同 cutlass 中的 layout 概念),从而实现相应的并行度。为了更好的衔接不同的硬件计算单元,也会有一个部件来支持不同 layout 之间的高效转换。这里,我们会利用硬件对于不同 layout 之间的高效转换以及 View 操作来实现 Reshape 和 Transpose 操作。
下面通过例子分别介绍一下如何通过 layout 之间的转换和 View 操作来实现 Reshape 和 Transpose。
Layout 表示
通过 block 和 order 两组信息来表示一个层次化的 layout,其中 block 和 order 都是层次化的。

图 3 tensor<4x8xsi8>的 layout 的图示
对于 tensor<4x8xsi8, block = "2W2H", order = [1, 0]>来说,上图是实际数据存储的图示。其中 block 表示内层数据的排布方式,上述例子中 block = "2W2H"表示对于内层数据来说,第一个维度在内,第二个维度在外。order 表示 block 之间的排布方式,order = [1, 0]表示第一个维度的 block 排布在内,第二个维度的 block 排布在外。
Reshape 变换
给定 IR 为
%1 = "hbir.reshape"(%0) <{shape = [4, 32, 128]}> : (tensor<128x128xsi8) -> tensor<4x32x128xsi8>通过将输入 layout 设置为 {block = "128W", order = [0, 1]},输出 layout 设置为 {block = "128W", order = [0, 1, 2]},则可以将该 reshape 转换成没有开销的 View 操作,即变换后的 IR 为
%1 = "hbir.view"(%0) <{}> : (tensor<128x128xsi8, layout = {block = 128W, order = [0, 1]}>) -> tensor<4x32x128xsi8, layout = {block = 128W, order = [0, 1, 2]}>Transpose 变换
同理,对于 Transpose 来说,也可以通过这种方式将其转换为没有开销的 View 操作
给定 IR 为
%1 = "hbir.transpose"(%0) <{perm = [1, 0, 2]}> : (tensor<4x32x128xsi8>) -> tensor<32x4x128xsi8>变换后的 IR 为
%1 = "hbir.view"(%0) <{perm = [1, 0, 2]}> : (tensor<4x32x128xsi8, {block = 128C, order = [0, 1, 2]}>) -> tensor<32x4x128xsi8, {block = 128C, order = [1, 0, 2]}>Reshape 和 Transpose 的 Tiling
Tiling 的收益主要在两个地方:提高局部性和并行性。相对于普通的算子来说,Reshape 和 Transpose 的 tiling 处理相对复杂一些。例如,对于 perm = [1, 0, 2]的 transpose 来说,输出在 H 方向 tiling,对应的输入需要在 W 方向 tiling。因此,对于包含 reshape 和 tranpose 操作的子图来说,需要记录每个 op 输出的 tiling 信息,而不是只用一个 tiling 方向来表示整个子图的 tiling。

图 4 Reshape 和 Tranpose 子图的 tiling
如上图 4 所示,对于子图中 linear,reshape 和 transpose 输出来说,tiling 方向均不同。由于有 reshape 操作将一个维度映射成两个维度,因此需要两次 tiling,才能将 reshape 的维度拆分完。
总结
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
基于LPC2138的血压测量算法开发平台电路图
PID算法
加密算法之MD5算法
求FSK信号的解调算法,主要是铁路上的移频信号!
vxwokrs下静态图像压缩算法(上)
有关指纹算法
计算机科学与技术反思录(2)
地平线征程 6 系列集成 Cadence Tensilica Vision DSP,实现规模化量产,合作加速智能驾驶解决方案部署
自动驾驶的现状与未来(节选)
曲面显示屏取代传统汽车挡风玻璃
高阶智驾要落地,线控底盘为什么必须执行得准
简单实用的单片机CRC 快速算法
特斯拉监督版FSD加入中国市场
数字PID控制算法之一
2035年自动驾驶出租车市场规模将达1680亿美元
ADI:传感技术助力未来自动驾驶的发展
携手ADI赢得未来
CRC算法原理及C语言实现
无线传感器网络低功耗分簇路由算法设计
掘金自动驾驶,不要把大坑当机会
采用Mean-Shift和Camshift算法相结合的火焰视频图像跟踪设计
面向算法硬件加速的FPGA实现方法
自动驾驶正推动汽车行业加速布局人形机器人
76-81GHz自动驾驶CMOS RADAR
Ouster推出 Rev8 OS 激光雷达系列 原生彩色激光雷达正式落地
[转帖]us/os就绪表的维护算法分析
目标跟踪算法在红外热成像跟踪技术上的应用
加快实现自动驾驶(完整小组讨论)
数字PID控制及其改进算法的应用
实时训练驾驶人工智能