昨天深夜调试模型,显存又爆了。8张V100跑YOLOv11-large,batch_size刚调到16就OOM,看着监控面板上显存占用曲线像心电图一样冲到峰值然后骤停,心里那股烦躁劲儿又上来了。这已经是本周第三次遇到显存瓶颈,项目deadline压着,硬件资源锁死,除了混精度训练,似乎没别的路可走。显存瓶颈下的生存法则混合精度训练不是新概念,但很多人对它理解有偏差。它核心解决两个问题:显存占用和训练速度。FP16把32位浮点数砍成16位,显存直接减半,这很好理解。但真正关键的是计算吞吐——现代GPU的Tensor Core对FP16有专门优化,理论上峰值算力能翻倍。不过这里有个陷阱:直接全FP16训练,YOLOv11的小目标检测精度会崩,特别是COCO数据集里那些像素面积小于32×32的物体,AP_s直接掉5个点以上。上个月团队里有个新人直接修改模型所有参数为torch.float16,训练完验证mAP掉了8.7%,还以为是数据出了问题,折腾了两天才发现是精度溢出。这种粗暴转换的问题在于:梯度值太小(比如小于1e-7)在FP16下会变成0,反向传播时这些参数就“死”了。AMP的魔法与陷阱PyTorch的AMP(Automatic Mixed Precision)是个聪明方案。它不像手动混合精度那样需要标注哪些层用FP16哪些用FP32,而是动态管理。核心是这两行:scaler=