MiniMax AI Infra 实习 二面


Q: 你在训练大模型时用过哪些分布式训练方案?数据并行、模型并行、流水并行的区别是什么?

  • 数据并行(DP/DDP):模型完整复制到每卡,数据分片,梯度AllReduce同步。通信量与模型大小成正比,与数据量无关。
  • 模型并行(TP):将单层参数切分到多卡,每卡只持有部分参数,层内需要通信(AllReduce/AllGather)。适合单层参数量大的情况。
  • 流水线并行(PP):将不同层分配到不同卡,数据以micro-batch形式流水通过各阶段。通信量小(只传激活值),但存在pipeline bubble。

Q: DeepSpeed ZeRO-1/ZeRO-2/ZeRO-3的核心差异是什么?

  • ZeRO-1:只切分优化器状态(如Adam的m和v),每卡显存减少约4倍。
  • ZeRO-2:切分优化器状态 + 梯度,每卡显存进一步减少约8倍。
  • ZeRO-3:切分优化器状态 + 梯度 + 参数,显存减少与GPU数成线性。代价是前向时需要All-Gather参数,通信量增加1.5倍。

Q: 如何估算训练一个70B模型的单卡显存占用?

以混合精度训练(FP16参数 + FP32优化器)为例:

  • 参数:70B * 2字节(FP16)= 140GB
  • 梯度:70B * 2字节 = 140GB
  • 优化器状态(Adam):70B * (4+4+4)字节 = 840GB(FP32参数副本+m+v)
  • 总计约1120GB(单卡显然放不下)

使用ZeRO-3在8卡上:约140GB/卡,仍需A100 80GB多卡。实际还需加上激活显存(取决于batch size和序列长度,可用gradient checkpointing减少)。


Q: 除了ZeRO,还有哪些训练优化方法?

  • 混合精度训练:FP16/BF16前向反向,FP32主参数更新。
  • Gradient Checkpointing:不保存中间激活,反向时重新计算,以时间换空间。
  • Flash Attention:减少注意力计算的显存和IO。
  • Gradient Accumulation:累积多步梯度等效大batch。
  • CPU/NVMe Offload:将暂不使用的数据卸载到CPU/NVMe。
  • Selective Activation Recomputation:只重算显存占用大的层。

Q: LoRA的原理是什么?为什么低秩分解可以减少训练参数?

LoRA在冻结的预训练权重旁添加低秩分解矩阵:W' = W + BA,其中B∈R^(d×r),A∈R^(r×k),r<<min(d,k)。

为什么有效:研究表明预训练模型的权重更新矩阵ΔW具有较低的”内在维度”(intrinsic rank),即微调时参数变化可以被低秩矩阵很好地近似。r通常取4-64,参数量从d*k降至(d+k)*r,减少百倍以上。


Q: LoRA中矩阵A和B为什么通常采用不同初始化方式?

A使用正态分布或Kaiming初始化,B初始化为零。这样训练初始时BA=0,模型行为与预训练模型完全一致(无损初始化),从预训练的好起点出发微调。如果两者都随机初始化,初始时BA非零,会破坏预训练模型学到的表示,可能导致训练不稳定。


Q: 手撕:实现滑动窗口最大值?

(编程题)