前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >大模型高效训练基础知识:fp16与混合精度训练

大模型高效训练基础知识:fp16与混合精度训练

作者头像
Steve Wang
发布于 2023-10-12 01:38:26
发布于 2023-10-12 01:38:26
1.6K00
代码可运行
举报
文章被收录于专栏:从流域到海域从流域到海域
运行总次数:0
代码可运行

计算机表示浮点数有多种精度,其中Float16和Float32最为常见,即

  • fp32: Sign(1bit) + Range(8 bits) + Precision(23 bits)
  • fp16: Sign(1bit) + Range(5 bits) + Precision(10 bits)

GPU是一种专精浮点数运算的硬件设备,显然处理32位浮点数是处理16位浮点数计算量的2倍还多,在愿意损失一些精度的条件下使用fp16可以加速计算,而且也不会对模型最终的效果产生可感知影响。于是就有人提出了采用fp16来进行训练,具体而言在计算激活值和梯度的时候以fp16精度存储执行优化算法的时候还原为fp32(缺失位补0),这样最终的效果是模型在GPU上以fp16和fp32两种方式加载,这被称为混合精度训练(mixed precision training),这种方式占用了更少的显存(全精度需要保存2份原始模型,混合精度保存1份原始模型,1份半精度模型,是原始模型的1.5倍),也加速了训练过程,即精度损失换时间

Transformer框架内开启fp16非常简单,仅需在TrainingArguments种设置fp16标志位为True:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
training_args = TrainingArguments(per_device_train_batch_size=4, fp16=True, **default_args)

trainer = Trainer(model=model, args=training_args, train_dataset=ds)
result = trainer.train()
参考文献

1.FP16 Training

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-07-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 参考文献
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档