一、目录
- 不同大小的模型,参数应该如何确定?
- scale law 预训练解析
- 模型参数、计算量、数据量大小的关系。
二、实现
- 不同大小的模型,参数应该如何确定?
- gpt3 不同大小模型参数:
- llama 系列 参数统计(根据版本不同,算法会发生改变,参数估算量不同,但隐藏层、层数、注意力头数等超参数相同)
- baichuan系列:
- qwen系列5. chatglm 系列
- scale law 预训练解析
以baichuan2 为例:
2.1 Log Flops: 什么意思?
Flops: 浮点运算次数。
2.2 为什么开始用1万亿token 训练,预测大模型时用2.6万亿 token 预测训练?
1万token 是自定义的,为了保证数据充足,宁可多,不可少的原则,进行训练,采用1T的tokens.
2.6万亿token 则是训练后,根据scale law 定律计算出来的。
2.3 10M、50M、100M 参数如何确定? 即如何确定才能保证符合scale law 定律。
见下文,scale law 反向推理。
2.4 scale law 操作流程:
1. 准备充足的数据,如1T;
2. 准备不同参数量的模型,并独立训练各个模型,使每个模型都训练到基本收敛。
3. 训练过程中,分别统计 loss 性能与flops 的关系、模型参数量与flops的关系(收敛时flops)、tokens 大小与计算量flops的关系。(tokens如何确定?)
- 根据绘图、预测大模型需要的tokens, 大模型的性能。
2.5 baichuan2 报告中,使用loss与flops的关系、模型参数量与flops的关系,预测大模型的性能loss、与数据量。
1. 准备充足的数据,如1T;
2. 准备不同参数量的模型,并独立训练各个模型,使每个模型都训练到基本收敛。
3. 训练过程中,分别统计 loss 性能与flops 的关系、模型参数量与flops的关系(收敛时flops)。
4. 拟合loss 与flops 曲线,并根据参数量与flops 的关系,计算tokens、loss。
如: 根据参数量与flops 的关系,获取flops 的大小,再根据scale law,C=6ND, 获取训练tokens.
参考:https://zhuanlan.zhihu.com/p/667489780
2.6 10M、50M、100M 参数如何确定?
根据scale law 定律,C=6ND, N~C^a, D~C^b, a+b=1。
超参数,实验确定?
- 模型参数、计算量、数据量大小的关系。
对于decoder-only 的模型,计算量C、模型参数N(除去embedding)、数据量大小D,三者关系为C=6ND
3.1 假设decoder 层为l, attention dim=d, attention feedward=d_ff, d_ff=4d, 求参数量:
self attention 包含Wq,Wk,Wv,Wo四个矩阵,参数为4d^2
MLP 层 W1=R^dd_ff, W2=R^d_ffd, 参数为2dd_ff=8d^2
总参数量为12ld^2
3.2 假设输入X=(Batch,seq_len,hidden),Batch=b, seq_len=s,hidden=d, 求计算量?
输入线性层:XWq,XWk,XWv 的参数量为 2bsdd3=6bsd^2
attention QK^T= 2bsds=2bds^2
score: SV=2bssd
输出层:2bsdd
MLP 层 XW1=2bsd4d
XW2=2bsd4d
所以decoder 总计算量为C=24lbsd2+4lbds2
优化时,反向计算是正向的两倍,全部计算量为C=3C_forward=72lbsd2+12lbds2.