LLM - 大模型 ScallingLaws 的指导模型设计与实验环境(PLM) 教程(4)

欢迎关注我的CSDN:https://spike.blog.csdn.net/

本文地址:https://spike.blog.csdn.net/article/details/145323420

免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。


Scaling Laws (缩放法则) 是大模型领域中,用于描述 模型性能(Loss) 与 模型规模N、数据量D、计算资源C 之间关系的经验规律,揭示在大模型中,随着模型参数数量、数据集大小和计算资源的增加,模型性能的变化模式,指导更高效地分配资源,优化模型训练过程,实现更好的性能。这些规律不仅有助于预测不同规模模型的表现,还能为模型设计和训练提供理论依据,是推动大模型发展和应用的重要理论基础。

使用 ScalingLaws 指导模型设计,验证模型效果,超过根据经验设计的模型,以及介绍模型的训练环境与超参数。

系列文章:

  1. 大模型 ScallingLaws 的 C=6ND 公式推导
  2. 大模型 ScallingLaws 的 CLM 和 MLM 中不同系数
  3. 大模型 ScallingLaws 的迁移学习与混合训练
  4. 大模型 ScallingLaws 的指导模型设计与实验环境

1. ScalingLaws 指导模型设计

验证根据 ScalingLaws 指导模型设计的效果:

根据 PLM 的 ScalingLaw 公式计算,CLM 模型,模型规模(N)是 7.2 B 7.2B 7.2B,数据量(D)是 265 B 265B 265B,计算量( C C C) 是 1.14 × 1 0 22 1.14 \times 10^{22} 1.14×1022,即输入计算量,输出模型规模与数据量,公式如下:

N = ( 1.26 × 1 0 − 3 ) × C 0.578 N = 1.26 × 1 0 − 3 × ( 1.14 × 1 0 22 ) 0.578 = 7.067 × 1 0 9 D = ( 1.23 × 1 0 2 ) × C 0.422 D = 1.23 × 1 0 2 × ( 1.14 × 1 0 22 ) 0.422 = 250 × 1 0 9 \begin{align} N &= (1.26 \times 10^{-3}) \times C^{0.578} \\ N &= 1.26 \times 10^{-3} \times (1.14 \times 10^{22})^{0.578} \\ &= 7.067 \times 10^9 \\ D &= (1.23 \times 10^{2}) \times C^{0.422} \\ D &= 1.23 \times 10^{2} \times (1.14 \times 10^{22})^{0.422} \\ &= 250 \times 10^9 \\ \end{align} NNDD=(1.26×10−3)×C0.578=1.26×10−3×(1.14×1022)0.578=7.067×109=(1.23×102)×C0.422=1.23×102×(1.14×1022)0.422=250×109

Protein 的 CLM 模型公式,参考:大模型 ScallingLaws 的 CLM 和 MLM 中不同系数(PLM),使用 Latex 计算数值,可以使用 SymboLab 工具。

根据 PLM 的 ScalingLaw 公式计算,MLM 模型,模型规模(N)是 10.7 B 10.7B 10.7B,数据量(D)是 260 B 260B 260B,计算量( C C C) 是 1.68 × 1 0 22 1.68 \times 10^{22} 1.68×1022,即输入计算量为,输出模型规模与数据量,公式如下:

N = ( 6.19 × 1 0 − 8 ) × C 0.776 N = ( 6.19 × 1 0 − 8 ) × ( 1.68 × 1 0 22 ) 0.776 = 10.93 × 1 0 9 D = ( 2.02 × 1 0 6 ) × C 0.230 D = ( 2.02 × 1 0 6 ) × ( 1.68 × 1 0 22 ) 0.230 = 261 × 1 0 9 \begin{align} N &= (6.19 \times 10^{-8}) \times C^{0.776} \\ N &= (6.19 \times 10^{-8}) \times (1.68 \times 10^{22})^{0.776} \\ &= 10.93 \times 10^9 \\ D &= (2.02 \times 10^{6}) \times C^{0.230} \\ D &= (2.02 \times 10^{6}) \times (1.68 \times 10^{22})^{0.230} \\ &= 261 \times 10^9 \\ \end{align} NNDD=(6.19×10−8)×C0.776=(6.19×10−8)×(1.68×1022)0.776=10.93×109=(2.02×106)×C0.230=(2.02×106)×(1.68×1022)0.230=261×109

与表格的数值类似。

在 MLM 与 CLM+MLM 的对比实验中,根据 PLM 的 ScalingLaw 公式计算,MLM 模型规模(N)是 470 M 470M 470M,数据量(D)是 106 B 106B 106B,计算量( C C C) 是 3 × 1 0 20 3 \times 10^{20} 3×1020,即输入计算量为,输出模型规模与数据量,计算结果 103 × 1 0 9 ∼ 106 B 103 \times 10^9 \sim 106B 103×109∼106B,公式如下:

N = ( 6.19 × 1 0 − 8 ) × C 0.776 N = ( 6.19 × 1 0 − 8 ) × ( 3 × 1 0 20 ) 0.776 = 480 × 1 0 6 D = ( 2.02 × 1 0 6 ) × C 0.230 D = ( 2.02 × 1 0 6 ) × ( 3 × 1 0 20 ) 0.230 = 103 × 1 0 9 \begin{align} N &= (6.19 \times 10^{-8}) \times C^{0.776} \\ N &= (6.19 \times 10^{-8}) \times (3 \times 10^{20})^{0.776} \\ &= 480 \times 10^6 \\ D &= (2.02 \times 10^{6}) \times C^{0.230} \\ D &= (2.02 \times 10^{6}) \times (3 \times 10^{20})^{0.230} \\ &= 103 \times 10^9 \\ \end{align} NNDD=(6.19×10−8)×C0.776=(6.19×10−8)×(3×1020)0.776=480×106=(2.02×106)×C0.230=(2.02×106)×(3×1020)0.230=103×109

在 CLM+MLM 模型中,MLM 模型规模(N)是 470 M 470M 470M,计算量( C C C) 是 3 × 1 0 20 3 \times 10^{20} 3×1020 一致,数据量(D)是 106 B 106B 106B 不同,计算结果 18.83 × 1 0 9 ∼ 21 B 18.83 \times 10^9 \sim 21B 18.83×109∼21B,公式如下:

D t = k × 1 D f α × 1 N β = 3.65 × 1 0 5 × 1 D f − 0.137 × 1 N − 0.369 D t = 3.65 × 1 0 5 × 1 ( 85 × 102 4 3 ) − 0.137 × 1 ( 480 × 102 4 2 ) − 0.369 = 18.83 × 1 0 9 \begin{align} D_{t} &= k \times \frac{1}{D_{f}^{\alpha}} \times \frac{1}{N^{\beta}} \\ &= 3.65 \times 10^5 \times \frac{1}{D_{f}^{-0.137}} \times \frac{1}{N^{-0.369}} \\ D_{t} &= 3.65 \times 10^5 \times \frac{1}{(85 \times 1024^3)^{-0.137}} \times \frac{1}{(480 \times 1024^2)^{-0.369}} \\ &= 18.83 \times 10^9 \end{align} DtDt=k×Dfα1×Nβ1=3.65×105×Df−0.1371×N−0.3691=3.65×105×(85×10243)−0.1371×(480×10242)−0.3691=18.83×109

与表格的数值类似。

2. ScalingLaws 模型效果

在 CLM 模型中,PROGEN2-xlarge(6.4B) 与 Our-7.2B 对比,在 序列生成的困惑度(Perplexity)、结构预测的 pLDDT、FoldSeek 搜索的 TM-Score、聚类(Cluster) 的分布 中,这 4 个领域的实验结果,Our-7.2B 都优于 PROGEN2-xlarge(6.4B)。如图:

在 MLM 模型中,ESM-2 (3B) 与 Ours-10.7B 对比,使用 LoRA 进行微调下游任务,包括 接触预测(Contact Prediction)、折叠分类(Fold Classification)、荧光蛋白(Fluorescence) 的 Spearman 相似度,这 3 个领域的实验结果,Our-10.7B 都优于 ESM-2(3B),同时,470M 模型的迁移学习优于从头训练。如图:

3. 实验参数

核心的实验参数,包括 大规模数据集(UniMeta200B)、MLM的掩码率(Mask Ratios)、MLM的下游任务(Downstream)。

3.1 大规模数据(UniMeta200B)

验证 大规模数据集(UniMeta200B) 的有效性,优于小批量数据的过采样(UR50/S),采样方法包括 Bootstrap、Local Shuffle、Global Shuffle,即:

  • Bootstrap:从 UR50/S 数据集中有放回地处理了200B Tokens,在每个训练周期中,随机抽取数据集的 65%。
  • Local Shuffle:每个 Epoch 都使用全部的 UR50/S Tokens,进行 Shuffle。
  • Global Shuffle:将重复的全部 UR50/S Tokens,进行 Shuffle,分配至每个 Epoch。

3.2 掩码率(Mask Ratios)

验证 掩码率(Mask Ratios) 的超参,掩码率 10%~20% 的效果最好,最终选择 15% 的掩码率,同时,满足80-10-10 策略,在 15% 的掩码部分,其中 80% 替换成掩码,10% 随机替换、10% 保持不变,同时验证,下游任务中,也是 15% 掩码率最好,即:

3.3 下游任务(Downstream)

验证 MLM 与 CLM 在下游任务(downstream) 的效果,即蛋白质接触预测(Contact Prediction),显示相同计算量和相同的 Loss 情况下,MLM 优于 CLM,微调方法 LoRA 优于 Probing,即:

P@L/5Precision at L/5,其中 L 代表蛋白质的序列长度,计算的是在前 L/5 最高预测概率中,预测正常的比例。

4. ScalingLaws 实验环境

实验环境包括:

  1. 设备 带有 NVLink 的 Ampere A100 GPU (80G),GLM 框架,训练 1M(Million) 小时的 GPU,即 768 卡,训练 ( 1 × 1 0 6 h ) / ( 768 ) / ( 24 h / D ) ≈ 55 D (1 \times 10^{6}h) / (768) / (24h/D) \approx 55D (1×106h)/(768)/(24h/D)≈55D
  2. 小模型(<2B) 只使用 数据并行(Data Parallelism),没有使用 模型并行(Model Parallelism) 和 流水线并行(Pipeline Parallelism)。
  3. 改进的 Transformer 架构:DeepNorm + LayerNorm、激活函数 GeLU、位置编码 RoPE
  4. 其他:
    1. FlashAttention
    2. 余弦衰减策略(Cosine Decay Strategy) + 预热(Warm-Up) 2.5%
    3. 序列长度1024 + <EOS>分隔符(Delimiter)
    4. AdamW
    5. BFloat16(Brain Floating Point 16-bit)
    6. 迁移学习:忽略预训练优化状态、预热 5%。

使用带有 NVLink 的 Ampere A100 GPU (80G) 完成所有实验,基于 DeepSpeed 和 Megatron 开发的 GLM 框架,总共使用大约 1M(Million) 小时的 GPU 计算时间,小模型(<2B) 主要使用 数据并行(Data Parallelism),没有使用 模型并行(Model Parallelism) 和 流水线并行(Pipeline Parallelism),简化部署。

使用改进的 Transformer 架构:

(1) 使用 DeepNorm + LayerNorm,即:

D e e p N o r m ( x ) = L a y e r N o r m ( α ⋅ x + N e t w o r k ( x ) ) DeepNorm(x) = LayerNorm(\alpha \cdot x + Network(x)) DeepNorm(x)=LayerNorm(α⋅x+Network(x))

其中,缩放因子 α \alpha α 的值为 ( 2 N ) 1 2 (2N)^{\frac{1}{2}} (2N)21, N N N 是模型的层数,即层数越深,原始输入的权重越高,例如 ( 2 × 70 ) 1 2 = 11.83 (2 \times 70)^{\frac{1}{2}}=11.83 (2×70)21=11.83

(2) 使用 激活函数 GeLU,即:

G e L U ( x ) = x ⋅ P ( X < = x ) = x ⋅ Φ ( x ) G e L U ( x ) = x ⋅ 1 + e r f ( x 2 ) 2 \begin{align} GeLU(x) &= x \cdot P(X<=x) = x \cdot \Phi(x) \\ GeLU(x) &= x \cdot \frac{1+erf(\frac{x}{\sqrt{2}})}{2} \end{align} GeLU(x)GeLU(x)=x⋅P(X<=x)=x⋅Φ(x)=x⋅21+erf(2 x)

其中, Φ ( x ) \Phi(x) Φ(x) 是标准正态分布的累积分布函数(CDF), e r f ( x ) erf(x) erf(x) 是高斯误差函数。

基于 Sigmoid 的近似公式,即:

G e L U ( x ) ≈ x ⋅ σ ( 1.702 x ) GeLU(x) \approx x \cdot \sigma(1.702x) GeLU(x)≈x⋅σ(1.702x)

PyTorch 源码:

python 复制代码
def gelu(x):
  return x * 0.5 * (1.0 + torch.erf(x / torch.sqrt(2.0)))

GeLU 图示:

(3) 使用 位置编码 RoPE,即:

P E ( p o s , k ) = c o s ( p o s 50000 0 k d m ) + i ⋅ s i n ( p o s 50000 0 k d m ) θ k = 1 50000 0 k d m P E ( p o s , k ) = c o s ( p o s ⋅ θ k ) + i ⋅ s i n ( p o s ⋅ θ k ) = e i ⋅ p o s ⋅ θ k PE_{(pos,k)} = cos(\frac{pos}{500000^{\frac{k}{d_{m}}}})+i\cdot sin(\frac{pos}{500000^{\frac{k}{d_{m}}}}) \\ \theta_{k} = \frac{1}{500000^{\frac{k}{d_{m}}}} \\ PE_{(pos,k)} = cos(pos \cdot \theta_{k})+i\cdot sin(pos \cdot \theta_{k})=e^{i \cdot pos \cdot \theta_{k}} PE(pos,k)=cos(500000dmkpos)+i⋅sin(500000dmkpos)θk=500000dmk1PE(pos,k)=cos(pos⋅θk)+i⋅sin(pos⋅θk)=ei⋅pos⋅θk

RoPE 参考:理解 旋转位置编码(RoPE)

(4) 使用 FlashAttention 加速训练过程,参考 FlashAttention 的 Safe-Softmax 与 One-Pass Tiling 计算

(5) 使用 余弦衰减策略(Cosine Decay Strategy) ,最大学习率(LR) 经验范围是 6 × 1 0 − 4 ∼ 1.2 × 1 0 − 4 6 \times 10^{-4} \sim 1.2 \times 10^{-4} 6×10−4∼1.2×10−4,衰减至 最大LR 的 0.1 倍,预热步数(warm-up) 是 2.5%。

(6) 序列长度 设置为 1024,序列通过 <EOS>分隔符(delimiter) 进行拼接。

(7) 优化器使用 AdamW,参数更新,即:

θ t + 1 = θ t − α v t + ϵ m t − λ θ t m t = β 1 m t − 1 + ( 1 − β 1 ) ∇ L ( θ t − 1 ) v t = β 2 v t − 1 + ( 1 − β 2 ) ∇ L ( θ t − 1 ) 2 \begin{align} \theta_{t+1} &= \theta_{t} - \frac{\alpha}{\sqrt{v_{t}}+\epsilon} m_{t} - \lambda\theta_{t} \\ m_{t} &= \beta_{1}m_{t-1} + (1-\beta_{1}) \nabla L(\theta_{t-1}) \\ v_{t} &= \beta_{2}v_{t-1} + (1-\beta_{2}) \nabla L(\theta_{t-1})^{2} \\ \end{align} θt+1mtvt=θt−vt +ϵαmt−λθt=β1mt−1+(1−β1)∇L(θt−1)=β2vt−1+(1−β2)∇L(θt−1)2

其中, m t m_{t} mt 是一阶矩估计(Mean), v t v_{t} vt 是二阶距估计(Variance), α \alpha α 是学习率。

超参数包括 4 个,即 β 1 \beta_{1} β1 是一阶矩衰减率(0.9), β 2 \beta_{2} β2 是二阶距衰减率(0.95), ϵ \epsilon ϵ 是小常数( 1 × 1 0 − 8 1 \times 10^{-8} 1×10−8), λ \lambda λ 是权重衰减系数(0.01)。

(8) 省略 Dropout,使用 BFloat16(Brain Floating Point 16-bit) 数据格式,即1位符号位、8位指数位、7位尾数位,FP16 是 1-5-10。BFloat16 比 FP16 的数值范围更大,精度降低,数值范围 − 3.4 × 1 0 38 ∼ 3.4 × 1 0 38 -3.4 \times 10^{38} \sim 3.4 \times 10^{38} −3.4×1038∼3.4×1038,即:

B F 1 6 m a x = 2 127 × ( 1 + 127 128 ) = 2 127 × 1.9921875 ≈ 3.4 × 1 0 38 B F 1 6 m i n = 2 − 126 × 1 128 = 2 − 133 ≈ 9.2 × 1 0 − 41 \begin{align} BF16_{max} &= 2^{127} \times (1 + \frac{127}{128}) = 2^{127} \times 1.9921875 \approx 3.4 \times 10^{38} \\ BF16_{min} &= 2^{-126} \times \frac{1}{128} = 2^{-133} \approx 9.2 \times 10^{-41} \end{align} BF16maxBF16min=2127×(1+128127)=2127×1.9921875≈3.4×1038=2−126×1281=2−133≈9.2×10−41

(9) 迁移学习,只使用模型,忽略预训练的优化状态,预热使用最大LR的 5% 总步数,学习剩余的 Tokens。

模型参数:

相关推荐
速融云1 小时前
汽车制造行业案例 | 发动机在制造品管理全解析(附解决方案模板)
大数据·人工智能·自动化·汽车·制造
AI明说1 小时前
什么是稀疏 MoE?Doubao-1.5-pro 如何以少胜多?
人工智能·大模型·moe·豆包
XianxinMao1 小时前
重构开源LLM分类:从二分到三分的转变
人工智能·语言模型·开源
Elastic 中国社区官方博客2 小时前
使用 Elasticsearch 导航检索增强生成图表
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
云天徽上2 小时前
【数据可视化】全国星巴克门店可视化
人工智能·机器学习·信息可视化·数据挖掘·数据分析
大嘴吧Lucy3 小时前
大模型 | AI驱动的数据分析:利用自然语言实现数据查询到可视化呈现
人工智能·信息可视化·数据分析
艾思科蓝 AiScholar3 小时前
【连续多届EI稳定收录&出版级别高&高录用快检索】第五届机械设计与仿真国际学术会议(MDS 2025)
人工智能·数学建模·自然语言处理·系统架构·机器人·软件工程·拓扑学
watersink3 小时前
面试题库笔记
大数据·人工智能·机器学习
Yuleave4 小时前
PaSa:基于大语言模型的综合学术论文搜索智能体
人工智能·语言模型·自然语言处理
数字化综合解决方案提供商4 小时前
【Rate Limiting Advanced插件】赋能AI资源高效分配
大数据·人工智能