关掉AI训练的两个加速开关后,模型反而更准了
深夜调试模型的人,常会遇到这样的时刻:训练速度突然变快,显存占用下降,batch size顺利翻倍——但最后跑出来的验证损失,却比上次高了一点点,说不清是随机波动,还是哪里悄悄‘失真’了。
这次实验关掉了两个默认开启的加速功能:一个是PyTorch的自动混合精度(AMP),它让部分计算从32位浮点降为16位;另一个是TF32矩阵乘法,它在保持32位接口的同时,用更低精度的硬件指令执行核心运算。单独开AMP,吞吐量从12,599 tokens/秒升到19,921;两者全开,也只多出76个token——提速见顶,但没人问一句:省下的算力,是不是换走了模型对细微模式的分辨力?
关掉它们后,训练变慢了,batch size被迫从6缩回5,每轮耗时增加约25%。但测试损失稳定下降了0.03——这个数字看似微小,却相当于把模型在代码补全任务上的错误率,从‘偶尔漏掉一个分号’推进到‘连续十行都不出错’的区间。
这意味着:当前主流训练流程中,‘默认加速’不是免费午餐,而是一次集体默认的精度让渡;我们用可测量的速度提升,交换了不可见的梯度保真度。
别人没注意到但我注意到了:当训练规模还没大到必须靠精度换速度时,‘全精度浮点’不是复古情怀,而是最经济的调优路径——它把模型收敛过程中的噪声源,从算法、数据、超参,收束到了唯一可控的变量上:数值本身。
现在的问题不再是‘要不要开AMP’,而是:下次看到训练曲线在后期震荡变缓,你第一反应是调学习率,还是先检查梯度里有没有悄悄溜进来的NaN?