优化PyTorch性能的一些trick
- 混合精度训练:FP32量化为FP16
- 大Batch训练:对前几次梯度进行累加,然后统一进行参数更新,从而变相实现大Batch训练
- 梯度检查点:训练时间换显存,在前向阶段传递到 checkpoint 中的 forward 函数会以 torch.no_grad 模式运行,并且仅仅保存输入参数和 forward 函数,在反向阶段重新计算其 forward 输出值。
- 尽量实现向量化运算(即使开的数组多占用空间或者操作步数多),
- 使用
@torch.jit.script
装饰器会将pointwise操作融合成一个kernel来执行,比如激活函数(pointwise操作)中的多个运算 - pin_memory=True,减少数据传送时间
- 直接在GPU上创建tensor,eg:
tensor = torch.rand([10,5], device=torch.device('cuda:0'))
torch.tensor()
始终复制数据,numpy到tensor使用torch.from_numpy(numpy_array)
更快,tensor(或list、tuple)到tensor使用torch.as_tensor(others)
更快- 使用
tensor.to(device, non_blocking=True)
允许异步来overlap data transfers and kernel execution,数据流向构成一个DAG - 输入、输出、中间参数的维度尽量是8的倍数
- 如果输入大小不经常变化,在训练前设置
torch.backends.cudnn.benchmark=True
,cuDNN会自动寻找最好的算法来计算卷积(因为cuDNN算法计算size不同的卷积的性能不同) - 在BN层之前的卷积层中不使用bias(因为BN第一步会减去均值)
- Use channels_last memory format for 4D NCHW Tensors
- use
DistributedDataParallel
instead ofDataParallel
参考资料:
推荐:Optimize PyTorch Performance for Speed and Memory Effciency(2022)
拿什么拯救我的4G显卡
用PyTorch踩过的坑
Effective PyTorch
优化PyTorch性能的一些trick相关推荐
- 首个中文Stable Diffusion模型开源;TPU演进十年;18个PyTorch性能优化技巧 | AI系统前沿动态...
1. TPU演进十年:Google的十大经验教训 希腊神话中,特洛伊战争的起因是两方争夺世界上最美的女人--海伦,后世诗人将海伦的美貌"令成千战舰为之起航".TPU就像海伦,它的出 ...
- Pytorch优化器全总结(四)常用优化器性能对比 含代码
目录 写在前面 一.优化器介绍 1.SGD+Momentum 2.Adagrad 3.Adadelta 4.RMSprop 5.Adam 6.Adamax 7.AdaW 8.L-BFGS 二.优化器对 ...
- 加速神经网络训练方法及不同Optimizer优化器性能比较
本篇博客主要介绍几种加速神经网络训练的方法. 我们知道,在训练样本非常多的情况下,如果一次性把所有的样本送入神经网络,每迭代一次更新网络参数,这样的效率是很低的.为什么?因为梯度下降法参数更新的公式一 ...
- [转]优化Flash性能
原文:http://www.adobe.com/devnet/flash/articles/optimizing-flash-performance.html 翻译:http://bbs.9ria.c ...
- rust python扩展_Rust语言优化Python性能案例
原标题:Rust语言优化Python性能案例 导读:Python 被很多互联网系统广泛使用,但在另外一方面,它也存在一些性能问题,不过 Sentry 工程师分享的在关键模块上用另外一门语言 Rust ...
- iOS 使用Instruments优化内存性能
iOS 使用Instruments优化内存性能 问题 项目中使用到图片合成视频,发现内存增长十分的迅速,导致一些因为内存引起的问题,本文使用这个案例,结合Instruments工具检测和分析问题,最终 ...
- 前端动画优化及性能检测
前端动画优化及性能检测工具使用 前端使用动画可以分为两类: css 动画 js 动画 我们提倡能够使用 css 完成的动画尽量使用 css ( 即使用 animation 和 keyframes ). ...
- 优化程序性能的策略汇总
写程序需要顾及两个方面:1.程序的简洁性和可维护性.2.程序的运行速度.很多时候这两者是互相制约的,编写可读性良好的代码有时会损失一部分性能,而有些底层优化是以降低程序的可读性和模块性为代价的.实际开 ...
- Navicat使用教程:使用Navicat Query Analyzer优化查询性能(第1部分)
2019独角兽企业重金招聘Python工程师标准>>> 下载Navicat Monitor最新版本 Navicat Monitor 是一套安全.简单而且无代理的远程服务器监控工具.它 ...
最新文章
- 抢程序员饭碗?自动写代码的Deep TabNine真如此神奇?
- JavaScript之三:jQuery插件开发(一)
- ST17H26移植软时钟代码
- Linux脚本统计指定目录下文件和文件夹数量
- OAuth 2.1 的进化之路
- Linux配置rsylogs日志发送,syslog强大而安全的日志处理系统
- 在codeigniter中使用Cache_Lite来缓存
- 基础才是重中之重~如何整理BLL与DAL层的文件
- Android4.0源码编译方法以及错误解决方案
- win32汇编实现一个简单的TCP服务端程序(WinSock的简单认知应用)
- 免费的思维导图工具推荐(幕布-ProcessOn)2020年最新测评
- ipad上的html编辑器,它让我开始尝试在 iPad 上写作:MWeb for iOS 使用体验
- 计算机二级word奇偶页眉页脚,Word怎样设置奇偶页眉和页码图解
- 四川民办高校计算机专业排名2015,2015中国民办大学最佳专业排行榜10强
- Ubuntu下GNOME桌面美化
- 域名备案和icp备案有哪些区别?
- Mysql之mysql工具
- 运行时栈帧结构是怎样的?
- 存储空间都去哪了?占用空间比文件大太多?可能是文件系统和默认簇大小惹的祸
- 铁匠smith_铁匠的大气散射
热门文章
- JavaScrript 实现当前时间具体2020年元旦还有多少天
- 计算机网络清单,网络系统材料清单
- python中ljust的意思_python中ljust什么意思
- canvas绘制简单的霓虹灯效果
- HCIE面试题之交换机和路由器收到未知表项数据包如何处理
- 像“今日头条”这样的模块滑动特效,大概咋写,求指点 ?---酷课堂iOS交流群问答整理(201805期)
- 微信小程序:组件Component接收不到参数id
- STA之一.时序分析
- 1+X Web前端(初级)理论题考试样题及答案(建议收藏)
- 基于卷积神经网络的乳腺肿瘤良恶性分类方法研究