上篇文章链接 LLM 参数,显存,Tflops? 训练篇(2) (qq.com)

      上上篇文章链接 LLM 参数,显存,Tflops? 训练篇(1) (qq.com)

      书接前文

      上节课我们推导出来了算力的公式,主要是前向计算损失函数的


​LLM 参数,显存,Tflops? 训练篇(3)_矩阵乘法

       其中

L: Transfomer有多少层
H:代表两个意义,第一个意义是hiddensize的维度,第二个就是token被embedding以后的维度,这两值本来也相等

h: 小写的h代表多头注意力的数量,即有几个attention 头

B:batchsize

S:序列的长度,比如GPT 2K,LLama2 4K,就是这个东西

V:  词表里词的数量

      以上就是比较正式的推断一个完整前向训练的TFLOPs的公式

      而我们实际干活的时候,不会像我这么认真算(我这个其实大家能掌握最好,因为后面可以做到不测试的情况下,推算集群化之后的单卡实际TFlops能力,是不是惊为天人,现在不讲,以后讲

​LLM 参数,显存,Tflops? 训练篇(3)_深度学习_02

),简单点就可以了

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

      而我们做反向求导的时候呢,你又得有Loss算梯度又得算新weight然后更新,所以是前向计算的两倍,这就是要乘以4

      

​LLM 参数,显存,Tflops? 训练篇(3)_深度学习_03

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

     

      感兴趣可以自己推算一下,用算力/模型参数,发现基本约等于2

​LLM 参数,显存,Tflops? 训练篇(3)_深度学习_04

,我们的目的是快速估算的话,那够用了

      我们以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,即

​LLM 参数,显存,Tflops? 训练篇(3)_矩阵乘法_05

         然后我们算一下

        实际算力=GPU总数*单个GPU算力*单个GPU利用率

       之所以乘以GPU的利用率是因为,不太可能把它打满,尤其是多机多卡的时候,受限于通信和显存的问题,比算力本身严重,一般我们认可百分之30到百分之50吧,在多机多卡的环境下

       A100的dense Tflops的算力是312,然后我们按利用率45%算,所以, 总算力是

​LLM 参数,显存,Tflops? 训练篇(3)_深度学习_06

       上面的式子是分子,下面的式子是分母,分子分母相除,然后除以3600秒,除以24小时,约等于21.9天,基本上符合原著21天的实际水平

​LLM 参数,显存,Tflops? 训练篇(3)_损失函数_07

​LLM 参数,显存,Tflops? 训练篇(3)_损失函数_08

​LLM 参数,显存,Tflops? 训练篇(3)_矩阵乘法_09

        刚回北京,有点累了,先更这么多吧,下篇讲静态占用现存和激活占用现存

        给读者大爷们献上九寨沟美照一张

​LLM 参数,显存,Tflops? 训练篇(3)_深度学习_10

       

​LLM 参数,显存,Tflops? 训练篇(3)_损失函数_11