上篇文章链接 LLM 参数,显存,Tflops? 训练篇(2) (qq.com)
上上篇文章链接 LLM 参数,显存,Tflops? 训练篇(1) (qq.com)
书接前文
上节课我们推导出来了算力的公式,主要是前向计算损失函数的
其中
L: Transfomer有多少层
H:代表两个意义,第一个意义是hiddensize的维度,第二个就是token被embedding以后的维度,这两值本来也相等
h: 小写的h代表多头注意力的数量,即有几个attention 头
B:batchsize
S:序列的长度,比如GPT 2K,LLama2 4K,就是这个东西
V: 词表里词的数量
以上就是比较正式的推断一个完整前向训练的TFLOPs的公式
而我们实际干活的时候,不会像我这么认真算(我这个其实大家能掌握最好,因为后面可以做到不测试的情况下,推算集群化之后的单卡实际TFlops能力,是不是惊为天人,现在不讲,以后讲
),简单点就可以了
由于我们深度学习每次前向计算,就是算矩阵乘法,矩阵乘法就是一次加一次乘,一个parameters,要对应2次浮点计算,所以要乘以2
而我们做反向求导的时候呢,你又得有Loss算梯度又得算新weight然后更新,所以是前向计算的两倍,这就是要乘以4
那也就意味着完成每个参数,都过一遍所有Token的情况下,也就是一个epcho,要经过6次浮点运算
感兴趣可以自己推算一下,用算力/模型参数,发现基本约等于2
,我们的目的是快速估算的话,那够用了
我们以LLama-65B为例,因为它论文公开过训练时间
When training a 65B-parameter model, our code processes around 380 tokens/sec/GPU on 2048 A100 GPU with 80GB of RAM. This means that training over our dataset containing 1.4T tokens takes approximately 21 day
Meta的LLama65B,用了2048块A100 80G,1,4T的tokens
我们先算一下
总需要的算力=6*参数*总token,即
然后我们算一下
实际算力=GPU总数*单个GPU算力*单个GPU利用率
之所以乘以GPU的利用率是因为,不太可能把它打满,尤其是多机多卡的时候,受限于通信和显存的问题,比算力本身严重,一般我们认可百分之30到百分之50吧,在多机多卡的环境下
A100的dense Tflops的算力是312,然后我们按利用率45%算,所以, 总算力是
上面的式子是分子,下面的式子是分母,分子分母相除,然后除以3600秒,除以24小时,约等于21.9天,基本上符合原著21天的实际水平
刚回北京,有点累了,先更这么多吧,下篇讲静态占用现存和激活占用现存
给读者大爷们献上九寨沟美照一张