Transformer特辑

https://github.com/LongxingTan/Machine-learning-interview

模型结构

transformer 原文插图

  • 基本单元:token_embedding + positional encoding, encoder, token_embedding + positional encoding, decoder
  • encoder: (self-attention, skip-connect, ln), (ffn, skip-connect, ln)
  • decoder: (self-attention, skip-connect, ln), (cross-attention, skip-connect, ln), (ffn, skip-connect, ln)

复杂度

参数与计算量

参考文献5插图

  • 反向传播优化过程:(1)前向计算损失函数,(2)后向计算梯度,(3)优化器更新参数

开始训练一个大模型之前,根据scaling law来估算,有多少数据,需要多少算力,要计算多少时间

  • 深度学习每次前向计算,矩阵乘法就是一次加一次乘,一个parameters,要对应2次浮点计算,所以要乘以2

我们采用文献6中的约定:

  • L: Transfomer 层树
  • H:d_model, 也就是attention hidden_size维度
  • h: 多头注意力有几个attention 头
  • B: batchsize
  • S:序列的长度,比如GPT 2K,LLama2 4K
  • V: 词表里词的数量 vocab

Attention

从模型结构中拿出一个标准单元
attention, skip_connect, ln + ffn, skip_connect, ln

在这里插入图片描述

输入的embedding形状为: [B,S,H]

  • 多头注意力先把Q, K, V都dense层到H维度,[B, S, H] X [H, H] = [B, S, H], 共计算BSH^2次 x 3
  • 计算attention score, softmax(Q* K转置 / sqrt(d_model)),[B, h, S, H’] X [B, h, H’, S] = [B, h, S, S],考虑其中多头,共计算 BHS^2次
  • 与V点积,[B, h, S, S] X [B, h, S, H’] = [B, h, S, H’],共计算 BhS^2 H’ = BHS**2次
  • 经过dense线性层,多头转换回去,[B, h, S, H’] X [H’, H’] = [B, S, H],共计算BSH^2次

以上Attention过程总共计算为 2 * (3BSH2 + BSH2 + BHS2 + BHS2) = 8BSH**2 + 4BHS **2,乘以2是因为神经网络计算一次加法 一次乘法。

FFN

输入embedding形状为:[B, S, H]

  • ffn第一层,[B, S, H] x [H, 4H] = [B, S, 4H], 共计算 4BSH^2
  • ffn第二层,[B, S, 4H] x [4H, H] = [B, S, H], 共计算 4BSH^2

以上FFN总计算为 16 BSH**2

总计算量

前向计算量

  • 一个attention + ffn单元:24BSH**2 + 4 BHS **2
  • L层: L * (单元)
  • 生成:2BSHV

反向求导的时候,Loss算梯度得到新weight然后更新,所以是前向计算的两倍,乘以4

完成每个参数,都过一遍所有Token的情况下,也就是一个epoch,要经过6次浮点运算

对于Llama 65B模型推导

  • 模型参数: 65 * 10 ^9
  • token: 1.4 * 10 ^12

因此需要算力 =6 * (模型参数 * 总token)

实际算力=GPU总数单个GPU算力单个GPU利用率。
实际算力 = 2048 * 312(A100 Tflops)* 10^12() * 0.45

需要算力/实际算力 = 时间(原文21天)

显存

  • 装载模型,假如模型的参数是以FP16来计算的(A100之后BF16的居多,防止计算的时候上溢出)

  • 一个参数被表示16位的浮点数,所以它也就占用2个byte 。

  • 7B的话,静态显存占用量,指模型的所有参数被load到显存里,如果以BF16的话,要占据14个G

  • 训练过程中,除了模型参数本身外,还有梯度和优化器

在一次用AdamW和混合精度训练的Epcho里,每一个模型参数,需要占用:
2byte的模型静态参数权重(以16bit存储)
2byte的模型更新参数权重(以16bit存储)
2byte的梯度(以16bit存储)
2byte的梯度更新(以16bit存储)
4byte的一阶动量优化器更新(以32bit存储)
4byte的二阶方差优化器更新(以32bit存储)

也就是: 一个模型参数需要占用16bytes的内存

更详细可以参考 LLM 参数,显存,Tflops? 训练篇(5) - 周博洋的文章 - 知乎

Tokenizer

  • Byte Pair Encoding(BPE), Byte-level BPE(BBPE),Uniform Language Model(ULM),WordPiece
  • https://github.com/LongxingTan/Machine-learning-interview/blob/main/02_ml/11_nlp.md

Positional encoding/embedding

由于attention模型自身没有衡量位置的能力,因此需要位置编码。至于输入为什么是token_embedding + positional encoding, 可参考为什么 Bert 的三个 Embedding 可以进行相加? - 知乎

transformer论文中使用的是 positional encoding,

  • 位置编码是和token embeding一样的形状,[B, S, H]
  • 位置编码是位于[0, 1]的连续数值

旋转位置编码: RoPE

Attention 推理优化

KV-Cache

  • KV cache主要分成5个方向的优化,即Sparse、Quantization、Allocator、Window、share
  • 关于为什么Q不需要缓存,可参考为什么加速LLM推断有KV Cache而没有Q Cache? - 知乎
  • KC cache计算量,显存分析,可参考KV cache详解 图示,显存,计算量分析,代码 - 莫笑傅立叶的文章 - 知乎

Multi-Query Attention (MQA)

  • MQA 在 encoder 上的提速没有非常明显,但在 decoder 上的提速是很显著

在这里插入图片描述

Grouped Query Attention (GQA)

在这里插入图片描述

Sliding window attention (SWA)

在这里插入图片描述

Flash Attention

  • FlashAttention主要解决Transformer计算速度慢和存储占用高的问题. 将优化重点放在了降低存储访问开销(Memory Access Cost,MAC)上

PagedAttention

在这里插入图片描述

Quantization

Decoding/sampling

Constrained sampling

Speculative decoding 投机采样

  • Accelerating Large Language Model Decoding with Speculative Sampling
  • Fast Inference from Transformers via Speculative Decoding

Decoder-only 推理

  • 关于 prefill cache, 可参考原理&图解vLLM Automatic Prefix Cache(RadixAttention): 首Token时延优化 - DefTruth的文章 - 知乎

参考

  • https://jalammar.github.io/illustrated-transformer/
  • http://nlp.seas.harvard.edu/annotated-transformer/
  • https://github.com/Kyubyong/transformer
  • Transformer学习笔记一:Positional Encoding(位置编码) - 猛猿的文章 - 知乎
  • 浅谈后向传递的计算量大约是前向传递的两倍 - 回旋托马斯x的文章 - 知乎
  • LLM 参数,显存,Tflops? 训练篇(1) - 周博洋的文章 - 知乎
  • Llama源码深入解析 - 一个有毅力的吃货的文章 - 知乎
  • 十分钟读懂旋转编码(RoPE) - 绝密伏击的文章 - 知乎
  • 大模型推理性能优化之KV Cache解读 - Young的文章 - 知乎
  • Muti Query Attention 和 Attention with Linear Bias(附源码) - 何枝的文章 - 知乎
  • DistServe速读——Prefill & Decode解耦、模型并行策略&GPU资源分配解耦 - 阿杰的文章 - 知乎
  • https://github.com/alibaba/Megatron-LLaMA
  • 稀疏注意力计算:sliding window attention - Linsight的文章 - 知乎
  • 大模型推理加速:KV Cache Sparsity(稀疏化)方法 - 歪门正道的文章 - 知乎

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

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

相关文章

顶顶通呼叫中心中间件实现随时启动和停止质检(mod_cti基于FreeSWITCH)

文章目录 前言联系我们拨号方案启动停止ASR执行FreeSWITCH 命令接口启动ASR接口停止ASR接口 通知配置cti.json配置质检结果写入数据库 前言 顶顶通呼叫中心中间件的实时质检功能是由两个模块组成:mod_asr 和 mod_qc。 mod_asr:负责调用ASR将用户们在通…

二、Qemu+Vscode调试内核

编译内核、busybox、配置Qemu参考:Qemu调试内核 一、修改启动脚本 1、修改Qemu启动脚本 #! /bin/shqemu-system-aarch64 \-machine virt,virtualizationtrue,gic-version3 \-nographic \-m size1024M \-cpu cortex-a72 \-smp 2 \-kernel Image \-drive formatraw…

写作遇到AI痕迹困扰?这里有降低AI痕迹的实用技巧

请问有没有什么免费的论文降重网站? 副本 一句“知网是什么”,我查重查了千百遍。天临六年五月,大家的论文差不多都到了查重的阶段。好不容易论文写(shui)完了,一看查重报告,满屏的红字让人心心…

Linux--线程ID封装管理原生线程

目录 1.线程的tid(本质是线程属性集合的起始虚拟地址) 1.1pthread库中线程的tid是什么? 1.2理解库 1.3phtread库中做了什么? 1.4线程的tid,和内核中的lwp 1.5线程的局部存储 2.封装管理原生线程库 1.线程的tid…

java设计模式(十五)命令模式(Command Pattern)

1、模式介绍: 命令模式(Command Pattern)是一种行为设计模式,其主要目的是将请求封装成一个对象,从而允许使用不同的请求、队列或者日志来参数化其他对象。这种模式使得命令的请求者和实现者解耦。 2、应用场景&…

服务启动何时触发 Nacos 的注册流程?

前言: 前面的系列文章让我们对 Nacos 有了一个基本了解,并知道了如何去试用 Nacos 作为注册中心和配置中心,本篇我们将从源码层面去分析 Nacos 的服务注册流程。 Nacos 系列文章传送门: Nacos 初步认识和 Nacos 部署细节 Naco…

C++基础学习笔记

1.命名空间(namespace) 1.什么是命名空间&命名空间的作用 1.在C/C中,变量、函数、类都是大量存在的,这些变量等的名称将都存在于全局作用域中,就会导致很多的命名冲突等。使用命名空间的目的就是对标识符的名称进行本地化,以…

短视频矩阵系统全解析:让获客变得更简单

随着数字媒体的迅猛发展,短视频已成为人们生活中不可或缺的一部分。对于企业而言,如何有效利用短视频平台吸引目标用户,实现高效获客,成为了一个亟待解决的问题。本文将全面解析短视频矩阵系统,带您领略其独特魅力&…

广度优先(BFS)

先看一道简单的题&#xff0c;迷宫问题&#xff1a; 洛谷P1746 离开中山路&#xff1a;P1746 离开中山路 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) #include<iostream> #include<cstring> #include<queue> #include <utility> #define N 1002 …

深度学习的数学PDF

链接: https://pan.baidu.com/s/1_jScZ7dcyAWGqbrad6bbCQ?pwd9gj9 提取码: 9gj9 复制这段内容后打开百度网盘手机App&#xff0c;操作更方便哦

最简单的vue3组件之间传值

localStorage 是 HTML5 引入的一个 Web Storage API 的一部分&#xff0c;它允许网页在用户的浏览器上存储数据。localStorage 提供了一种持久化的本地存储方案&#xff0c;数据不会因为浏览器关闭而丢失&#xff0c;除非用户或脚本显式地删除它们。 localStorage 是一种非常实…

VSCode神仙插件——通义灵码 (AI编程助手)

1、安装&登录插件 安装时,右下角会有弹窗,让你登录该软件 同意登录后,会跳转浏览器页面 VSCode右下角出现如下图标即登录成功 2、使用 (1)点击左侧栏中的如下图标,打开通义灵码,可以进行智能问答 (2) 选中代码,右键 但是,上述所有的操作会在左侧问答栏中提供答案,并无法直…

认识并理解webSocket

今天逛牛客&#xff0c;看到有大佬分享说前端面试的时候遇到了关于webSocket的问题&#xff0c;一看自己都没见过这个知识点&#xff0c;赶紧学习一下&#xff0c;在此记录&#xff01; WebSocket 是一种网络通信协议&#xff0c;提供了全双工通信渠道&#xff0c;即客户端和服…

31. 1049. 最后一块石头的重量 II, 494.目标和,474.一和零

class Solution { public:int lastStoneWeightII(vector<int>& stones) {int sum 0;for(int stone : stones) sum stone;int bagSize sum /2;vector<int> dp(bagSize 1, 0);for(int i 0; i < stones.size(); i){ //遍历物品for(int j bagSize; j >…

LLMs的基本组成:向量、Tokens和嵌入

编者按&#xff1a;随着人工智能技术的不断发展&#xff0c;大模型&#xff08;语言、视觉&#xff0c;或多模态模型&#xff09;已成为当今AI应用的核心组成部分。这些模型具有处理和理解自然语言等模态输入的能力&#xff0c;推动了诸如聊天机器人、智能助手、自动文本生成等…

Android初学者书籍推荐

书单 1.《Android应用开发项目式教程》&#xff0c;机械工业出版社&#xff0c;2024年出版2.《第一行代码Android》第二版3.《第一行代码Android》第三版4.《疯狂Android讲义》第四版5.《Android移动应用基础教程&#xff08;Android Studio 第2版&#xff09;》 从学安卓到用安…

Node.js如何在Windows安装?

文章目录 主要特点&#xff1a;使用场景&#xff1a;安装方法验证是否安装成功 Node.js 是一个开源、跨平台的JavaScript运行环境&#xff0c;由Ryan Dahl于2009年创建。它允许开发者在服务器端运行JavaScript代码。Node.js 基于Chrome V8 JavaScript引擎构建&#xff0c;其设计…

项目/代码规范与Apifox介绍使用

目录 目录 一、项目规范&#xff1a; &#xff08;一&#xff09;项目结构&#xff1a; &#xff08;二&#xff09;传送的数据对象体 二、代码规范&#xff1a; &#xff08;一&#xff09;数据库命名规范&#xff1a; &#xff08;二&#xff09;注释规范&#xff1a; …

关于CANNM PassiveMode

Passive Mode的要求 根据上图CANNM的规范可知&#xff1a; 处于Passive Mode的网络节点只能接收网络管理PDU&#xff0c;不能发送网络管理PDU。Passive Mode由CanNmPassiveModeEnable参数静态配置。如果一个ECU包含多个节点&#xff0c;那么所有的节点要么都是Passive Mode要么…

GD32F303之CAN通信

1、CAN时钟 GD32F303主时钟频率最大是120Mhz,然后APB1时钟最大是60Mhz,APB2时钟最大是120Mhz,CAN挂载在APB1总线上面 所以一般CAN的时钟频率是60Mhz,这个频率和后面配置波特率有关 2、GD32F303时钟配置 首先我们知道芯片有几个时钟 HXTAL&#xff1a;高速外部时钟&#xff1…