大模型增量预训练经验总结(1)
发布时间:2024年01月03日
1、训练数据类型选择
混合精度已经成为训练大型深度学习模型的必要条件,但也带来了许多挑战。目前在我的实践过程中增量预训练采用的都是 BF16。
- FP32/FP16 绝大多数硬件都支持,所以可以用混合精度训练提高吞吐;但 BF16/TF32只有新的硬件才支持,V100/昇腾910等不支持
- BF16 具有和 FP32 相同的 range,但精度(也就是两个最小单位之间的间隔)降低
- BF16/FP32 进行混合精度训练,可以减少溢出几率
- 对于大型 transformer,BF16 损失的精度被证明不怎么影响收敛
- TF32 是 A100 中引入的新格式,用于替代 fp32,也即可以全程 tf32 训练或 bf16/tf32 混合训练
- 还有FP8类也依赖于显卡类型(比如H100、L40s支持),但是目前的实验发现FP8损失精度会影响收敛
1.1 混合精度训练的要点
BF6/FP32 混合训练因为两种格式在 range 对齐了,并且 BF16 比 FP16 range 更大,所以比 FP16/FP32 混合训练稳定性更高。但 FP16/FP32 混合训练 GPT-3 大模型也是完全可行的,只要解决可溢出问题,有以下几个要点:
- fp32权重备份 + loss scaling 解决下溢出问题
- 对 loss 进行 scale:见左图
- 对 gradient 进行 scale:见右图。由于链式法则的存在,对梯度做直接做 scale,也是可以的,反而
文章来源:https://blog.csdn.net/gyx1549624673/article/details/135265862
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:chenni525@qq.com进行投诉反馈,一经查实,立即删除!