发表博客之:transformer 架构 推理时候运算流程详细讲解,以及变长推理支持,小白都可以看得懂,AI推理工程师必备技能!

文章目录

  • [发表博客之:transformer 架构 推理时候运算流程详细讲解,以及变长推理支持,小白都可以看得懂,AI推理工程师必备技能!](https://cyj666.blog.csdn.net/article/details/138439826)
    • 总结一下
    • 高性能变长推理

发表博客之:transformer 架构 推理时候运算流程详细讲解,以及变长推理支持,小白都可以看得懂,AI推理工程师必备技能!

  • 大家都知道,这些大模型都是一些单元如此的重复堆叠而已,那么这个单元到底长什么样子呢?
  • 在这里,本张大帅就给你们解释的一清二楚!如果看完了我说的,你还是糊里糊涂的,请在评论区留言来打我!
  • 我们姑且称呼这个单元叫做transfomer block吧!

  • 首先这个transfomer block有一个输入,这个输入的shape是啥呢?
    • 那就是[batch_size, seq_len, hidden_dim]
    • batch_size就是表示批量大小啊!
    • seq_len就是序列长度啊!
    • hidden_dim这个大家意会一下啊!
  • 但是要注意啊,网友们,每个batch的seq_len其实常常是不一样的,这个你在心里面要记得注意啊
    • 例如batch0其实seq_len是10,batch1的seq_len是20,batch2的seq_len是30
    • 但是我们这里把他写成统一的按照最大长度30,
    • 但是你需要在心里知道batch0其实有效长度是10哦,batch1的有效长度是20!

  • transfomer block里面的第一个运算是啥呢?
    • 是个layer_norm啦!这个Op是不改变tensor的shape的!
  • 然后是一个Fc Op,那么权重的shape是啥呢?其实就是[hidden_dim , 3 * hidden_dim]
    • 也就是经过这个Op后,输出tensor的shape是[batch_size, seq_len, 3 * hidden_dim]
  • 这个难吗?这个很简单啊!
  • 也就是说目前
  • 各位看官你们看,上面的难嘛?一点也不难啊!

  • 下面继续运算,拿着这个[batch_size, seq_len, 3 * hidden_dim]的tensor继续往下运算,下面的运算是个很牛的运算方式
  • 首先将它split成三份,QKV,shape分别都是[batch_size, seq_len, hidden_dim]
  • 然后三个东西都reshape成[batch_size, seq_len, num_head, head_dim]
    • 也就是num_head * head_dim = hidden_dim
  • 到目前为止,各位看官还有疑惑吗?我相信都是没有的!
  • 然后再将QKV都transpose成[batch_size, num_head, seq_len, head_dim]
  • 接下来就是最关键的点,attention运算!
  • 先用Q*K得到的tensor shape是[batch_size, num_head, seq_len, seq_len]
    • 然后除以一个sqrt(head_dim)
    • 接着来一个softmax,得到attention_weight
    • 也就是attn_weight = softmax(Q*K / sqrt(head_dim))
    • 有的时候啊,还会多一个attn_mask,他的shape呢就是[batch_size, num_head, seq_len, seq_len]
    • 所以attn_weight = attn_weight + attn_mask
    • 至此我们得到了最终的attn_weight!
  • 最后再用attn_weight和V进行矩阵乘法得到最终的输出tensor!
    • 最终tensor的shape是[batch_size, num_head, seq_len, head_dim]
    • 最后记得把他transpose成[batch_size, seq_len, num_head, head_dim]
    • 然后再reshape成[batch_size, seq_len, hidden_dim]
  • 至此上面的运算过程就完成了!
  • 我们把他叫做attention计算过程!
  • 目前图变成下面这样啦!

  • attention层出来之后的shape就是[batch_size, seq_len, hidden_dim]
  • 然后呢,再来一个全联接层,权重shape是[hidden_dim,hidden_dim]
  • 所以出来的tensor shape还是[batch_size, seq_len, hidden_dim]
  • 至此,模型的图如下图所示。
  • 最后,来一个牛逼哄哄的add操作
  • 图变成下面这样啦!

各位老板请注意,上面的两个fc模块到底有没有bias,取决于每个模型的不同,有可能有,也有可能没有!

  • 下面的几个操作其实都是简单的啦!
  • 首先再来一个layer_norm操作!然后接着是一个fc操作!权重是[hidden_dim, intermediate_size]
    • 这个 intermediate_size 一般都是比hidden_dim大很多的!
    • 然后就是激活啦!
    • 然后又是另一个fc,权重是[intermediate_size, hidden_dim]
    • 最后是一个性感的Add操作
  • 也就是下面的图片的这样,至此我们就把到底啥是transformer block给讲完了!

总结一下

  • transformer block的输入是[batch_size, seq_len, hidden_dim],输出也是这么大,因此可以很方便的堆叠起来,例如把40个这样的block串起来!

高性能变长推理

  • 看官你好,上面的 transformer block的输入shape是[batch_size, seq_len, hidden_dim],但是由于不同的batch的seq_len是不一样的,因此这样搞肯定比较冗余!
  • 例如此时有3个batch,seq_len分别是10,20,30,原本的方案是将输入的shape搞成[3,30,hidden_dim]
  • 我们观察transformer block发现一个细节,也就是除了compute_attn模块外,
    • 其他的计算单元都是不操纵batch和seq_len维度的!例如layer_norm,fc等
    • 而只操纵hidden_dim维度的!
  • 也就是说,对于fc op,我们可以将输入只看成2维,对于layer_norm也是如此
    • 对于add操作,我们甚至可以将输入只看成1维

  • 这样我们只需要将输入搞成[10+20+30, hidden_dim]这么大的输入即可!
  • 但是在算compute_attn模块时候,我们需要额外传入seq_lens=[10,20,30]即可!
  • 如此就实现了变长推理了!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

DevicData-P-XXXXXX勒索病毒有什么特点,如何恢复重要数据?

DevicData-P-XXXXXXXX这种新型勒索病毒有什么特点? DevicData-P-XXXXXXXX勒索病毒的特点主要包括以下几点: 文件加密:该病毒会搜索并加密用户计算机上的重要文件,如文档、图片、视频等,使其无法正常打开。这是通过强…

IoTDB 入门教程 问题篇②——RPC远程连接IoTDB服务器失败

文章目录 一、前文二、发现问题三、分析问题四、检查6667端口是否监听所有IP五、检查ECS云服务器的安全组是否允许六、检查Linux防火墙是否允许 一、前文 IoTDB入门教程——导读 二、发现问题 使用本地IP127.0.0.1可以连接IoTDB服务器使用远程IPxx.xx.xx.xx却连接不到。提示你…

抖音小店怎么运营操作,无货源正确做店方式,新手就看这一篇

大家好,我是电商笨笨熊 当前抖店还能做无货源模式吗? 当然可以。 近两年由于平台对于无货源的打击,很多人开始怀疑,无货源模式在抖店还能行得通吗? 抖店这个项目我们做了四年多的时间,无货源模式也是&a…

双fifo流水线操作——verilog练习与设计

文章目录 一、案例分析二、fifo_ctrl模块设计2.1 波形设计:2.2 代码实现2.2.1 fifo_ctrl2.2.2 顶层文件top_fifo_ctrl(rx和tx模块省略)2.2.3 仿真文件tb_fifo_ctrl 2.3波形仿真 一、案例分析 案例要求:写一个 fifo 控制器&#x…

vivado Aurora 8B/10B IP核(12)- Setp By Step搭建FPGA工程

Step1:任意创建一个新的空的工程(创建工程的具体工程如果还不清楚的看我们教程第一季部分), 并且进入IP CORE列表 右击Customize ip Step2:配置 IP CORE-Core options Step3:配置 IP CORE-GT Selections Step4:配置 IP CORE-Shared Logic 为 …

深入解析Python中的`add_argument`用法

深入解析Python中的add_argument用法 在Python编程中,add_argument通常与命令行参数解析库argparse有关。这个库主要用于编写用户友好的命令行接口,其核心功能之一就是通过add_argument方法来指定程序可以接受哪些命令行参数。本篇博客将详细介绍argpar…

badKarma:一款功能强大的网络侦查GUI工具

关于badKarma badKarma是一款开源的网络侦查工具,该工具基于Python 3开发,提供了友好的图形化用户接口,可以帮助广大渗透测试人员在网络基础设施安全审计过程中执行网络侦查任务。 badKarma是一个模块化工具,基于python3 GTK套件…

(centos)yum安装mysql8.4

1.MySQL官方已经提供了适用于不同Linux发行版的预构建软件包,包括适用于CentOS的Yum Repository MySQL :: MySQL Community Downloads 2.在/usr/local文件夹下创建mysql文件夹,将下载的rpm文件放到目录下 3.执行安装命令 yum install mysql-community-…

算法打卡day41

今日任务: 1)198.打家劫舍 2)213.打家劫舍II 3)337.打家劫舍III 4)复习day16 198.打家劫舍 题目链接:198. 打家劫舍 - 力扣(LeetCode) 你是一个专业的小偷,计划偷窃沿街…

网安笔记(纯兴趣,随缘更新)

对于千锋教育的网安课程的笔记 (一)虚拟机环境搭建 01虚拟机概述 传统运行模式:一台计算机同时只能运行一个操作系统 虚拟机运行架构: 1.寄生架构 (实验环境、测试环境) • 虚拟机作为应用软件安装在操作系统上 • 可以在此应用软件上安装多个操作系统…

Docker部署nginx并且实现https访问

实验环境: 在已有的docker环境和nginx镜像的基础上进行操作 1、生成私钥 (1)openssl genrsa -out key.pem 2048 生成证书签名请求 (CSR) 并自签证书: (2)openssl req -new -x509 -key key.pem -out cert.pem -day…

招了个牛逼的DBA,问题少了一半,老油条慌了...

📢📢📢📣📣📣 作者:IT邦德 中国DBA联盟(ACDU)成员,10余年DBA工作经验, Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主,全网粉丝10万 擅长主流Oracle、My…

带环链表和链表的复制,检验你链表的学习情况

前言:带环链表是链表中的经典问题,需要一定的数理思维,一定要掌握其来龙去脉,这样可以加深理解。本文主要讲解一下个人对带环链表的理解。 带环链关的OJ题 1.判断链表是否带环 题目: 141. 环形链表 给你一个链表的头…

并发-线程的 6 个状态(生命周期)

目录 状态解释 状态间的转化 状态解释 状态间的转化 根据Thread类中定义的枚举类型State值,可以看出有6种状态:可以通过 Thread.getState 方法获得线程的状态NEW(新建)New:新建了Thread类对象,但是没有启…

软设之进程资源图

进程资源图有两个要素,一个是P,也就是进程,一个是R,可以用R1或者R2等表示,表示资源。 R一般是一个矩形里面有几个圆圈,有几个圆圈就表示有几个资源 这里用R1表示资源,P表示进程 R1P 表示资源…

Tomcat启动闪退怎么解决(文末附终极解决方案)

AI是这么告诉我的 Tomcat启动时出现闪退问题可能由多种原因引起,以下是解决此类问题的一些通用方法: 检查环境变量: 确保已经正确设置了JAVA_HOME和JRE_HOME环境变量,并指向正确的Java安装路径。将Java的bin目录添加到系统的PATH…

频谱模拟器

频谱模拟器,特别是模拟频谱仪,是一种基于特定原理的频谱分析工具。以下是对其的详细介绍: 工作原理: 模拟频谱仪的工作原理主要基于频率转换原理,包括两个关键步骤:信号混频和滤波分析。 信号混频&#xf…

《Fundamentals of Power Electronics》——升压隔离型变换器、SEPIC隔离型变换器

以下是升压型隔离变换器的相关知识点: 升压型隔离变换器可以通过互换降压型隔离变换器的电源与负载的位置得到。升压型隔离变换器有许多种结构,此处简短的讨论两种情况。这些转换器主要使用在高压电源和低谐波整流器中。 图6.36所示是一种全桥型电路结…

【设计模式】13、template 模板模式

文章目录 十三、template 模板模式13.1 ppl13.1.1 目录层级13.1.2 ppl_test.go13.1.3 ppl.go13.1.4 llm_ppl.go13.1.5 ocr_ppl.go 十三、template 模板模式 https://refactoringguru.cn/design-patterns/template-method 如果是一套标准流程, 但有多种实现, 可以用 template …

PR2019软件下载教程

打开下载网址:rjctx.com 选择Premiere: 选择PR2019,并点击: 拉到最后,选择百度网盘下载: 下载到本地。 二,软件安装 解压缩后,双击set_up 选择位置后,进行安装&…