every blog every motto: Just live your life cause we don’t live twice.

0. 前言

深度学习加速之自动混合精度

1. 正文

总共两种方法

1.1. 方法一:NVIDIA第三方包

需求:pytorch1.5之前的版本(包括1.5)
使用方法:

from apex import amp
model,optimizer = amp.initial(model,optimizer,opt_level="O1")   #注意是O,不是0
with amp.scale_loss(loss,optimizer) as scaled_loss:scaled_loss.backward()取代loss.backward()

其中,opt_level配置如下:

  • O0:纯FP32训练,可作为accuracy的baseline;

  • O1:混合精度训练(推荐使用),根据黑白名单自动决定使用FP16(GEMM,卷积)还是FP32(softmax)进行计算。

  • O2:几乎FP16,混合精度训练,不存在黑白名单 ,除了bacthnorm,几乎都是用FP16计算;

  • O3:纯FP16训练,很不稳定,但是可以作为speed的baseline;

1.2 方法二:pytorch1.6自带的torch.cuda.amp

有两个接口

1. autocast

from torch.cuda.amp import autocast as autocastmodel=Net().cuda()
optimizer=optim.SGD(model.parameters(),...)for input,target in data:optimizer.zero_grad()with autocast():output=model(input)loss = loss_fn(output,target)loss.backward()optimizer.step()

说明: 参考文献2中指出,需要GPU支持Tensor core才可以使用,笔者笔记本GPU为GTX 1050Ti,按理说是不支持的,但实验发现占用显存情况确有明显降低,具体如下:
没有使用:

使用以后:

2. GradScaler

from torch.cuda.amp import autocast as autocastmodel=Net().cuda()
optimizer=optim.SGD(model.parameters(),...)scaler = GradScaler() #训练前实例化一个GradScaler对象for epoch in epochs:for input,target in data:optimizer.zero_grad()with autocast(): #前后开启autocastoutput=model(input)loss = loss_fn(output,targt)scaler.scale(loss).backward()  #为了梯度放大#scaler.step() 首先把梯度值unscale回来,如果梯度值不是inf或NaN,则调用optimizer.step()来更新权重,否则,忽略step调用,从而保证权重不更新。   scaler.step(optimizer)scaler.update()  #准备着,看是否要增大scaler

参考文献

[1] https://www.cnblogs.com/jimchen1218/p/14315008.html
[2] https://zhuanlan.zhihu.com/p/295468659

【pytorch】深度学习提速之自动混合精度相关推荐

  1. pytorch深度学习_深度学习和PyTorch的推荐系统实施

    pytorch深度学习 The recommendation is a simple algorithm that works on the principle of data filtering. ...

  2. Pytorch深度学习(一):前馈神经网络(FNN)

    Pytorch深度学习(一):前馈神经网络(FNN) 参考B站课程:<PyTorch深度学习实践>完结合集 传送门:<PyTorch深度学习实践>完结合集 一.线性模型: 已知 ...

  3. 【Pytorch深度学习实践】B站up刘二大人课程笔记——目录与索引(已完结)

    从有代码的课程开始讨论 [Pytorch深度学习实践]B站up刘二大人之LinearModel -代码理解与实现(1/9) [Pytorch深度学习实践]B站up刘二大人之 Gradient Desc ...

  4. PyTorch深度学习图像分类--猫狗大战

    PyTorch深度学习图像分类--猫狗大战 1.背景介绍 2.环境配置 2.1软硬件清单 2.1.1配置PyPorch 2.1.2开发软件 2.1.3 显卡 2.2 数据准备 3 基础理论 3.1Py ...

  5. 【Pytorch深度学习实践】B站up刘二大人之BasicCNN Advanced CNN -代码理解与实现(9/9)

    这是刘二大人系列课程笔记的 最后一个笔记了,介绍的是 BasicCNN 和 AdvancedCNN ,我做图像,所以后面的RNN我可能暂时不会花时间去了解了: 写在前面: 本节把基础个高级CNN放在一 ...

  6. pytorch深度学习_了解如何使用PyTorch进行深度学习

    pytorch深度学习 PyTorch is an open source machine learning library for Python that facilitates building ...

  7. PyTorch深度学习训练可视化工具tensorboardX

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 之前笔者提到了PyTorch的专属可视化工具visdom,参看Py ...

  8. PyTorch深度学习入门与实战(案例视频精讲)

    作者:孙玉林,余本国 著 出版社:中国水利水电出版社 品牌:智博尚书 出版时间:2020-07-01 PyTorch深度学习入门与实战(案例视频精讲)

  9. PyTorch深度学习入门

    作者:曾芃壹 出版社:人民邮电出版社 品牌:iTuring 出版时间:2019-09-01 PyTorch深度学习入门

  10. PyTorch深度学习

    作者:[印度] 毗湿奴·布拉马尼亚(Vishnu Subramanian) 著,王海玲,刘江峰 译 出版社:人民邮电出版社 品牌:异步图书 出版时间:2019-04-01 PyTorch深度学习

最新文章

  1. 话说TP框架里的Vendor这目录是干什么用的啊?类库扩展thinkphp3.1版本
  2. 二十五、内存的基础知识
  3. 麦肯锡发布调研,揭开“那些引入人工智能的企业都怎么了 ”
  4. 【MM模块】Batch 批次管理 2
  5. VTK:直线网格之RectilinearGrid
  6. 实现一个通用的中英文排序工具
  7. 【ES6(2015)】解构赋值Desctructuring
  8. RESTful API实现APP订餐实例
  9. Codewars-(RegEx去除html标签)
  10. System.load(String filename)和System.loadLibrary(String libname)的区别
  11. 转换成的jar文件接收后台的信息乱码cmd解决办法
  12. 体系结构分析与设计语言AADL基础
  13. python接口上传图片和文件的方法
  14. 将7z分卷合并成一个7z文件,然后就可以使用7z或rar软件等打开
  15. java邮件增加签名_Java对文件添加数字签名
  16. html怎么改变图片整体大小,css怎么改变图片大小?
  17. 3D模型欣赏:Cyber-boy机车不良风男孩
  18. python面面观单元测试_第2周 python面面观
  19. 保险费率软件测试题目,软件测试保险等价类法测试用例
  20. 乐观复制算法-9.扩展乐观复制系统

热门文章

  1. JAVAWeb项目 微型商城项目-------(六)管理员登录
  2. sql 链接 oracle 查询,Oracle学习之路-SQL篇-连接查询
  3. python输出命令_Python中的命令输出解析
  4. python创建图形界面_Python入门四:创建第一个图形界面-Go语言中文社区
  5. python可以实现那些功能_30 个Python代码实现的常用功能,精心整理版
  6. linux中删除用户显示已登录,linux下用户及用户组:查看,新增,删除
  7. mysql sqlserver 拷贝_SQLyog工具进行SQLSERVER表结构或数据拷贝到MySQL数据库
  8. 软件测试测试用例编写 不超过7步骤_软件测试(功能、接口、性能、自动化)详解...
  9. Java编程:排序算法——希尔排序
  10. jQuery特效:实现抽奖