[斯坦福2025春季新课CS336:从头开始构建大模型]自学笔记(9-11)

详解Scaling laws

缩放定律研究的关系包括:数据与表现;数据与模型大小;超参数与表现

缩放定律是为了获取数据、模型超参数与表现间的关系,尽量避免大规模实验

  • Q:实际中,我们数据有限,重复的数据是如何影响缩放的?
  • 可以依据定律,决定训练的epoch

考虑到重复的数据价值较少。数据选择更适合缩放。本质是在重复的好数据和新的差数据间权衡

增加不同的参数(embedding/非embedding)带来的损失变化不同,如下图
1767166981443

scaling law可以指导小模型上的最优学习率,迁移到大模型

详解模型推理

如何衡量推理的性能

  • TTFT(Time To First Token),用户需要等多久才能看到生成的内容
  • Latency(second/token):每个token的生成时间
  • Throughput(token/second):每秒生成多少个token

推理的两个阶段

  1. 预填充(Prefill):给定提示,将其编码成向量(可并行化,如同训练过程)
  2. 生成(Generation):生成新的响应token(顺序生成)

低延迟选择batch size=1,减少每个token的生成时间
高吞吐量选择更大的batch size,提升每秒生成的token数量

KVCache

KVCache:对于每个seq(B),token(S),layer(L),head(H),head_dim(D_head),存储key和value的缓存
如何减少KVCche的存储开销?

  • Grouped Query Attention(GQA):减少KV的头的数量。类似的还有MQA、MLA
  • Cross layer attention(CLA):跨层共享KVCache
  • Local attention:只缓存最近的K个token,保持KVCache的大小不变,不会随着序列长度增长。有点像稀疏注意力机制
  • Linear attention:先计算KV点积,再与Q计算,复杂度为\(O(Nd^2)\),相较于 vanilla attention \(O(N^2d)\)减少计算量

其他的加速推理的方法:

量化

  • FP32 训练常用的精度

  • BF16 默认推理精度

  • FP8 [-240, 240] 可以用来训练

  • INT8 [-128, 127] 精度更低,但速度比FP8块(仅在推理时这样)

  • INT4 [-8, 7] 速度更快,精度更低

  • QAT:Quantization Aware Training,量化感知训练。用量化进行训练。

  • PTQ:Post Training Quantization,训练完成后进行量化。

量化过程,先确定量化的最大值[-127, 127]
找出量化前的最大值,然后将量化最大值 / 量化前最大值,得到量化比例。

量化前的值每个乘上比例,得到量化结果

1767411204777

对于异常值需要找出,并单独处理

剪枝

  1. 对于一个大模型,确定哪些是重要的{layer, head, hidden dimension}。重要的层依据是:输出范数大,attention score不是均匀分布。或者在训练时Mask后,损失/困惑度提升
  2. 剪去不重要的层或参数。
  3. 然后再使用原来的模型对剪枝模型进行蒸馏

无损压缩

以上的方法都会损失精度
Speculative Sampling:

  1. 使用一个更小、更快的draft model生成少量token(e.g., 4)
  2. 使用target model 并行预测(很快,就像prefill),并接受符合要求的token

1767412232686

Speculative Sampling对draft model的改进

  1. Medusa:draft model并行生成多个token
  2. Eagle:从target model获取高层次feature,输入到 draft model 生成

工程上的优化

Continuous Batching

  • 问题:推理时不像训练,有一整个batch的token。推理时,每个请求到达和完成的时间不同
  • 解决方法:decode step by step,以 token 为单位进行增量解码,批次成员可动态进出。新的请求到来时(先prefill)再加入batch 进行decode,不用等到生成完成。并移除完成的请求

Page attention

  • 问题:token生成的数量不可预见,会造成内存碎片
  • 解决方法:将KVCache从序列拆分为不连续的block,通过页表管理块的分配与回收
  • 进一步,如果前缀相同,可以增加一个指针共用KVCache

如何用好Scaling laws

MuP(Maximal Update Parametrization,也叫\(\mu P\)):MuP不研究什么是最优的超参数,只研究最优超参数随着模型尺度的变化规律,所以我们需要在某个小模型上搜索最优的超参数组合,然后迁移到大模型上,这就是MuP的使用场景和使用方法。下图展示了参数量改变时,如何修改超参数:
1767432626156
参考文献

但MuP不是必要的,DeepSeek使用了固定的学习率

缩放后还是有一个全局学习率,但是每层会被不同的系数缩放:μP 使不同层/参数类别具有不同的学习率有效尺度(scaled learning rate)

\(\frac{Token数量}{模型参数}=20\) 是Chinchilla的一个结论,但不是强制约束,大可以增加这个比值

常见的学习率调整策略: Warmup-Stable-Decay (WSD) Paradigm

posted @ 2026-01-10 11:51  片刻的自由  阅读(71)  评论(0)    收藏  举报