当前位置: 首页 > news >正文

如何在深度学习中使用自动混合精度训练

为什么使用混合精度深度学习?

随着深度学习(DL)领域的进步,关于DL模型的混合精度训练的讨论也出现了类似的增长。神经网络的范围、序列和原始能力的这些改进和自然演变意味着这些模型的大小必须增加以进行相应的补偿。更大、更复杂的DL模型需要技术和方法的进步。

这导致具有分布式训练的多GPU设置随着更多GPU集成到训练中而迅速失控。回归DL的基本训练原理,复习基础技术,可以缓解神经网络训练阶段的压力,优化GPU的使用。混合精度训练或自动混合精度训练可以是一种简单的方法来做到这一点。

DL神经网络的混合精度训练是加速神经网络训练阶段的过程。在本指南中,我们将更深入地探讨混合精度训练和自动混合精度训练,以及它如何保持神经网络训练阶段的准确性,同时减少训练所花费的时间。

什么是混合精度DL?

DL中的混合精度训练是同时使用单精度(32位)和半精度(16位)表示的过程。通过同时使用32位(或FP32)和16位(或FP16)浮点类型,模型的训练阶段将更快并消耗更少的内存。这是通过模型在FP32中为需要精度的计算保留一些训练来实现的,而在FP16中对精度不那么重要的其他计算进行训练。

以半精度(FP16)格式执行一些操作可以减少步进时间,而其他操作仍以单精度(FP32)执行以用于存储和准确性。这创造了一个最佳点,可以减少培训时间,而不会丢失任何关键信息。最后,混合精度训练为DL模型提供了显着的计算加速,几乎没有任何缺点。事实上,随着Tensor Cores的引入,DL社区甚至在数学最密集的模型中也看到了3倍以上的加速。

什么是自动混合精度训练?

DL中混合精度训练的棘手部分是它需要手动编码,导致可能的人为错误。使用张量核心是相当新的,并且仅在张量核心上分配特定操作需要一些独特的编码技术。

然而,现在整个过程可以通过几行简单的代码实现自动化!在DL中,这已变得司空见惯,并且对于保持模型训练尽可能快而不会显着降低质量非常重要。在设置混合精度训练时,只需要仔细注意。凭借自动化混合精度训练的能力,技术在扩展神经网络方面取得了重大改进和进步。

自动混合精度训练示例

自动混合精度(AMP)训练示例可能有助于阐明如何设置和使用混合精度训练。无论是使用Keras、PyTorch还是任何其他框架,都要遵循适当的编码程序和标签。

1.启用Max Tensor Cores Utilization

在整个训练过程中专用一个GPU来存储内存。这在您同时使用混合精度训练和分布式训练的情况下非常重要。密切注意使用FP16和FP32对某些进程和操作进行分区的位置。

2.为框架启用Cuda

启用CUDA将适当地设置混合训练代码。如前所述,现在通过对CUDA和PyTorch等框架的改进使这变得更简单。为此过程使用_GradScaler_选项进行损失缩放。在编程语言中,数字以有限的位数表示。_GradScaler_将消除可能的零值,某些位数可能会意外舍入到当一个微小的值仍然在避免被零除方面发挥作用时。

3.设置自动化

设置_autocast_上下文管理器以尽可能多地自动化该过程。这里没有太多需要调整的地方,但这将是你的代码中支持混合精度训练的部分,所以要特别小心并仔细检查你的工作。

4.测试在提交代码之前

测试一切。如果某些事情没有按照您的预期工作,请不要犹豫,重新运行它并从头开始。这是一段关键的代码,因此要进行双重和三重检查,以节省DL模型的时间和内存。

PyTorch示例:

scaler=GradScaler()

withautocast():

output=model(input)

loss=loss_fn(output,target)

scaler.scale(loss).backward()

scaler.step(optimizer)

scaler.update()

准备好深入研究混合精度训练了吗?

自动混合精度训练经常被忽视,因为它在DL社区中已经成为某种标准。不过,值得确定它是如何工作的以及如何正确使用它,而不是在考虑所有选项之前潜入水中。

我们在本文中遗漏了哪些您希望我们能够涵盖的内容?我们很乐意听取您的意见,以便我们解决您可能遇到的任何问题或疑虑。如果您在开始使用混合精度训练时需要帮助,那么我们也可以提供帮助!

相关文章:

  • Linux命令lsscsi详解
  • asp.net webapi 结合Autofac实现程序集动态注入(framework版本)
  • 如何选择合适的进销存管理软件?这几点你需要知道
  • 今日踩坑Maven:omitted for duplicate
  • 时至今日“性能优化”为何依旧成为大厂高工必修
  • 使用谷歌浏览器 devtools 调试node项目
  • 猿创征文 | H5 API之web存储、拖拽事件以及跨文档通信
  • 【数据结构与算法】第六篇:红黑树
  • [Power Query] 分组依据
  • Scala系列从入门到精通(三)
  • 项目框架:登录跳转页面
  • 【毕业设计】视频多目标跟踪系统 - 深度学习 机器视觉
  • Deformable detr源码分析
  • 阿里巴巴Java方向面试题汇总(含答案)
  • (利用IDEA+Maven)定制属于自己的jar包
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • 230. Kth Smallest Element in a BST
  • 3.7、@ResponseBody 和 @RestController
  • Android 架构优化~MVP 架构改造
  • github从入门到放弃(1)
  • js继承的实现方法
  • Laravel5.4 Queues队列学习
  • Objective-C 中关联引用的概念
  • PHP面试之三:MySQL数据库
  • python 装饰器(一)
  • React as a UI Runtime(五、列表)
  • vue:响应原理
  • 入门级的git使用指北
  • 学习笔记TF060:图像语音结合,看图说话
  • 找一份好的前端工作,起点很重要
  • ​VRRP 虚拟路由冗余协议(华为)
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • #每天一道面试题# 什么是MySQL的回表查询
  • (a /b)*c的值
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (二)学习JVM —— 垃圾回收机制
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (九十四)函数和二维数组
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (未解决)macOS matplotlib 中文是方框
  • (转) ns2/nam与nam实现相关的文件
  • (转)ORM
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • .bat批处理(七):PC端从手机内复制文件到本地
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .net Application的目录
  • .NET CORE 第一节 创建基本的 asp.net core
  • .NET Core 实现 Redis 批量查询指定格式的Key
  • .NET Core引入性能分析引导优化
  • .NET Standard 的管理策略
  • .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表
  • .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态
  • .NET6使用MiniExcel根据数据源横向导出头部标题及数据