
《Machine Learning Engineering by Stas Bekman》的核心内容整理,按主题分类:
1. 机器学习工程的核心挑战
速度 vs 成本:训练速度(TFLOPS)、硬件成本(GPU/TPU/网络)和模型效果之间的权衡。
硬件瓶颈:网络、存储、CPU 和 GPU 内存的匹配性比单纯堆 GPU 更重要(避免“喂不饱”GPU)。
MFU(Model FLOPS Utilization):实际算力利用率,需通过优化硬件和软件逼近理论峰值。
2. 硬件选择与配置
加速器:
主流选项:NVIDIA A100/H100、AMD MI250/MI300、Intel Gaudi2、TPU/IPU。
关键指标:TFLOPS、内存带宽(HBM2e/HBM3)、NVLink/PCIe 速度。
陷阱:避免厂商锁定(如TPU的Google独占)、注意实际可用存储(仅80%可靠)。
网络:
节点内:NVLink(600GB/s+)、PCIe 5.0(126GB/s)。
节点间:InfiniBand(HDR/NDR)、AWS EFA、RoCE,需匹配模型通信量(如ZeRO-3需400Gbps+)。
存储:
三类需求:数据加载(高速读)、检查点(高速写)、代码共享(中速读写)。
推荐方案:并行文件系统(Lustre/GPFS),避免NFS的IOPS瓶颈。
CPU与内存:
CPU核数:每GPU需2-4核(DataLoader)+ 1核(进程)。
内存:至少等于GPU总内存(如8×A100=640GB需≥640GB CPU内存)。
3. 并行化策略
数据并行(DP/DDP):适合单GPU模型,通过梯度同步扩展。
ZeRO:分片优化器状态/梯度/参数(Stage 1/2/3),减少内存占用,但增加通信量。
流水线并行(PP):按层切分模型,需调优
chunks
以减少GPU空闲(bubble)。张量并行(TP):按维度切分矩阵运算(如Transformer的MLP/Attention头),需NVLink级高速网络。
序列并行(SP):处理长序列(如256K tokens),按序列维度切分。
混合并行:3D并行(DP+PP+TP+ZeRO)需≥8GPU,如Megatron-Deepspeed。
4. 训练稳定性与故障恢复
检查点:
频率:平衡保存时间(如40秒)与数据丢失风险(每3小时保存一次)。
工具:
torch-checkpoint-shrink.py
修复存储膨胀,bf16
转换节省空间。故障处理:
SLURM技巧:作业数组(
--array=1-10%1
)、kill/save开关、节点排除(--exclude
)。监控:GPU Xid错误(
nvidia-smi -q
)、内存泄漏(自动退出脚本)。稳定性:
初始化:STD值需按
sqrt(1/(NHIDDEN*3))
计算(如BLOOM-176B用0.00482)。数值问题:fp16下Attention的norm_factor需前置缩放(避免溢出)。
5. 性能调优
TFLOPS计算:
model_size * 4 * 2 * seqlen * GBS / (time * GPUs * 1e3)
。内存优化:
梯度检查点:20-30%速度换50%+内存节省。
优化器:8-bit Adam(2字节/参数)或Adafactor(4字节/参数)。
对齐:batch size/head数需为64的倍数(A100 Tensor Core要求)。
调试工具:
NCCL:
NCCL_DEBUG=INFO
、all_reduce_bench.py
测带宽。PyTorch:
CUDA_LAUNCH_BLOCKING=1
同步调试,CUDA_VISIBLE_DEVICES=""
CPU模式。
6. 实用工具与脚本
SLURM:
环境变量:
$SLURM_JOB_NODELIST
、$MASTER_ADDR
。命令:
squeue
、scontrol
、sacct
。多节点测试:
模拟:单节点多GPU模拟多节点(
deepspeed
+hostfile
)。调试:
torch-distributed-gpu-test.py
检查NCCL连通性。日志:
--role $(hostname -s):--tee 3
解决多节点日志混乱。
7. 关键公式与经验法则
GPU数量估算:
训练:
model_size_B * 18 * 1.25 / GPU_memory_GB
(如80B模型需23×80GB GPU)。推理:
model_size_B * 2 * 1.25 / GPU_memory_GB
。通信时间:
comms_time = data_GB / bandwidth_GBps
(如80B模型在340Gbps需11秒)。
8. 避坑指南
云厂商陷阱:预留实例折扣、存储可用性(仅80%)、节点需同一可用区。
软件陷阱:PyTorch版本兼容性(如NCCL 2.14.3与CUDA_LAUNCH_BLOCKING冲突)。
数据问题:重复数据导致虚假损失下降,需验证DataLoader恢复逻辑。
总结
本书是一份实战导向的LLM训练手册,覆盖从硬件选型、并行策略、性能优化到故障恢复的全流程。核心思想是:以最小成本最大化TFLOPS利用率,需反复测试、监控和调整。




本书免费下载地址
关注微信公众号“人工智能产业链union”回复关键字“AI加油站40”获取下载地址。
【AI加油站】第八部:《模式识别(第四版)-模式识别与机器学习》(附下载)