当前位置:   article > 正文

模型训练算力评估相关概念(自用)

模型训练算力评估相关概念(自用)

算力单位

FLOPS

        Floating Point Operations per Second,指每秒浮点运算次数,用于评估计算速度的单位。主要作为用来描述硬件性能的指标,比如评估某型号GPU的计算算力,即能够产生多少算力速度给模型。同时也可以作为描述深度学习模型在GPU实际运行时速度的单位,即模型在GPU提供多少算力速度下进行训练、推理的任务

        这里所谓的“浮点运算”,实际上包括了所有涉及小数的运算。这类运算在某类应用软件中常常出现,而它们也比整数运算更花时间。现今大部分的处理器中,都有一个专门用来处理浮点运算的“浮点运算器”(FPU)。也因此FLOPS所量测的,实际上就是FPU的执行速度。而最常用来测量FLOPS的基准程式(benchmark)之一,就是Linpack。

        参数量定义:模型参数量是指一个神经网络或机器学习模型中可以进行学习和调整的参数的数量。这些参数包括权重(weights)和偏置(biases),它们在训练过程中会不断地更新以优化模型的性能。

        显卡根据价格算力从0.7TFLOPS/s到10TFLOPS/s不等。

单位换算关系:

  1. 1 MFLOPS(megaFLOPS)等于每秒一百万(=10^6)次的浮点运算。
  2. 1 GFLOPS = 10^3 MFLOPS(gigaFLOPS)等于每秒十亿(=10^9)次的浮点运算。
  3. 1 TFLOPS = 10^3 GFLOPS(teraFLOPS)等于每秒一万亿(=10^12)次的浮点运算,(1太拉)。
  4. 1 PFLOPS = 10^3 TFLOPS(petaFLOPS)等于每秒一千万亿(=10^15)次的浮点运算。
  5. 1 EFLOPS = 10^3 PFLOPS(exaFLOPS)等于每秒一百京(=10^18)次的浮点运算。
  6. 1 ZFLOPS = 10^3 EFLOPS(zettaFLOPS)等于每秒十万京(=10^21)次的浮点运算。

FLOPs

        FLOPs(Floating Point Operations)指浮点运算次数,可以理解为描述总计算量的单位。从拼写上容易与FLOPS弄混、注意最后字母是小写s。FLOPs可以用来衡量一个模型/算法的总体复杂度(即所需要计算量),在论文中比较流行的单位是GFLOPs:1 GFLOPs=10^9 FLOPs。 比如我们要估算一个卷积神经网络总复杂度时使用的单位就是FLOPs。

        另外在工业界模型实际部署中,常常使用QPS (queries per second,即每秒处理的个数)作为指标来评估模型每秒能够处理的速度,即QPS可以用来描述一个模型或者服务在GPU尽可能打满的情况下每秒能处理查询的个数,通常作为线上服务或者机器的性能指标

LLM的FLOPs推导与估算

        FLOPs的作用是? 当我们训练一个模型时(比如LLM),通常通过计算它的FLOPs与使用的GPU的FLOPS,大致估算训练时间。那么如何得到一个模型的FLOPs呢?通常可以通过其网络结构估算或者使用第三方包去获取。

估算

        公式:训练时间=\frac{6TP}{nX}

        其中,T 是总 token 数,P 是参数量,n 是显卡数量,X 是 FLOPS(每张卡每秒实际做的浮点运算数,一般在理论上限的50%以上,可以通过samples/s换算,后文有提供计算方式。)

 例:我想要训练一个 LLaMa2-13B,数据大小为300G(大概100B Tokens),40张A100,FLOPS 实际值大概为180T(利用率180/312=57%)

训练时间= \frac{6*100*10^9*13*10^{9}}{40*180*10^{12}}   (B是Billion/十亿(10^{9})的意思,13B是130亿参数)

推导过程:

        分子:模型的总FLOPs 指的是浮点运算(加法,乘法)次数。

        强假设:

  •   FLOPs 只和权重矩阵的矩阵乘法有关。权重矩阵的矩阵乘法是主要计算,其余的计算(Layer Norm,残差,激活函数,softmax,甚至 Attention)都可以先忽略不计。
  • 不同bath_size下 GPU的FLOPS是恒定的假设

       1、 假设输入矩阵X(input,h),权重矩阵W(h,output)。对于该结果矩阵的每个元素,都是做 h 次乘法(按位相乘),然后再做h次加法(把相乘的结果相加,其实是h-1次)得来的。所以最后的总计算量为f1= input * output * (2 * h)【一次加法一次乘法】;

        2、对于每个step,假设数据量为batch_size(如句子数目)*seq_len(序列长度:每个句子用几个token表示)模型的前向传播 FLOPs = 2 * batch_size * seq_len * 参数量【参数量对应h*output, batch_size * seq_len对应input】;

        3、反向传播的计算量是前向传播的2倍(对于 h = XW,需要分别求出X的导数和W的导数)

一次完整的前向 + 后向的 FLOPs = 6 * batch_size * seq_len * 参数量

        4、假设总共需要训练 steps 步, FLOPs = 6 * steps * batch_size * seq_len * 参数量

其中 steps * batch_size * seq_len 就是语料的 Token 数量 T。

        5、得到 FLOPs = 6 * T * P

        6、服务器一共有n张卡,每张卡每秒做 X 次运算,得到总训练时间=\frac{6TP}{nX}

(未完待续)

【参考资料】

训练模型算力的单位:FLOPs、FLOPS、Macs 与 估算模型(FC, CNN, LSTM, Transformers&&LLM)的FLOPs - 知乎 (zhihu.com)
转载:算力计算-CSDN博客

LLM训练指南(二):模型参数、计算量、显存、计算时间计算 - 知乎 (zhihu.com)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/362918
推荐阅读
相关标签
  

闽ICP备14008679号