本文 Decoder Only 模型的参数量和计算量,主要包括 Transformer结构、参数量方面、显存占用、计算量方面、参数量和计算量的关系、训练时间预估等等。
https://zhuanlan.zhihu.com/p/830885346
Decoder Only 模型的参数量和计算量
Transformer
参数量方面
- 大模型 = Embedding + 若干层 Transformer Layer
- 每层 Transformer Layer 主要由 self attention 层 和 MLP 层构成
self attention
计算 self attention 层的参数:
、偏置: 、偏置: 、偏置: 、偏置:
总计: self attention 层参数共,
MLP
计算 MLP 层的参数,以 GPT-3 为例子
- h – 4h – h
- 上投影
、偏置: 下投影,
、偏置:- 总计:MLP 层参数共,
LayerNorm
- 在 self attention 层和 MLP 层后均有一个 LayerNorm 层,每个LN层均包含两个可训练的参数,因此LN层共有参数
Embedding
- Embedding 层包含的参数:
- V 词库token大小
综上:
- 一层 transformer decoder layer 共包含参数:
- 一个包含l层 decoder layer 的生成模型,共包含参数:
eg: QWen-1.8B:l=24,h=2048,V=151851,按照上面的公式计算得到,参数量大约为1.92B
显存占用
推理
- 推理时,仅参数占用显存,每个fp16精度的参数占用2个byte,fp32精度的参数占用4个byte。
- 因此一个7B的fp16精度模型,大概需要占用
的显存
训练
以fp16方式训练时,训练过程中需要保存的数据有:
- 模型参数:fp16
- 参数梯度:fp16
- 优化器状态:fp32一阶动量、fp32二阶动量、fp32模型参数、fp32参数梯度
一个fp16的数据占用2个byte,fp32占用4个byte。因此,对于参数量为
eg:
一个7B的模型,大约需要
计算量方面
前置:对于矩阵
- 其中,
表示结果矩阵包含 个元素 表示每个元素需要经过 p 次加法和 p 次乘法计算得到
self attention
self attention 的计算量:假设输入数据的形式为
- eg:
, , 计算量
- eg:
具体计算量:
- 计算
: 三次 ,计算量为 - 计算
: ,结果是 ,计算量为 - 计算
: ,结果是 = ,计算量为 - 结果线性映射
: , 结果是 ,计算量为
总计,self attention 层的计算量共为,
MLP
MLP层的计算量可以表示为:
- 计算
,结果是 ,计算量为 - 计算
,结果是 ,计算量为
总计,MLP 层的计算量共为,
Embedding
隐藏向量映射到词表,运算量为 2bLhV
综上:
- 一层 transformer decoder 进行一次前向计算的计算量:
- 一个包含l层decoder layer的生成模型,对于其中一个batch,进行一次前向计算的计算量是
24bLh^2 + 4bL^2h
参数量和计算量的关系
在前向传播中,输出 token 总数为 bL,模型总参数量为
可以计算出,每个 token,每个参数需要的浮点数计算次数为
-
即,前向传播一次,每token、每个参数需要进行 2次浮点数运算 FLOPS,反向传播所需计算量是前向传播的2倍,因此前向+反响传播,每token、每个参数需要进行6次浮点数计算 FLOPS
以 GPT3-175B为例子,其参数 174600M,训练数据为300B,则训练所需要的总计算量为
训练时间预估
在实际训练中,为了节省中间激活的显存占用,通常会在反向传播时进行一次重新计算,因此会引入一次额外的前向传播,此时,一次完整的前向反向传播,每token每参数共需要进行8次浮点数运算。训练时间估计可以参考如下公式:
以GPT3-175B为例子,需要的训练时间为
文档信息
- 本文作者:huzixia
- 本文链接:https://huzixia.github.io/2024/10/05/decoder/
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)