
1 项目背景业务场景算法团队用单个 BERT 模型做的工单分类效果不错,但产品经理提出新需求:用更大的模型(XLM-RoBERTa-large,560M参数)在 50 万条多语言工单上训练。小陈在单卡 A10(24GB)上尝试训练,设 batch_size=4 就 OOM 了,降到 batch_size=2 后训练跑起来了,但一个 epoch 要跑 6 小时,3 个 epoch 就是 18 小时——周五下班前提交的任务,周一早上来看可能还在跑。更糟糕的是,训练过程中 GPU 突然报错CUDA out of memory——某个 batch 恰好包含几条超长工单,tokenize 后长度 400+,显存峰值超出了 24GB。训练中断后模型没做 checkpoint 保存,loss 回退到上一个 checkpoint,白白浪费了半天。公司有 4 张 A10 闲置,但团队之前只用过单卡训练,没搞过多卡。痛点从单卡到多卡,不是简单的"把代码复制到 4 张卡同时跑":数据并行 vs 模型并行:数据并行是每张卡有完整模型副本,各自算不同数据,最后同步梯度。模型并行是把模型切到不同卡上。什么时候用哪种?两者能不能结合?同步开销:4 张卡各自算完梯度后,需要跨卡通信求平均——NCCL通信有开销,卡太多反而拖慢训练随机种子一致性:多卡训练时 DataLoader 的随机种