TP 并行的通讯计算
张量并行(Tensor Parallelism, TP)就是为了处理“大权重”。
然而,TP 并非免费的午餐。它的核心矛盾在于:通过切分矩阵降低了显存消耗,却引入了极高频率的计算内通信。
1. 权重的切分(通信算子的引入)
张量并行的核心是将线性层 $Y = XW$ 进行切分。根据切分方向的不同,引入了不同的通信算子。
1.1 列并行 (Column Parallelism)
列并行将线性层的输出维度切开:把权重 $W$ 按列切分为
\(W = [W_1, W_2]\)
于是每块 GPU 只负责产出一段输出特征:
\(Y = XW = [XW_1, XW_2] = [Y_1, Y_2]\)
1.1.1 Forward
为了方便理解,我们同样假设有 2 块 GPU:
中间计...
NCCL 通信原语 (Primitives)
1 Broadcast
从 root rank 广播数据到所有设备。
接口:
ncclResult_t ncclBroadcast(const void* sendbuff, void* recvbuff,
size_t count, ncclDataType_t datatype,
int root, ncclComm_t comm, cudaStream_t stream)
2 Reduce
执行规约计算(如 max, min, sum),并将结果写入指定的 rank。
ncclResult_t ncclReduce(const void* sendbuf...
LLM 数据的过滤、去重
本讲:深入 mechanics
过滤(filtering)的算法工具:如何从海量原始数据里找“像目标数据”的子集
过滤的应用:语言识别、质量过滤、毒性过滤
去重(deduplication):从精确重复到近似重复(Bloom filter、MinHash、LSH)
1. 过滤(Filtering)总览:Target vs Raw
基本问题(算法模块)
给定小但高质量的“目标数据” T 与海量“原始数据” R
目标:在 R 中找到一个子集 T',使其“更像” T(但不要求与 T 完全相同)
对过滤算法的要求(Desiderata)
能从 T 泛化:希望 T 与筛出的 T' 不同,但风格/分布相近
极快:必须在巨大 R 上跑,吞吐量是第一约束
...
LLM 评估
0. 主题与结论预告
评测要回答的问题很朴素:在模型已经固定的情况下,它到底“好不好”?
不存在唯一正确的评测;必须先明确你想测量什么,再选择或设计评测。
不要只盯着汇总分数;要回到具体样本与模型预测,理解失败模式。
评测维度不止能力,还包括安全、成本、以及与真实使用场景的贴合度。
必须把“游戏规则”讲清楚:评的是方法,还是模型/系统(含提示词、工具、RAG、脚手架等)。
1. 分数与“氛围感”
1.1 基准分数
图:DeepSeek-R1 基准成绩
引用:DeepSeek-R1 论文(PDF)https://arxiv.org/pdf/2501.12948.pdf
...
LLM 推理(Inference)性能推导
1. 先把推理过程拆开:Prefill vs Decode
同一个模型,在推理时其实有两个阶段:
Prefill(预填充):把 prompt 一次性喂进去,算出每层的隐藏状态,同时把 K/V 写入 KV Cache。这个阶段对 prompt 的 token 可并行,形态更像训练,通常更接近 compute-bound。
Decode(生成/解码):自回归逐 token 生成。每一步只处理 “当前 1 个 token”,需要读取(并更新)已有的 KV Cache。这个阶段通常 memory-bound,决定了 tokens/s。
2. 符号约定
2.1 变量的定义
为了方便推导,定义变量:
B:batch size(并发请求数)
S:上下文长度(pr...
Scaling Laws:从幂律到 Chinchilla(以及训练配方)
旧方法:在大模型上直接调参(极度昂贵且缓慢)。
新方法(Scaling Laws):在小模型上调参,总结规律,然后外推(extrapolate)到大模型。
1. Scaling law 是什么:为什么 log-log 上是一条直线?
幂律(Power law)的核心形式:
\[\text{Loss} \approx A \cdot x^{-\alpha} + \text{(常数/下界)}\]
为简洁起见,本文把测试集上的 loss / error(如 test loss、generalization error)统称为 “Loss/误差”,不区分具体任务指标的常数差异。
在双对数坐标系中:
\[\log(\text{Loss}) \approx -\alpha \log(x...
大模型并行的数学推导
1. 为什么必须并行:瓶颈来自两类量
1.1 计算限制(Compute bound)
单卡算力有限;更关键的是训练吞吐不仅看 FLOPs,还看通信能否被掩盖(overlap)以及并行策略的同步频率(每层同步 vs 每步同步)。
1.2 显存限制(Memory bound)
显存消耗大体分三块:
1) 模型状态(model states):参数、梯度、优化器状态。
2) 激活(activations):为了反向传播需要保留的中间张量。
3) 临时张量/缓存(workspace / buffers):GEMM、通信 buffer、KV cache(推理/长上下文训练更明显)。
很多只看 1),但长序列/深层模型的 2) 往往更致命:哪怕 ZeRO-3 把模型状态切到很省,激活仍可能...
共计 167 篇文章,21 页。