考虑到资源,如何训练出最好的模型?

举例:给你一个 Common Crawl dump 和 32 H100s ,时间两周,你应该怎么做?

Basics 基础

分词器 Tokenizers

定义:一种能在字符串和整数序列之间进行转换的东西

整数序列是输入到实际模型中的内容。

字节对分词器 Byte-Pair Encoding (BPE) tokenizer

“无分词器方法”:这些方法直接处理原始字节,而不进行分词。并开发一种特殊的架构,直接接收原始字节。

但应用不广泛,所以我们还是用BPE分词。

模型架构 Architecture

Transformer

原始transformer:

一些变化:

1. 激活函数:ReLU、SwiGLU

SwiGLU是一种结合了Swish激活函数门控线性单元(GLU)的混合激活函数

2. 位置编码:Sinusoidal(正余弦位置编码)、RoPE(旋转位置编码)

3. 归一化:LayerNorm、RMSNorm(均方根归一化)

4. 归一化的位置:pre-norm versus post-norm(前归一化 / 后归一化)

5. MLP:可用dense、mixture of experts替换

6. Attention:full,sliding window,linear attention (全都试图防止二次增长)

7. 低纬attention:group-query attention(GQA)、multi-headd latent attention(MLA)

8. State-space models(基于空间的模型):Hyena

SSM(状态空间模型) 是一类基于 “动态系统状态演化” 的序列建模框架,核心是 “用‘状态更新’替代‘注意力的全局点积’”,能以O(L)的线性复杂度处理超长序列,是近年来替代 Transformer 处理长序列的热门方向。

训练 Training

1. 优化器:AdamW、Muon、SOAP

2. 学习率策略:cosine、WSD

3. Batch size:critical batch size(临界批次大小)

4. 正则化:dropout、weight decay

5. 超参数:(number of heads、隐藏维度)grid search

作业1

Systems 系统

GPU

发现:一个主要的瓶颈就是数据移动的成本

技巧:高效组织计算,通过最小化数据移动成本来最大化GPU的利用率

使用 CUDA、Triton、CUTLASS、ThunderKittens 这些工具 / 框架编写核函数

GPU核函数:

GPU 并行计算的核心执行单元,是运行在 GPU 上、由 CPU 发起调用的一段代码。它的设计目的是利用 GPU 大量计算核心的并行能力,高效处理大规模数据或复杂计算任务。

并行化 Parallelism

推理 Inference

推理的两个阶段:预填充(Prefill)和解码(Decode)

预填充:接收提示词,然后通过模型运行它,得到一些激活值

解码:逐个进行自回归生成token

预填充阶段(similar to training):tokens全都给出,可以一次性处理所有内容(天然适合并行处理,受限于计算能力

解码阶段:需要一次生成一个token,很难充分利用所有GPU(推理过程变得特殊和困难,主要是因为这种自回归解码方式,受限于内存

加速解码的方法

1. 使用cheaper model:通过模型剪枝,量化和蒸馏

2. Speculative decoding:用成本更低的 “draft” model 生成多个tokens,再利用完整模型进行并行打分(属于精确解码!)

3. 系统优化:KV caching, batching

作业2

Scaling laws 缩放定律

目标:小范围做实验,在大范围预测超参数 / loss

问题:给你一个FLOPs budget,你知道应该使用什么模型尺寸吗?

Compute-optimal scaling laws:

经验:tokens(D) = 20*parameter(N)

例如:1.4B 参数量的模型应该用 28B tokens 进行训练

作业3

Data 数据

Evaluation 评估方法

1. 困惑度(Perplexity):语言模型的 “教科书级” 评估指标

2. 标准化测试:如 MMLU、HellaSwag、GSM8K

3. 指令遵循能力:如 AlpacaEval、IFEval、WildBench

4. 提升测试时计算量:如 COT、集成学习

“测试时计算量” 指模型推理阶段的资源投入(如计算步数、并行规模)。通过增加计算量,可在不改变模型参数的情况下提升输出质量,是性价比高的优化手段。

5. 用语言模型当 “裁判”:评估生成式任务的质量

6. Full system: RAG、agents

Data curation 数据筛选

1. 数据不会凭空出现

2. 资源来源多样,存在一些 “垃圾” 数据

3. 能否依据合理使用原则,使用受版权保护的数据进行模型训练?

4. 可能需要通过授权获取数据

5. 数据格式多样,需要转化成纯文本

Data processing 数据处理

1. Transformation:将 HTML/PDF 格式转换为文本(保留内容、部分结构,进行重写)

2. Filtering:保留高质量数据,移除有害内容(通过分类器实现)

3. Deduplication(去重):节省计算资源,避免记忆重复内容,use Bloom filters or MinHash

作业4

Alignment 对齐

目标:

  • 使语言模型听从指令
  • 微调 the style:format、length、tone,etc.
  • 融入安全性考量:如 拒绝回答有害提问

两个阶段:监督微调(supervised finetuning)和 从反馈中学习(learning from feedback)

Supervised finetuning (SFT)

收集数据:prompt response pairs

进行监督学习

learning from feedback

目标:你可以利用更轻量级的标注形式,并让算法承担更多的工作

你可以用来学习的一种数据是偏好数据(Preference data),另一种是验证器(Verifiers)

Preference data

Data:使用模型给 prompt 生成多种 responses(e,g, [A,B])

用户提供偏好(e.g. A < B or A > B).

Verifiers

1. 规范的验证器:如用于 code ,math

2. 学习到的验证器:train against an LM-as-a-judge

Algorithms

1. 强化学习中的近端策略优化(PPO,Proximal Policy Optimization)

2. 直接策略优化(DPO):适用于偏好数据,实现更简洁

3. 组相对偏好优化(GRPO,Group Relative Preference Optimization):移除了价值函数

作业5

备注:所有作业部分后续会更新github链接

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐