从零设计一个支持多机多卡的大模型训练系统,是一个典型的系统设计题。
核心目标是:在给定硬件资源下,尽可能高效、稳定地训练尽可能大的模型。
需要回答三个层面的问题:
同时还要考虑一系列工程问题:容错、检查点、数据加载、监控、调优、成本等。
下面按设计流程展开。
| 并行方式 | 切分对象 | 通信特点 | 适合位置 |
|---|---|---|---|
| 数据并行 DP | 数据 | 梯度 All-Reduce | 最外层 |
| 张量并行 TP | 层内参数 | 高频、高通信量 | 节点内 |
| 流水线并行 PP | 层间切分 | 点对点激活传输 | 跨节点 |
假设有 $N$ 张卡,希望配置:
$$ \text{TP} \times \text{PP} \times \text{DP} = N $$
选择步骤:
第一步,根据单层大小确定 TP:
第二步,根据层数和显存确定 PP:
第三步,剩余用 DP:
$$ \text{DP} = \frac{N}{\text{TP} \times \text{PP}} $$
假设 64 张 GPU,每个节点 8 卡:
总卡数:
$$ 8 \times 4 \times 2 = 64 $$
合计约 $16\Psi$ + 激活值。
优先级从低代价到高代价:
以 70B 模型为例:
| 后端 | 适用场景 | 特点 |
|---|---|---|
| NCCL | NVIDIA GPU | 高性能,GPU 首选 |
| Gloo | CPU、异构 | 支持 CPU,性能一般 |
| MPI | HPC、传统集群 | 成熟,配置复杂 |
| RCCL | AMD GPU | ROCm 生态 |
假设训练 70B 模型,64 张 A100 80GB,8 节点 × 8 卡,节点内 NVLink,节点间 InfiniBand。
$$ 8 \times 4 \times 2 = 64 $$
这是一道很好的大模型训练系统设计面试题,适合考察候选人对分布式训练全栈的理解。它既能考察并行策略和显存优化的理论,也能延伸到通信、容错、监控等工程实践。如果候选人能把并行策略选择、显存优化组合、通信后端选型以及关键工程问题都讲清楚,并能结合具体模型和硬件做量化分析,基本可以判断其具备大模型训练系统设计的扎实能力。
评论专区
评论加载中...登录后即可发表评论