大模型计算量纲

大模型计算量纲

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.rhkb.cn/news/258613.html

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

相关文章

随机过程及应用学习笔记(一)概率论(概要)

概率是随机的基础,在【概率论(概要)】这个部分中仅记录学习随机过程及应用的基本定义和结果。 前言 首先,概率论研究的基础是概率空间。概率空间由一个样本空间和一个概率测度组成,样本空间包含了所有可能的结果&…

【探索Linux】—— 强大的命令行工具 P.22(POSIX信号量)

阅读导航 引言一、POSIX信号量的基本概念二、信号量的相关操作1 . 初始化信号量sem_init ( )(1)原型(2)参数(3)返回值(4)示例代码 2 . 等待信号量(1)sem_wait…

Linux第56步_根文件系统第3步_将busybox构建的根文件系统烧录到EMMC

1、第1次将“rootfs”打包 1)、打开第1个终端,准备在“mnt”目录下创建挂载目录“rootfs”; 输入“ls回车” 输入“cd /mnt回车” 输入“ls回车”,查看“mnt”目录下的文件和文件夹 输入“sudo mkdir rootfs回车”,在“mnt”…

如何在30天内使用python制作一个卡牌游戏

如何在30天内使用python制作一个卡牌游戏 第1-5天:规划和设计第6-10天:搭建游戏框架第11-20天:核心游戏机制开发第21-25天:游戏界面和用户体验第26-30天:测试和发布附加建议游戏类型游戏规则设计界面设计技术选型第6-…

Linux操作系统基础(九):Linux用户与权限

文章目录 Linux用户与权限 一、文件权限概述 二、终端命令:组管理 三、终端命令:用户管理 1、创建用户 、 设置密码 、删除用户 2、查看用户信息 3、su切换用户 4、sudo 4.1、给指定用户授予权限 4.2、使用 用户 zhangsan登录, 操作管理员命令…

第五节 zookeeper集群与分布式锁_2

1.分布式锁概述 1.1 什么是分布式锁 1)要介绍分布式锁,首先要提到与分布式锁相对应的是线程锁。 线程锁:主要用来给方法、代码块加锁。当某个方法或代码使用锁,在同一时刻仅有一个线程执行该方法或该代码段。 线程锁只在同一J…

【LeetCode: 107. 二叉树的层序遍历 II + BFS】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

微信网页版能够使用(会顶掉微信app的登陆)

一、文件结构 新建目录chrome新建icons,其中图片你自己找吧新建文件manifest.json新建文件wx-rules.json 二、文件内容 对应的png你们自己改下 1、manifest.json {"manifest_version": 3,"name": "wechat-need-web","author…

用HTML、CSS和JS打造绚丽的雪花飘落效果

目录 一、程序代码 二、代码原理 三、运行效果 一、程序代码 <!DOCTYPE html> <html><head><meta http-equiv"Content-Type" content"text/html; charsetGBK"><style>* {margin: 0;padding: 0;}#box {width: 100vw;heig…

qml之Control类型布局讲解,padding属性和Inset属性细讲

1、Control布局图 2、如何理解&#xff1f; *padding和*Inset参数如何理解呢&#xff1f; //main.qml import QtQuick 2.0 import QtQuick.Controls 2.12 import QtQuick.Layouts 1.12 import QtQuick.Controls 1.4 import QtQml 2.12ApplicationWindow {id: windowvisible: …

单片机学习笔记---直流电机驱动(PWM)

直流电机介绍 直流电机是一种将电能转换为机械能的装置。一般的直流电机有两个电极&#xff0c;当电极正接时&#xff0c;电机正转&#xff0c;当电极反接时&#xff0c;电机反转 直流电机主要由永磁体&#xff08;定子&#xff09;、线圈&#xff08;转子&#xff09;和换向器…

DolphinScheduler安装与配置

DolphinScheduler概述 Apache DolphinScheduler是一个分布式、易扩展的可视化DAG工作流任务调度平台。致力于解决数据处理流程中错综复杂的依赖关系&#xff0c;使调度系统在数据处理流程中开箱即用。 DolphinScheduler的主要角色如下&#xff1a; MasterServer采用分布式无…

leetcode hot100 拆分整数

在本题目中&#xff0c;我们需要拆分一个整数n&#xff0c;让其拆分的整数积最大。因为每拆分一次都和之前上一次拆分有关系&#xff0c;比如拆分6可以拆成2x4&#xff0c;还可以拆成2x2x2&#xff0c;那么我们可以采用动态规划来做。 首先确定dp数组的含义&#xff0c;这里dp…

第13章 网络 Page738~741 13.8.3 TCP/UDP简述

libcurl是C语言写成的网络编程工具库&#xff0c;asio是C写的网络编程的基础类型库 libcurl只用于客户端&#xff0c;asio既可以写客户端&#xff0c;也可以写服务端 libcurl实现了HTTP\FTP等应用层协议&#xff0c;但asio却只实现了传输层TCP/UDP等协议。 在学习http时介绍…

C语言—函数

1.编写一个函数&#xff0c;通过输入一个数字字符&#xff0c;返回该数字29. /*1.编写一个函数&#xff0c;通过输入一个数字字符&#xff0c;返回该数字 */#include <stdio.h>//函数定义,返回类型为int int char_num(char c) {if(c > 0 && c < 9) //检查…

基于springboot智慧外贸平台源码和论文

网络的广泛应用给生活带来了十分的便利。所以把智慧外贸管理与现在网络相结合&#xff0c;利用java技术建设智慧外贸平台&#xff0c;实现智慧外贸的信息化。则对于进一步提高智慧外贸管理发展&#xff0c;丰富智慧外贸管理经验能起到不少的促进作用。 智慧外贸平台能够通过互…

leetcode206. 反转链表

leetcode206. 反转链表 题目 代码 新链表逐个存储 提取单个节点&#xff0c;添加到新链表的头结点处 class Solution:def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:new_node Nonecurrent headwhile current:rest current.nexttemp_head …

【2024】如何订阅Netflix奈飞?Netflix奈飞购买教程

【2024】如何订阅Netflix奈飞&#xff1f;Netflix奈飞购买教程 Netflix奈飞作为全球领先的在线流媒体平台之一&#xff0c;拥有丰富的影视资源和独家内容&#xff0c;成为了人们追剧的热门选择。本文将为您介绍如何订阅Netflix奈飞&#xff0c;并提供详细的购买教程&#xff0…

详解结构体内存对齐及结构体如何实现位段~

目录 ​编辑 一&#xff1a;结构体内存对齐 1.1对齐规则 1.2.为什么存在内存对齐 1.3修改默认对齐数 二.结构体实现位段 2.1什么是位段 2.2位段的内存分配 2.3位段的跨平台问题 2.4位段的应用 2.5位段使用的注意事项 三.完结散花 悟已往之不谏&#xff0c;知来者犹可…

Springboot+vue的社区养老服务平台(有报告)。Javaee项目,springboot vue前后端分离项目

演示视频&#xff1a; Springbootvue的社区养老服务平台&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot vue前后端分离项目 项目介绍&#xff1a; 本文设计了一个基于Springbootvue的前后端分离的社区养老服务平台&#xff0c;采用M&#xff08;model&…