【pytorch】深度学习提速之自动混合精度
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】深度学习提速之自动混合精度相关推荐
- pytorch深度学习_深度学习和PyTorch的推荐系统实施
pytorch深度学习 The recommendation is a simple algorithm that works on the principle of data filtering. ...
- Pytorch深度学习(一):前馈神经网络(FNN)
Pytorch深度学习(一):前馈神经网络(FNN) 参考B站课程:<PyTorch深度学习实践>完结合集 传送门:<PyTorch深度学习实践>完结合集 一.线性模型: 已知 ...
- 【Pytorch深度学习实践】B站up刘二大人课程笔记——目录与索引(已完结)
从有代码的课程开始讨论 [Pytorch深度学习实践]B站up刘二大人之LinearModel -代码理解与实现(1/9) [Pytorch深度学习实践]B站up刘二大人之 Gradient Desc ...
- PyTorch深度学习图像分类--猫狗大战
PyTorch深度学习图像分类--猫狗大战 1.背景介绍 2.环境配置 2.1软硬件清单 2.1.1配置PyPorch 2.1.2开发软件 2.1.3 显卡 2.2 数据准备 3 基础理论 3.1Py ...
- 【Pytorch深度学习实践】B站up刘二大人之BasicCNN Advanced CNN -代码理解与实现(9/9)
这是刘二大人系列课程笔记的 最后一个笔记了,介绍的是 BasicCNN 和 AdvancedCNN ,我做图像,所以后面的RNN我可能暂时不会花时间去了解了: 写在前面: 本节把基础个高级CNN放在一 ...
- pytorch深度学习_了解如何使用PyTorch进行深度学习
pytorch深度学习 PyTorch is an open source machine learning library for Python that facilitates building ...
- PyTorch深度学习训练可视化工具tensorboardX
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 之前笔者提到了PyTorch的专属可视化工具visdom,参看Py ...
- PyTorch深度学习入门与实战(案例视频精讲)
作者:孙玉林,余本国 著 出版社:中国水利水电出版社 品牌:智博尚书 出版时间:2020-07-01 PyTorch深度学习入门与实战(案例视频精讲)
- PyTorch深度学习入门
作者:曾芃壹 出版社:人民邮电出版社 品牌:iTuring 出版时间:2019-09-01 PyTorch深度学习入门
- PyTorch深度学习
作者:[印度] 毗湿奴·布拉马尼亚(Vishnu Subramanian) 著,王海玲,刘江峰 译 出版社:人民邮电出版社 品牌:异步图书 出版时间:2019-04-01 PyTorch深度学习
最新文章
- 话说TP框架里的Vendor这目录是干什么用的啊?类库扩展thinkphp3.1版本
- 二十五、内存的基础知识
- 麦肯锡发布调研,揭开“那些引入人工智能的企业都怎么了 ”
- 【MM模块】Batch 批次管理 2
- VTK:直线网格之RectilinearGrid
- 实现一个通用的中英文排序工具
- 【ES6(2015)】解构赋值Desctructuring
- RESTful API实现APP订餐实例
- Codewars-(RegEx去除html标签)
- System.load(String filename)和System.loadLibrary(String libname)的区别
- 转换成的jar文件接收后台的信息乱码cmd解决办法
- 体系结构分析与设计语言AADL基础
- python接口上传图片和文件的方法
- 将7z分卷合并成一个7z文件,然后就可以使用7z或rar软件等打开
- java邮件增加签名_Java对文件添加数字签名
- html怎么改变图片整体大小,css怎么改变图片大小?
- 3D模型欣赏:Cyber-boy机车不良风男孩
- python面面观单元测试_第2周 python面面观
- 保险费率软件测试题目,软件测试保险等价类法测试用例
- 乐观复制算法-9.扩展乐观复制系统
热门文章
- JAVAWeb项目 微型商城项目-------(六)管理员登录
- sql 链接 oracle 查询,Oracle学习之路-SQL篇-连接查询
- python输出命令_Python中的命令输出解析
- python创建图形界面_Python入门四:创建第一个图形界面-Go语言中文社区
- python可以实现那些功能_30 个Python代码实现的常用功能,精心整理版
- linux中删除用户显示已登录,linux下用户及用户组:查看,新增,删除
- mysql sqlserver 拷贝_SQLyog工具进行SQLSERVER表结构或数据拷贝到MySQL数据库
- 软件测试测试用例编写 不超过7步骤_软件测试(功能、接口、性能、自动化)详解...
- Java编程:排序算法——希尔排序
- jQuery特效:实现抽奖