发表博客之: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]即可!
  • 如此就实现了变长推理了!

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

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

相关文章

定点乘除法

目录 一、定点乘法 1.串行乘法器 2.并行乘法器 二、定点除法 1.笔算除法 2.机器除法 一、定点乘法 1.串行乘法器 1.符号位单独处理,两数的符号位按异或运算得到,而乘积的数值部分则是两个正数相乘之积。 2.过程 (1) 由乘…

「2024年」前端开发常用工具函数总结 TypeScript

前言 在前端开发中,工具函数是提高代码复用率、保持代码整洁和增加开发效率的关键。使用 TypeScript 编写工具函数不仅可以帮助开发者捕捉到更多的类型错误,还可以提供更清晰的代码注释和更智能的代码补全。下面是一些在 TypeScript 中常用的前端开发工…

Java如何获取当前日期和时间?

Java如何获取当前日期和时间? 本文将为您介绍 Java 中关于日期和时间获取的方法,以及介绍 Java 8 中获取日期和时间的全新API。 1、 System.currentTimeMillis() 获取标准时间可以使用 System.currentTimeMillis() 方法来获取,此方法优势是…

【C语言】详解预处理

、 最好的时光,在路上;最好的生活,在别处。独自上路去看看这个世界,你终将与最好的自己相遇。💓💓💓 目录 •✨说在前面 🍋预定义符号 🍋 #define • 🌰1.#define定义常…

ControlNet官方资源链接【ControlNet论文原文】【持续更新中~】

ControlNet官方资源链接 ControlNet论文原文:https://arxiv.org/abs/2302.05543ControlNet官方GitHub:https://github.com/lllyasviel/ControlNetControlNet 1.1官方GitHub:https://github.com/lllyasviel/ControlNet-v1-1-nightlyControlNe…

phpMyAdmin增加自定义IP登录教程

phpMyAdmin增加自定义IP登录教程 1、打开phpMyAdmin目录, 在此目录下是否有config.sample.inc.php文件,如果存在,那么将其改名为config.inc.php(为避免修改失误所造成的损失,强烈建议先备份config.sample.inc.php文件…

UnityWebGL使用sherpa-ncnn实时语音识别

k2-fsa/sherpa-ncnn:在没有互联网连接的情况下使用带有 ncnn 的下一代 Kaldi 进行实时语音识别。支持iOS、Android、Raspberry Pi、VisionFive2、LicheePi4A等。 (github.com) 如果是PC端可以直接使用ssssssilver大佬的 https://github.com/ssssssilver/sherpa-ncn…

[嵌入式系统-62]:RT-Thread-内核:多核CPU SMP的支持与移植

目录 RT-Thread SMP 介绍与移植 1. 多核的优点 2. 多核启动 2.1 概述 2.2 CPU0 启动流程 2.3 次级 CPU 启动流程 3. 多核调度 3.1 任务特性 3.2 调度策略 4. SMP 内核接口 处理器间中断 IPI OS Tick 自旋锁 spinlock 任务绑定 4. SMP移植说明 编译环境准备 创…

配置网关,解决本地连接不上Linux虚拟机的问题

在Window环境下,使用远程终端工具连接不了VMware搭建的Linux虚拟机(CentOS 7),并且在命令行ping不通该Linux虚拟机的IP地址。下面通过配置网关解决本地与Linux虚拟机连接问题: 1 查看虚拟机网关地址 在VMware虚拟机上…

数据库开发关键之与DQL查询语句有关的两个案例

案例 案例1 条件分页查询 查看项目经理提供给我们的需求文档 模糊匹配的含义是 只要包含"张"就可以 use dduo;-- 按照需求完成员工管理的条件分页查询 根据输入条件 查询第一页的数据 每页展示10条记录 -- 输入条件: -- 姓名: 张 -- 年龄&…

基于YOLOv8的水稻虫害识别系统,加入BiLevelRoutingAttention注意力进行创新优化

💡💡💡本文摘要:基于YOLOv8的水稻虫害识别,阐述了整个数据制作和训练可视化过程,并加入BiLevelRoutingAttention注意力进行优化,最终mAP从原始的 0.697提升至0.732 博主简介 AI小怪兽&#xff…

c语言从入门到函数速成(2)

温馨提醒:本篇文章适合人群:刚学c又感觉那个地方不怎么懂的同学以及以及学了一些因为自身原因停学一段时间后又继续学​​​c的学 好,正片开始! 数组 概念:数组中存放的是1个或者多个数据,但是数组元素个…

由于找不到msvcr110.dll,无法继续执行代码的解决方法

在日常使用计算机的过程中,可能会遇到系统提示缺少msvcr110.dll文件的情况,这一问题往往导致某些应用程序无法正常运行。幸运的是,有多种方法可以有效应对这一困境,帮助您的计算机恢复顺畅运作。以下是解决计算机丢失msvcr110.dll…

JavaWeb--1.Servlet

Servlet&#xff08;基础&#xff09; 1、配置依赖&#xff1a; ​ 在pom.xml文件中加入相关依赖 <dependencies><dependency><groupId>jakarta.servlet</groupId><artifactId>jakarta.servlet-api</artifactId><version>5.0.0&l…

Python数据分析案例43——Fama-French回归模型资产定价(三因子/五因子)

案例背景 最近看到要做三因子模型的同学还挺多的&#xff0c;就是所谓的Fama-French回归模型&#xff0c;也就是CAMP资本资产定价模型的升级版&#xff0c;然后后面还升级为了五因子模型。 看起来眼花缭乱&#xff0c;其实抛开金融资产定价的背景&#xff0c;从机器学习角度来…

HTML_CSS学习:常用文本属性

一、文本颜色 相关代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>文本颜色</title><style>div{font-size: 90px;}.atguigu1{color: #238c20;}.atguigu2{color: rgb(2…

【b站vue教程】1 宏观视角下的浏览器——前端大厂面试必刷:前后端必学的网络安全浏览器工作原理:从入门到精通全套【附带所有源码】

课程地址&#xff1a;【前端大厂面试必刷&#xff1a;前后端必学的网络安全浏览器工作原理&#xff1a;从入门到精通全套【附带所有源码】】 https://www.bilibili.com/video/BV1UL41157hP/?share_sourcecopy_web&vd_sourceb1cb921b73fe3808550eaf2224d1c155 目录 1、宏…

vue3中使用crypto-js库进行加密/解密

使用crypto-js库进行加密/解密 安装 npm install crypto-js 基本使用 <template><div>使用crypto-js库进行加密/解密</div> </template><script setup> import CryptoJS from crypto-js; import { onMounted } from vue;// 加密函数 const encr…

记某APP登录逆向解密过程

最近在学习APP逆向相关的知识&#xff0c;刚好拿到了一个APP目标&#xff0c;该APP登录过程存在加密&#xff0c;所以记录下逆向破解的过程。流程 先介绍下拿到该APP后续所做的一些工作流程 选择相应版本安装到测试机当中进行抓包&#xff0c;查看数据包分析登录请求包&#x…

中国目前比较有影响力的人物颜廷利:不能升命, 活着何用?

不能‘升命’&#xff0c; 活着何用&#xff1f;…&#xff08;升命学说&#xff09; 21世纪东方哲学家思想家、科学家、当代中国教育界知名教授、专业周易起名改名字、易经姓名学专家、目前比较有影响力的人物、现代国学大师泰斗杰出代表颜廷利教授在《升命学说》‘净化论’里…