论文解析——Full Stack Optimization of Transformer Inference: a Survey

news2024/9/22 13:41:35

作者及发刊详情

摘要

正文

主要工作贡献

这篇文章的贡献主要有两部分:

  1. 分析Transformer的特征,调查高效transformer推理的方法
  2. 通过应用方法学展现一个DNN加速器生成器Gemmini的case研究

1)分析和解析Transformer架构的运行时特性和瓶颈

2)Transformer推理的硬件架构

3)对特定Transformer架构的优化策略,比如剪枝和量化

4)Transformer架构下操作的映射和调度,以及相关挑战

5)通过自动化的神经架构搜索过程,设计和调整transformer架构,使其硬件更加高效

Transformer模型架构和性能瓶颈

transformer的基本架构

Transformer架构包含两个模块:MHA和FFN
在这里插入图片描述Transformer架构的参数如下:
在这里插入图片描述

对Transformer架构的输入序列包含l个token,每个值都由一个d维度的向量表示,构成了 d ∗ l d*l dl的矩阵。token可以是一个词或一个句子片段。

MHA的计算特征

MHA有三种不同的权重 W Q W_Q WQ W K W_K WK W V W_V WV,具体执行流如图1所示,这些权重将会产生三种不同的激活,每种激活会被分成h个块(chunk,有隐藏维度d/h),因此这些块都被分成了h个不同的注意力头。q块和k块沿着隐藏层相乘,生成 l ∗ l l*l ll 大小的激活矩阵,这些激活矩阵经过softmax操作,与v块相乘,得到attention头的激活,然后h个head组合生成结果 W o u t W_{out} Wout。每阶段的计算结果如Table2所示。最终线性层的输出经过残差链接和层归一化生成MHA模块的输出。

MHA总共有6个线性操作,其中4个是权重到激活的矩阵乘( W Q W_Q WQ W K W_K WK W V W_V WV W o u t W_{out} Wout),另外两个是激活到激活的矩阵乘( q u e r y ∗ k e y query*key querykey a t t e n t i o n . s c o r e ∗ v a l u e attention.score*value attention.scorevalue),本文将前者称为投影(projection),后者称为激活到激活矩阵乘。

FFN包含两个线性层操作, d F F N d_FFN dFFN通常是 d d d的四倍,在两个线性层间有一个非线性层。

在这里插入图片描述

非线性操作的特征

非线性操作,包括Softmax, LayerNorm, 和 GELU需要片外计算的支持,虽然全部操作中占据了较小部分,但比矩阵乘更具挑战,如果处理不当将会产生额外的开销。

在有效利用临时内存和高效计算方面提出了挑战

需要在运行时传递所有的输入值,这些值都会保存在临时存储中。
比如softmax操作包括求指数操作、跨序列长维度的求和、每个指数向除以求和结果的归一化操作,需要解决指数溢出问题。
计算LayerNorm函数还需要跨隐藏维度多次传递整个输入值,先计算平均值,再计算标准差,然后再使用层归一化

encoder和decoder架构

encoder可以并行处理输入序列
encoder-only适合用于自然语言理解任务(sentiment analysis、sentence similarity analysis)
decoder一次只能推理出一个token,适合用于生成式任务
在这里插入图片描述

产生token的共同优化方法:在后续的迭代中,缓存和复用之前生成的token中间的K和V值

生成的token后继续传入到decoder的输入,复用可以节省计算时间。

模型的算力密度

矩阵乘在encoder-only和decoder-only中消耗了99%的FLOPS。
在这里插入图片描述在这里插入图片描述

模型优化

硬件设计

参考文献

这是一篇关于Transformer推理的全栈技术综述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SketchUp如何阵列?

sketchup如何阵列?请看下面方法。 方法 打开SketchUp。 以默认人物为例。 按M,选中人物,再按住Ctrl移动鼠标(不要点击鼠标键) 按键盘数字键输入距离,按回车,不要动鼠标。 按*10设置阵列数。 按…

C++视觉开发 四.手势识别

本章记录传统手势识别,在表示0-5六个数值时的识别问题。例如识别剪刀石头布,手势,以及其表示的动作。在识别时将手势中的凹陷区域称为凸缺陷,其个数作为识别的重要依据。 需要注意,在凸缺陷个数为0时,无法…

如何解决模型的灾难性遗忘问题?清华大学提出新方法

获取本文论文原文PDF,请在公众号【AI论文解读】留言:论文解读 探索连续学习中的新方法 在人工智能领域,尤其是在语言模型(LM)的发展过程中,连续学习(CL)始终是一个挑战。传统的学习…

【HTML入门】第四课 - 换行、分割横线和html的注释

这一小节,我们继续说HTML的入门知识,包括换行、横线分割以及注释(html的注释)。 目录 1 换行 2 分割横线 3 html注释 1 换行 html中分为块元素和行内元素。这一小节呢,先不说这些元素们,我们先说一下换…

贝叶斯估计(1):期末大乱炖

写在前面! 1 先验分布和后验分布 三种信息:总体信息、样本信息、先验信息 总体信息:“总体是正态分布”;样本信息:总体抽取的样本提供的信息,是最新鲜的信息;先验信息:在抽样之前就…

从OpenAI停服看中国市场:国产替代崛起的机遇与挑战

一、OpenAI 停服事件背景 OpenAI 自 2020 年推出 GPT-3 以来,在全球范围内引起了极大的反响。其强大的自然语言处理能力使其成为许多企业和开发者的首选工具。然而,2024 年 6 月 25 日,许多中国用户收到了一封来自 OpenAI 的邮件&#xff0c…

c++之命名空间详解(namespace)

引例 在学习之前我们首先了来看这样一个情形: 在c语言下,我们写了两个头文件:链表和顺序表的。我们会定义一个type(typedef int type)方便改变数据类型(比如将int改成char),来做到整体代换。 但是我们两个头文件里面…

精益生产培训公司:从混乱到高效,只需一步!

大家有没有觉得工作中的琐事总是让你忙得团团转,却总是达不到预期的效果?其实,很多人都遇到过类似的困扰。今天张驰咨询想跟你们分享一个能彻底改变这种情况的方法——精益生产。其实它并不复杂,而是非常实用和高效! …

Xilinx FPGA DDR4 接口的 PCB 准则

目录 1. 简介 1.1 FPGA-MIG 与 DDR4 介绍 1.2 DDR4 信号介绍 1.2.1 Clock Signals 1.2.2 Address and Command Signals 1.2.3 Address and Command Signals 1.2.4 Data Signals 1.2.5 Other Signals 2. 通用存储器布线准则 3. Xilinx FPGA-MIG 的 PCB 准则 3.1 引脚…

通过高德地图 JS API实现单击鼠标进行标注

效果图: 核心代码: <template><a-modal title="选择地图所在位置" :width="width" :visible="visible" @ok="handleOk" @cancel="handleCancel" cancelText="关闭"><div class="location-…

java —— JSP 技术

一、JSP &#xff08;一&#xff09;前言 1、.jsp 与 .html 一样属于前端内容&#xff0c;创建在 WebContent 之下&#xff1b; 2、嵌套的 java 语句放置在<% %>里面&#xff1b; 3、嵌套 java 语句的三种语法&#xff1a; ① 脚本&#xff1a;<% java 代码 %>…

白嫖A100活动来啦,书生·浦语大模型全链路开源体系

扫码参加即可获得&#xff1a; 第一节 书生浦语大模型全链路开源体系 书生浦语大模型的开源历程。 从模型到应用的典型流程 书生浦语的开源体系&#xff0c;包含从数据、预训练、微调、部署、评测、应用等环节

一手洞悉泰国slot线上游戏投放本土网盟CPI计费广告优势

一手洞悉泰国slot线上游戏投放本土网盟CPI计费广告优势 ​在泰国这个拥有独特文化背景和审美观念的国家&#xff0c;Slots游戏以其丰富的玩法和刺激的体验迅速赢得了玩家们的喜爱。然而&#xff0c;要在竞争激烈的市场中脱颖而出&#xff0c;有效的推广策略显得尤为重要。本土…

消防认证-防火窗

一、消防认证 消防认证是指消防产品符合国家相关技术要求和标准&#xff0c;且通过了国家认证认可监督管理委员会审批&#xff0c;获得消防认证资质的认证机构颁发的证书&#xff0c;消防产品具有完好的防火功能&#xff0c;是住房和城乡建设领域验收的重要指标。 二、认证依据…

C++入门基础篇(1)

欢迎大家来到海盗猫鸥的博客—— 断更许久&#xff0c;让我们继续好好学习吧&#xff01; 目录 1.namespace命名空间 命名空间的存在价值&#xff1a; 命名空间的定义&#xff1a; 命名空间的使用&#xff1a; 2.C输入输出函数 使用&#xff1a; 3.缺省参数 4.函数重载…

静脉分割YOLOV8-SEG

静脉分割&#xff0c;YOLOV8*SEG资源-CSDN文库 首先使用YOLOV8-SEG训练&#xff0c;得到PT模型&#xff0c;然后转换成ONNX&#xff0c;OPENCV的DNN调用&#xff0c;从而摆脱PYTORCH依赖&#xff0c;支持C,PYTHON,ANDROID调用

Spring AOP源码篇二之 代理工厂ProxyFactory学习

了解AspectJ表达式以及PointCut、Advice、Advisor后&#xff0c;继续学习Spring AOP代理工厂 AspectJ表达式参考&#xff1a;Spring AOP之AspectJ表达式-CSDN博客 PointCut、Advice、Advisor参考&#xff1a;Spring AOP源码篇一之 PointCut、Advice、Advisor学习-CSDN博客 简单…

昇思13天

ResNet50迁移学习 ResNet50迁移学习总结 背景介绍 在实际应用场景中&#xff0c;由于训练数据集不足&#xff0c;很少有人会从头开始训练整个网络。普遍做法是使用在大数据集上预训练得到的模型&#xff0c;然后将该模型的权重参数用于特定任务中。本章使用迁移学习方法对Im…

2.5 C#视觉程序开发实例1----IO_Manager实现切换程序

2.5 C#视觉程序开发实例1----IO_Manager实现切换程序 1 IO_Manager中输入实现 1.0 IO_Manager中输入部分引脚定义 // 设定index 目的是为了今后可以配置这些参数、 // 输入引脚定义 private int index_trig0 0; // trig index private int index_cst 7; //cst index priva…

简单介绍 Dagger2 的入门使用

依赖注入 在介绍 Dagger2 这个之前&#xff0c;必须先解释一下什么是依赖注入&#xff0c;因为这个库就是用来做依赖注入的。所以这里先简单用一句话来介绍一下依赖注入&#xff1a; 依赖注入是一种设计模式&#xff0c;它允许对象在运行时注入其依赖项。而不是在编译时确定&a…