新知榜官方账号
2023-09-25 00:34:50
自动混合精度是一种自动将半精度和单精度混合使用,从而加速模型训练的技术。其中单精度(FloatPrecision32,FP32)是计算机常用的一种数据类型。半精度(FloatPrecision16,FP16)是一种相对较新的浮点类型,在计算机中使用2字节(16位)存储,更适于在精度要求不高的场景中使用。在深度学习领域,使用Float16代替Float32来存储数据,可以训练更大更复杂的模型,使用更大的batchsize。同时,混合精度计算的需求应运而生,可以将训练过程中一些对精度损失不敏感且能使用TensorCore进行加速的运算使用半精度处理,最大限度的提升访存和计算效率。
飞桨AMP技术仅仅通过一行代码即可帮助用户将单精度训练的模型修改为自动混合精度训练。同时通过黑白名单和动态LossScaling来保证训练的稳定性,避免出现INF或者NAN问题。飞桨AMP可以充分发挥新一代NVIDIAGPU中TensorCore的计算性能优势,ResNet50、Transformer等模型的训练速度与单精度训练相比可以提升到1.5~2.9倍。AMP技术在提升访存和计算效率的同时,伴随的副作用是由于半精度数据类型的精度范围与转换前的单精度相比过窄,容易产生INF和NAN问题。为避免此类问题,AMP技术实现了自动调整LossScaling功能,即在AMP训练过程中,为避免精度下溢,每训练一定数量批次的数据,就将Loss放大指定倍数。如果Loss在放大过程中发生上溢,则可以再缩小一定倍数,确保整个训练过程中,梯度可以正常收敛。
用户仅需要使用飞桨提供的AMP函数fluid.contrib.mixed_precision.decorate将原来的优化器SGDOptimizer进行封装,然后使用封装后的优化器更新参数梯度即可。同时,AMP技术实现了自动调整LossScaling功能,无需手动指定。在使用AMP训练过程中,系统会自动读取黑白名单,从而感知哪些算子需要被转换为半精度计算,不需要手动指定。对于某些特殊场景,如果开发者希望使用自定义的黑白名单,则可以使用AutoMixedPrecisionLists类设置。
飞桨AMP技术在ResNet50、Transformer等模型上训练速度相对于FP32训练来说有非常大的优势,单卡加速比可达2.9倍,八卡加速比可达2.8倍。AMP技术在深度学习训练中可以大幅度提升训练速度和访存效率。
在新发布的飞桨核心框架1.7版本上,AMP技术深度优化了多卡GPU训练。通过将梯度传输这个过程提到Cast操作之前,每个GPU卡在得到对应的半精度梯度后再执行Cast操作,将其转变为单精度类型,可以降低GPU多卡之间的梯度传输带宽,对减少带宽占用方面非常有效。
相关工具
相关文章
相关快讯
推荐
用Deepseek写AI绘图提示词,像呼吸一样简单!
2025-02-19 16:12
你以为AI绘画是黑科技?其实早成了“路边摊生意”!
2025-02-19 10:15
Flux爆火,全网最全面最详细的Flux使用教程!
2025-02-18 14:19
用AI如何创作音乐,实战教学来啦!
2025-02-17 17:23
MidJourney让你秒变绘画大神,从零开始画哪吒!
2025-02-17 14:56
AI应用新境界:让人工智能成为你的得力助手
2025-02-14 15:45
AI短片革命:当创作遇上智能,人人都能成为导演
2025-02-14 14:53
AI狂潮下的人类职场:是失业危机还是进化契机?
2025-02-13 16:53
开启影视创作新纪元,效率提升 10 倍的神器来了!
2025-02-13 15:11
深度解析DeepSeek:当AI技术照进创作产业的未来
2025-02-12 17:16