Transformer模型在J6平台上的高效支持

背景

相对于传统 CNN 模型来说,Transformer 模型的最大的一个特点就是灵活性。这个灵活性主要体现在模型中穿插大量的数据重排操作,即 Reshape 和 Transpose。如下图 1 所示,对于一个典型的 Attention 结构来说,Reshape 和 Transpose 操作的数量大概可以占到所有操作的一半。

img

图 1 Attention 结构示例

由于在 Transformer 模型中,Reshape 和 Transpose 操作出现的概率很高,并且对于大部分加速器来说,都没有相应的硬件单元来直接支持。因此,高效的支持 Reshape 和 Transpose 就成为 Transoformer 模型优化的关键。

征程 6 平台高效支持 Reshape 和 Transpose

架构介绍

img

图 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 都是层次化的。

img

图 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。

img

图 4 Reshape 和 Tranpose 子图的 tiling

如上图 4 所示,对于子图中 linear,reshape 和 transpose 输出来说,tiling 方向均不同。由于有 reshape 操作将一个维度映射成两个维度,因此需要两次 tiling,才能将 reshape 的维度拆分完。

总结

编译器通过将 reshape 和 transpose 转换为 layout 转换操作和 view 操作,以及实现对 reshape 和 transpose 精细的 tiling,高效的原生支持 transformer 模型。相比于优化前,编译出的模型性能提升接近 40%。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/884330.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3.1 IMU板级硬件设计----硬件设计指南

本系列文章是笔者总结多年工作经验,结合理论与实践进行整理备忘的笔记。希望能在帮助自己温习整理避免遗忘的同时,也能帮助其他需要参考的朋友。笔者会不定期进行查漏补缺。如有谬误,欢迎大家进行指正。 一、设计要点 1.IMU的贴片位置远离大电流路径、射频信号,通信信号走线…

leetcode hot 01

解题思路:如果两个链表在某一点相交,那么那一点之后的node也都会相同,长度也相同。所以,我们先遍历获取对应每一条链表的长度,然后让长的链表先走两个链表长度之差的距离,然后再同时起步,每个节点进行对比,能不能找到相同的。 /*** Definition for singly-linked list.…

【APP逆向33】root监测与跳过(基础版,Java层hook)

前言:有些App在root过的手机上运行不了,会弹出安全提示,我们在逆向时必须跳过才能进行下一步操作,root监测主要有两种方式,1.JAVA层(hook跳过) 2.so层(需要定制安卓系统,AOSP)1.下面我们来看一个root监测在JAVA层的,现象2.反编译后,查找关键字3.hook跳过Java.perform(f…

P1364 医院设置——图最短路径问题(Floyd算法)

题目描述 设有一棵二叉树,如图:其中,圈中的数字表示结点中居民的人口。圈边上数字表示结点编号,现在要求在某个结点上建立一个医院,使所有居民所走的路程之和为最小,同时约定,相邻接点之间的距离为 \(1\)。如上图中,若医院建在 \(1\) 处,则距离和 \(=4+12+2\times20+2…

本地部署deepseek后,部署可视化界面

首先下载doctor Docker: Accelerated Container Application Development 下载教程和上次教程相同,如果希望下载到其他盘可以使用命令下载 start /w "" "Docker Desktop Installer.exe" install --accept-license --installation-dir="D:\docker&qu…

9.7.3 损失函数

回忆一下,super(MaskedSoftmaxCELoss, self).forward就相当于直接计算损失函数,这是nn.Module的普遍做法 nn.CrossEntropyLoss的输入要求如下unweighted_loss的形状是(batch_size, num_steps),也就是对应每一个样本的每一步的直接的交叉熵损失

65R180-ASEMI逆变器专用MOS管65R180

65R180-ASEMI逆变器专用MOS管65R180编辑:ll 65R180-ASEMI逆变器专用MOS管65R180 型号:65R180 品牌:ASEMI 封装:TO-220F 最大漏源电流:21A 漏源击穿电压:650V 批号:最新 RDS(ON)Max:180mΩ 引脚数量:3 沟道类型:超洁MOS管 芯片尺寸:MIL 漏电流: 恢复时间:ns 芯片…

用户增长解读

用户增长=用户+增长 用户 潜在用户:用户有需求,恰好你能满足需求时,他是你的潜在用户 真正用户:用户在平台注册、浏览、下单时,他是你的用户 流水用户:用户逐渐忘记平台,也不来平台时,他就不再你的用户 平台、消费者、门店,三者的关系很模糊,平台直接面对消费者,消费…

Markdown常用语法整理

Markdown常用语法整理 一、标题 h1 一级标题下面加=== h2 二级标题下面加--- h3 h4 h5 二、文字高亮这段文字将被高亮显示...三、插入链接或者图片 链接是前面中括号后面小括号:点击跳转百度图片是链接前面加感叹号:四、列表 无序列表(*或+或-),如:黄瓜 玉米 茄子黄瓜 玉…

P1121 环状最大两段子段和

链接 https://www.luogu.com.cn/problem/P1121 题目思路这个O(n)的思路很好:https://www.cnblogs.com/kamimxr/p/11438701.html。 关键思路: 答案分两种情况,一种是选择的两段均不跨越n到1(也就是环),另一种是选择的两段跨过了环; 如果均不跨越环,那么也就是意味着这是一道…

muduo网络库核心代码阅读(Thread,EventLoopThread,EventLoopThreadPool)(4)

muduo网络库核心设计为one loop one thread,即一个线程一个事件循环。其中,主Reactor负责监听新连接,并将新连接平均分配到从Reactor中,而从Reactor则对分配到其上的用户进行io交互,接收并处理用户发来的数据,包括消息的回复(实际上,在使用中需要手动设置Reactor线程的…