Lecture 1: Overview & Tokenization
核心主题:语言建模定义、分词粒度的权衡、BPE 算法详解。
1. 语言模型 (Language Modeling)
- 定义:语言模型是对词序列 的联合概率分布 进行建模。
- 范式:通常通过Next Token Prediction(预测下一个词)来实现,即 。
2. 分词策略 (Tokenization Spectrum)
如何在“词表大小 (Vocab Size)”与“序列长度 (Sequence Length)”之间寻找平衡?
- Word-level:词表过大(>100k),稀疏性高,存在 OOV (Out-of-Vocabulary) 问题。
- Character-level:词表小(~100),但序列过长,模型难以捕捉长距离语义依赖。
- Subword-level (主流):平衡方案。常用词(the, is)保留,生僻词拆解(un-friend-ly)。
3. Byte-Pair Encoding (BPE)
- 算法逻辑:一种迭代式的压缩算法。
- Training:从字符集开始,统计相邻 pair 频率 合并最高频 pair 加入词表 循环直至达到目标 Vocab Size。
- Inference:利用训练好的 Merge Rules,按优先级将新文本合并为 Token 序列。
- Byte-level BPE (关键改进):
- 问题:直接处理 Unicode 字符会导致基础词表过大(>140k字符)。
- 解决方案:将文本先编码为 UTF-8 Bytes,在字节层面运行 BPE。
- 优势:基础词表固定为 256(0-255),彻底消除
<UNK>,任何 Unicode 字符串都能被编码。
Lecture 2: PyTorch & Resource Accounting
核心主题:Transformer 的工程实现技巧、显存与算力的理论估算。
1. PyTorch 工程实践
- Einsum (爱因斯坦求和):
- 强烈推荐使用
torch.einsum或einops。 - 优势:替代晦涩的
view/transpose,显式表达维度变化,减少 Shape Mismatch 错误。 - Example:
einsum('b s h d, b s h d -> b s h', q, k)直观表示 Attention score 计算。
- 强烈推荐使用
2. 显存估算 (Memory Accounting)
训练大模型时,显存不仅存权重,还有更多隐性开销。
- Model Weights (): bytes/param (FP32).
- Gradients: bytes/param.
- Optimizer States (AdamW): 大头。维护 (一阶矩) 和 (二阶矩),需 bytes/param。
- 注:仅模型和优化器就占用了 的显存。
- Activations: 前向传播产生的中间结果(供反向传播用)。
- 与 Batch Size 和 Sequence Length 成正比。
- Transformer 中 Attention 矩阵和 FFN 中间层是显存消耗大户。
3. 算力估算 (Compute/FLOPs)
- 矩阵乘法法则: 矩阵相乘需要 FLOPs。
- Transformer 经验公式:
- 对于参数量为 的模型,训练计算量约为:
- = 训练数据的总 Token 数。
- 分解:前向传播 ,反向传播 。
- 应用:用于估算在特定硬件(如 H100)上训练特定规模模型(如 GPT-2 XL)所需的时间。