真实面经题目 · 原创解析
单机多卡和多机多卡训练的核心差异是什么,如何根据互联拓扑、通信开销和并行策略做选择?
这道题考察分布式训练的系统判断。单机多卡和多机多卡的差异不只是 GPU 数,而是互联拓扑、通信延迟、带宽、故障域、调度、存储和并行策略。好答案要能按显存瓶颈、计算/通信比、batch、模型规模和网络条件选择 DDP、FSDP/ZeRO、张量并行、流水线并行或组合方案。
单机多卡主要依赖 PCIe、NVLink、NVSwitch 等机内互联,延迟低、带宽高、调试简单;多机多卡要跨节点网络,如 IB、RoCE 或高速以太网,通信更慢,还要处理节点环境、网络抖动、分布式存储、容错和调度。选择时先看瓶颈:模型和 batch 能放进单机多卡,优先单机,效率高;显存不够可用混合精度、gradient checkpointing、FSDP/ZeRO;吞吐不够或规模超过单机,再扩到多机。数据并行主要做梯度 AllReduce,简单但通信量随参数量上升;张量并行每层通信频繁,最好放在同机高速链路;流水线并行传激活和梯度,要处理 bubble 和切分均衡。大型训练常组合 tensor parallel + pipeline parallel + data parallel + ZeRO。
单机多卡的通信在机内,拓扑稳定、延迟低、故障域小;多机多卡跨网络,带宽、延迟、拥塞、慢节点、存储和调度都会影响 step time。跨机不是简单加卡,而是引入分布式系统问题。
DDP 把模型复制到每张卡,拆 batch 计算梯度,再 AllReduce 同步。它实现简单、吞吐好,但通信量与模型参数量相关;batch 太小或模型太大时,通信占比会上升。
FSDP/ZeRO 通过分片参数、梯度和优化器状态降低单卡显存,用 AllGather、ReduceScatter 等通信换显存。适合显存成为瓶颈但能接受更多通信和复杂度的训练。
张量并行把单层矩阵计算切到多卡,每层内部会有 AllReduce、AllGather 或 ReduceScatter,对低延迟高带宽非常敏感。因此通常把 tensor parallel group 放在同机 NVLink/NVSwitch 内。
流水线并行把不同层放到不同设备或节点,前后传激活和梯度。它能扩展模型深度,但要通过 micro-batch 减少 pipeline bubble,并保证 stage 计算负载均衡。
扩展后要用 profiler 拆 step time:计算、通信、数据加载、checkpoint、同步等待。看 GPU 利用率、tokens/s、scaling efficiency、AllReduce 带宽、显存构成和 loss 收敛,不能只看卡数。
用 profiler 看 step time 中通信 op、GPU kernel、数据加载和等待时间占比;同时测 AllReduce/AllGather 带宽。如果 GPU 利用率低且通信等待高,常是通信瓶颈;如果核心 kernel 占满且通信占比低,偏计算瓶颈。
张量并行在每层内部都可能同步部分矩阵乘结果,通信频率高且处在 critical path。延迟和带宽稍差就会拖慢每层,通常比数据并行更依赖 NVLink/NVSwitch。
流水线开始和结束阶段,有些 stage 会等待前后 stage,不能一直满负载计算,这段空闲就是 bubble。增加 micro-batch、均衡 stage 耗时和使用更好的调度可以降低 bubble。
先测跨机网络和 NCCL 拓扑,再看通信 op 占比、慢节点、数据加载、checkpoint、batch size、梯度同步频率和是否把高频 tensor parallel 放到了跨机链路。