大模型计算量纲

大模型计算量纲

1. 模型参数量(llama 13B为例)

{"architectures": ["LLaMAForCausalLM"],"bos_token_id": 0,"eos_token_id": 1,"hidden_act": "silu","hidden_size": 5120,"intermediate_size": 13824,"initializer_range": 0.02,"max_sequence_length": 2048,"model_type": "llama","num_attention_heads": 40,"num_hidden_layers": 40,"pad_token_id": -1,"rms_norm_eps": 1e-06,"torch_dtype": "float16","transformers_version": "4.27.0.dev0","use_cache": true,"vocab_size": 32000
}

image

Embedding

v o c a b _ s i z e ∗ h = 32000 h vocab\_size * h = 32000 h vocab_sizeh=32000h

TransformerBlock

  • Self-Attention
    • Q, K, V, O
    • 参数量(无bias): 4 ∗ h 2 4 * h^2 4h2
	self.q_proj = nn.Linear(hidden_size, num_heads * self.head_dim, bias=False)self.k_proj = nn.Linear(hidden_size, num_heads * self.head_dim, bias=False)self.v_proj = nn.Linear(hidden_size, num_heads * self.head_dim, bias=False)self.o_proj = nn.Linear(num_he

ads * self.head_dim, hidden_size, bias=False)

  • MLP
    • 3层Dense
    • 参数量(无bias) 3 ∗ h ∗ i n t e r m e d i a t e 3 * h * intermediate 3hintermediate
		self.gate_proj = nn.Linear(hidden_size, intermediate_size, bias=False)self.down_proj = nn.Linear(intermediate_size, hidden_size, bias=False)self.up_proj = nn.Linear(hidden_size, intermediate_size, bias=False)
  • LayNorm

    • input_layernorm, post_attention_layernorm

2 ∗ h , 各一个参数 2 * h,各一个参数 2h,各一个参数

	variance =hidden_states.to(torch.float32).pow(2).mean(-1, keepdim=True)hidden_states = self.weight * hidden_states * torch.rsqrt(variance + self.variance_epsilon)

4 ∗ h 2 + 3 ∗ h ∗ i n t e r m e d i a t e + 2 ∗ h = 4 ∗ h 2 + 3 ∗ h ∗ 2.7 h + 2 ∗ h = 12 h 2 + 2 h 4*h^2 + 3*h*intermediate + 2*h\\=4*h^2 + 3*h*2.7h + 2*h\\=12h^2 + 2h 4h2+3hintermediate+2h=4h2+3h2.7h+2h=12h2+2h

Transformer Layer

T r a n s f o r m e r B l o c k ∗ l a y e r = ( 12 h 2 + 2 h ) ∗ l a y e r TransformerBlock * layer \\= (12h^2+2h)*layer TransformerBlocklayer=(12h2+2h)layer

最后norm

  • norm: h h h

整体

整体参数 = e m b e d d i n g + t r a n s f o r m e r L a y e r + n o r m = 6.2 h 2 + 480 ∗ h 2 + 80 ∗ h + h = 486.2 ∗ h 2 + 81 ∗ h = 12.7 B 整体参数\\=embedding + transformer Layer + norm\\ = 6.2h^2 + 480*h^2 + 80*h + h \\= 486.2*h^2 + 81*h \\=12.7B 整体参数=embedding+transformerLayer+norm=6.2h2+480h2+80h+h=486.2h2+81h=12.7B

2. 显存占用

Zero论文 https://arxiv.org/pdf/2104.07857.pdf https://arxiv.org/pdf/1910.02054.pdf

image

2.1 训练阶段(混合精度)

image

Model States = optimizer status、gradients、parameters

B = b a t c h s i z e , N = h e a d , S = s e q u e n c e l e n g t h , D = d i m , h = h i d d e n d i m B=batch\\_size, N = head, S = sequence\\_length, D = dim,h=hidden\\_dim B=batchsize,N=head,S=sequencelength,D=dim,h=hiddendim

C C C两个 activation checkpoints至今的transformer block量

对于一个参数 θ \theta θ,后向梯度 ∇ f ( θ ) \nabla f(\theta) f(θ);adamW 里面有两个参数 m , v m, v m,v

m , v m, v m,v 是 float32,4个字节

θ \theta θ ∇ f ( θ ) \nabla f(\theta) f(θ)在做前后项计算时,使用float16,2个字节

更新参数: θ \theta θ ∇ f ( θ ) \nabla f(\theta) f(θ) 使用 float32的copy

整体:一个参数贡献 4字节

image

Residual States

h i d d e n s t a t u s ∗ l a y e r C ∗ 2 = B ∗ S ∗ h ∗ l a y e r C ∗ 2 hidden\\_status * \frac{layer}{C}* 2 \\= B * S * h * \frac{layer}{C} * 2 hiddenstatusClayer2=BShClayer2

对于深的网络,block之间需要部分的residual传递,C表示多少个Block存储1个residual,每个模型不一样

Model State Working Memory

Model State都offload到CPU后,在前向计算、后向更新梯度(各2个字节)时,需要的最少计算的临时内存占用

最大需要开辟的是MLP里面的线性层:

h ∗ i n t e r m e d i e ∗ ( 2 + 2 ) h* intermedie * (2+2) hintermedie(2+2)

Activation Working Memory

区分于params,是计算后的中间结果,不包含模型参数和优化器状态,但包含了dropout操作需要用到的mask矩阵

TransformerBlock整体计算:

  • hidden_states Residual

2 ∗ 2 ∗ [ B , N , S , D ] = 4 ∗ B N S D 2 * 2 * [B, N, S, D] = 4 * BNSD 22[B,N,S,D]=4BNSD

  • Q、K、V、O 计算后:

[B, N, S, D] * 4 [ B , N , S , D ] ∗ 4 ∗ 2 = 8 ∗ B N S D [B, N, S, D] * 4 * 2 = 8 * BNSD [B,N,S,D]42=8BNSD

  • S o f t m a x = S o f t m a x ( Q K D ) = [ B , N , S , S ] = 2 ∗ B N S S Softmax = Softmax(\frac{QK}{\sqrt{D}}) = [B, N, S, S]=2 * BNSS Softmax=Softmax(D QK)=[B,N,S,S]=2BNSS

  • MLP直接计算结果:

[ B , N , S , D ] = 2 ∗ B N S D [B, N, S, D] = 2 * BNSD [B,N,S,D]=2BNSD

  • Dropout Mask (Attention_Drop + Residual_Drop):

[ B , N , S , D ] = 2 ∗ 1 ∗ B N S D [B, N, S, D] = 2 * 1 * BNSD [B,N,S,D]=21BNSD

  • 16 ∗ B N S D + 2 ∗ B N S S 16* BNSD + 2 * BNSS 16BNSD+2BNSS

整体

( 16 ∗ B N S D + 2 ∗ B N S S ) ∗ C = B N S ( 16 D + 2 S ) ∗ C (16* BNSD + 2 * BNSS)*C = B N S(16D + 2S) *C (16BNSD+2BNSS)C=BNS(16D+2S)C

对比

image

column 5: Model States = (0.1 T * 20 = 1.82 TB)

column 6: full set of activations = 中间过程有引用的矩阵都需要存储: B N S ( 34 D + 5 S ) ∗ l a y e r BNS(34D+5S)* layer BNS(34D+5S)layer

column 7: Memory for Residual States = B ∗ S ∗ h ∗ ∗ l a y e r C ∗ 2 = 32 ∗ 1024 ∗ 10000 ∗ 80 ∗ 2 = 0.05 T B B * S * h ** \frac{layer}{C} * 2=32 * 1024*10000*80*2=0.05TB BShClayer2=32102410000802=0.05TB

column 8: Model State Working Memory = h ∗ i n t e r m e d i e ∗ ( 2 + 2 ) = 10000 ∗ 4 ∗ 1000 ∗ 4 = 1.6 G B h* intermedie * (2+2) = 10000*4*1000*4=1.6GB hintermedie(2+2)=10000410004=1.6GB

column 9: Activations Working Memory: 8卡机型,32/8 = 4 = B N S ( 16 D + 2 S ) ∗ C = 4 ∗ 40 ∗ 1024 ∗ ( 16 ∗ 10000 / 128 + 2 ∗ 1024 ) = 0.62 G B = B N S(16D + 2S) *C=4*40*1024*(16*10000/128+2*1024)=0.62GB =BNS(16D+2S)C=4401024(1610000/128+21024)=0.62GB

整体显存计算

p a r a m s ∗ 20 + B ∗ S ∗ h ∗ l a y e r C ∗ 2 + B N S ( S + 2 D ) ∗ L a y e r ∗ 2 + h ∗ i n t e r m e d i e ∗ ( 2 + 2 ) params * 20 + B * S * h * \frac{layer}{C} * 2 \\+ BNS(S+2D)*Layer * 2+h* intermedie * (2+2) params20+BShClayer2+BNS(S+2D)Layer2+hintermedie(2+2)

KV Cache

需要存储历史K, V结果,不能释放都需要存储

( B S h + B S h ) ∗ l a y e r ∗ 2 (BSh + BSh) * layer * 2 (BSh+BSh)layer2

推理阶段

推理阶段,没有梯度,优化器,只有Fp16的weight,和中间不能释放变量:

p a r a m s ∗ 2 + B ∗ S ∗ h ∗ l a y e r C ∗ 2 + B N S ( S + 2 D ) ∗ L a y e r ∗ 2 + h ∗ i n t e r m e d i e ∗ ( 2 + 2 ) params * 2 + B * S * h * \frac{layer}{C} * 2 \\+ BNS(S+2D)*Layer * 2+h* intermedie * (2+2) params2+BShClayer2+BNS(S+2D)Layer2+hintermedie(2+2)

示例

image

ZeRO-Offload partitions the data such that the fp16 parameters are stored in GPU while the fp16 gradients, and all the optimizer states such as fp32 momentum, variance and parameters are stored in CPU

ZeRO-1, ZeRO-2 and ZeRO-3 corresponding to the partitioning of the three different model states, optimizer states, gradients and parameters, respectively.

  • ZeRO-1 partitions the optimizer states only:4字节

  • ZeRO-2 partitions gradients in addition to optimizer states: 2字节

  • ZeRO-3 partitions all model states

fp32参数,梯度的更新,都在cpu中

模型llama 7B(GB)llama 13B(GB)
Model States(Train)140260
Model States(zero-2)14 + 必要的梯度更新26 + 必要的梯度更新
Model States(Inference)1426
Memory for Residual States00
Model State Working Memory0.250.39
Activations Working Memory(B=4,S=1024)0.50.62
Activations Working Memory(B=1,S=1024)0.1250.155
Activations Working Memory(B=1,S=2048)0.50.62
Activations Working Memory(B=4,S=10240)27.534
KV Cache(B=1,S=2048)1G1.56

3. 计算Flops(Floating point operations)

矩阵运算

A ∈ R m , n A\in R^{m,n} ARm,n, B ∈ R n , p B\in R^{n,p} BRn,p

单个元素的计算: 2 ∗ n 2 * n 2n(乘 + 加),相乘后的矩阵元素: R m , p R^{m,p} Rm,p

image

整体计算量: 2 ∗ n ∗ m ∗ p = 2 m n p 2 * n * m*p=2mnp 2nmp=2mnp

Embedding

[ B , S ] ∗ [ V , h ] T − > [ B , S , h ] [B,S] * [V,h]^T -> [B,S,h] [B,S][V,h]T>[B,S,h], Lookup 无

TransformerBlock

  • Self-Attention

image

  • Q , K , V ∈ R B , S , h Q,K,V \in R^{B,S,h} Q,K,VRB,S,h, W _ Q , W _ K , W _ V ∈ R h , h W\_Q,W\_K,W\_V \in R^{h,h} W_Q,W_K,W_VRh,h,计算后: 3 ∗ 2 ∗ B S h h = 6 B S h h 3 * 2 * BShh=6BShh 32BShh=6BShh

  • Q K T N \frac{QK^T}{\sqrt{N}} N QKT, [ B , N , S , D ] ∗ [ B , N , S , D ] T − > [ B , N , S , S ] [B,N,S, D] * [B,N,S,D]^T -> [B,N,S,S] [B,N,S,D][B,N,S,D]T>[B,N,S,S],计算后:

( 2 + 1 ) B N S D S = 3 B S S h (2+1)BNSDS=3BSSh (2+1)BNSDS=3BSSh

  • Softmax ( x _ i ) = exp ⁡ ( x _ i ) ∑ _ j exp ⁡ ( x _ j ) \text{Softmax}(x\_{i}) = \frac{\exp(x\_i)}{\sum\_j \exp(x\_j)} Softmax(x_i)=_jexp(x_j)exp(x_i),对矩阵进行,乘、加、除,计算后:

3 ∗ [ B , N , S , S ] = 3 B N S S 3 * [B,N,S,S] = 3BNSS 3[B,N,S,S]=3BNSS

  • Softmax ( W ) . V . W _ O \text{Softmax}(W) .V.W\_O Softmax(W).V.W_O,计算后:

[ B , N , S , S ] ∗ [ B , N , S , D ] ∗ [ h , h ] − > 2 B N S S D + 2 B S h h = 2 B S S h + 2 B S h h [B,N,S,S] * [B,N,S,D]*[h,h] -> 2BNSSD + 2BShh=2BSSh+2BShh [B,N,S,S][B,N,S,D][h,h]>2BNSSD+2BShh=2BSSh+2BShh

  • 整体: B S h h ( 6 + 3 S h + 3 S D h + 2 S h + 2 ) BShh (6 + 3 \frac{S}{h} + 3\frac{S}{Dh} + 2 \frac{S}{h} + 2 ) BShh(6+3hS+3DhS+2hS+2),Softmax可以忽略

    • 8 B S h 2 + 5 B S 2 h 8BSh^2 +5BS^2h 8BSh2+5BS2h

    • S=2048, h=4096, D=32 , B S h h ( 6 + 3 2 + 3 64 + 1 + 2 ) BShh (6 + \frac{3}{2} + \frac{3}{64} + 1 + 2 ) BShh(6+23+643+1+2)

    • 当长度是h的两倍时,QKV,QK, SVW, 三个计算量级一致

    • 不管升级S,还是h,都是平方次提升

  • MLP

    • L1 gate [ B , S , h ] ∗ [ h , i n t e r ] − > [ B , S , i n t e r ] [B,S, h] * [h, inter] -> [B,S,inter] [B,S,h][h,inter]>[B,S,inter],计算量: 2 ∗ B S h ∗ i n t e r 2 * BSh * inter 2BShinter

    • L2 up [ B , S , h ] ∗ [ h , i n t e r ] − > [ B , S , i n t e r ] [B,S, h] * [h, inter] -> [B,S,inter] [B,S,h][h,inter]>[B,S,inter],计算量: 2 ∗ B S h ∗ i n t e r 2 * BSh * inter 2BShinter

    • L3 down [ B , S , i n t e r ] ∗ [ i n t e r , h ] − > [ B , S , h ] [B,S, inter] * [inter, h] -> [B,S,h] [B,S,inter][inter,h]>[B,S,h],计算量: 2 ∗ B S ∗ i n t e r ∗ h 2 * BS * inter *h 2BSinterh

    • 整体: 6 ∗ B S h ∗ i n t e r 6 * BSh * inter 6BShinter

  • Logits

    • [ B , S , h ] ∗ [ h , V ] − > [ B , S , V ] [B,S, h] * [h, V] -> [B,S,V] [B,S,h][h,V]>[B,S,V],计算量: 2 B S h V 2 BShV 2BShV
  • 整体:

    • 前向 = l a y e r ∗ ( 8 B S h 2 + 5 B S 2 h + 6 B S h ∗ i n t e r ) + 2 B S h V 前向 = layer * (8BSh^2 +5BS^2h + 6BSh*inter) + 2BShV 前向=layer(8BSh2+5BS2h+6BShinter)+2BShV

    • 后向 = 2 ∗ 前向 后向 = 2 * 前向 后向=2前向

    • 整体 = 3 * step * 前向

我们按300B的token,B =1 ,S=2048,step= 300B/2048

比如:llama 7B = 1.4 ∗ 1 0 22 1.4 * 10^{22} 1.41022

  • V100

image

  • V100

image

https://www.nvidia.com/en-us/data-center/v100/

在这里插入图片描述

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

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

相关文章

图像处理之《生成式隐写研究》论文阅读

这是一篇关于生成式隐写的中文综述文章 一、文章摘要 隐写术通常将秘密信息以不可见的形式隐藏到载体中,从而通过传递含密载体实现隐蔽通信。嵌入式隐写方案通过修改载体将秘密信息嵌入其中,但会不可避免地改变载体的统计特性,因此难以抵抗…

深度学习主流开源框架:Caffe、TensorFlow、Pytorch、Theano、Keras、MXNet、Chainer

2.6 深度学习主流开源框架 表2.1 深度学习主流框架参数对比 框架关键词总结 框架关键词基本数据结构(都是高维数组)Caffe“在工业中应用较为广泛”,“编译安装麻烦一点”BlobTensorFlow“安装简单pip”TensorPytorch“定位:快…

C++之模板类如何继承类实例?(二百五十八)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

WordPress主题YIA在广告位添加图片广告时下方有空白怎么办?

YIA主题设置中默认有4个广告位,而侧边栏的广告位由站长自行添加。boke112百科在这些广告位添加图片广告后发现图片下方有空白,导致下方的两个角没有变圆角,看起来也有点不好看。具体如下图所示: 其实,这个问题就是典型…

一周学会Django5 Python Web开发-项目配置settings.py文件-其他配置

锋哥原创的Python Web开发 Django5视频教程: 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计17条视频,包括:2024版 Django5 Python we…

P2024 [NOI2001] 食物链 带权并查集 循环关系

题目: P2024 [NOI2001] 食物链 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 本文学习自: 题解 P2024 【食物链】 - RE: 从零开始的异世界信竞生活 - 洛谷博客 (luogu.com.cn) ———— 关系并查集其实就是在普通并查集的基础上额外开个数组r…

【Python---六大数据结构】

🚀 作者 :“码上有前” 🚀 文章简介 :Python 🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬 Python---六大数据结构 往期内容前言概述一下可变与不可变 Number四种不同的数值类型Number类型的创建i…

深入解析鸿蒙系统的页面路由(Router)机制

鸿蒙系统以其独特的分布式架构和跨设备的统一体验而备受瞩目。在这个系统中,页面路由(Router)机制是连接应用各页面的关键组成部分。本文将深入探讨鸿蒙系统的页面路由,揭示其工作原理、特点以及在应用开发中的实际应用。 1. 实现…

OpenHarmony系统解决方案 - 配置屏幕方向导致开机动画和Launcher显示异常

问题环境 系统版本:OpenHarmony-3.2-Release 问题现象 配置设备默认方向,例如修改为横屏显示,修改文件display_manager_config.xml的buildInDefaultOrientation参数值为2(Orientation::HORIZONTAL)。 源码中文件位于foundation/window/win…

适用于电脑和手机的照片恢复工具指南

这是适用于 Android、iPhone、Mac 和 Windows 的最佳照片恢复应用程序的指南。 如果您不小心删除了一堆珍贵的照片,请不要担心! 恢复丢失的照片和数据实际上比您想象的要容易得多。 通过使用照片恢复应用程序,您可以“解锁”存储卡或硬盘驱…

php基础学习之文件包含

描述 在一个php脚本中,将另一个php文件包含进来,合作实现某种功能 这个描述看起来似乎和C/Java等语言的头文件/包有点类似,但本质是不一样的 打个比方: C/Java的头文件/包更像是一个工具箱,存放各种很完善的工具&#…

LabVIEW开发DUP实时监控系统

LabVIEW开发DUP实时监控系统 该项目采用虚拟仪器设计理念,以LabVIEW作为核心技术平台,开发了一套磁控溅射过程的实时监控系统。实现过程中关键参数的全面数据采集与处理,建立完整的历史数据库,以支持涂层技术的改进和系统向模糊控…