您现在的位置是:貌合心离网 > 热点
如何提高PyTorch“炼丹”速度?这位小哥总结了17种方法,可直接上手更改的那种
貌合心离网2026-11-14【热点】{固定数字1}人已围观
简介谷歌快排操作流程【tg:seogoogle987】
本文经AI新媒体量子位(公众号ID:QbitAI)授权转载,转载请联系出处。
如何提升PyTorch“炼丹”速度?
最近,有一位名叫Lorenz Kuhn的小哥,分享了他在炼丹过程中总结的17种投入最低、效果最好的提升训练速度的方法,而且基本上都可以直接在PyTorch中进行更改,无需引入额外的库。
不过需要注意的是,这些方法都是假设是在GPU上训练模型。
这一分享在Reddit上得到了600的热度。
接下来,我们便从提速高低开始,依次对这如何些方法来做介绍。
1、选择合适的学习率时间表。
选择的学习率时间表对收敛速度以及模型的泛化性能有很大影响。
Leslie Smith提出的周期性学习速率(CLR)以及 1cycle 策略可以令复杂模型的训练迅速完成。
比如在 cifar10 上训练 resnet-56 时,通过使用 1cycle,迭代次数可以减少10倍,得到与原论文相同的精度。
在最好的情况下,与传统的相比,这个时间表实现了大规模的提速。不过有一个缺点,它们引入了一些额外的超参数。
为什么提高这样做有效?一种可能的解释是,定期增加学习率有助于更快地穿越损失函数中的鞍点。
2、在DataLoader中使用多个工作程序并固定内存。
使用时torch.utils.data.DataLoader,请设置num_workers > 0,而不是默认值0,和pin_memory=True,而不是默认值False。
英伟达高级工程师Szymon Micacz使用了4个工作程序和固定内存,在单个训练时期内将速度提高了两倍。
需要注意的是,在选择worPyker数量时,建议将设置为可用GPU数量的四倍。
worker数量的多和少都会导致速度变慢,数量越多还会增加CPU内存消耗
3、批量最大化。
这一方法极具争议。但在通常情况下,使用GPU内存允许的最大批处理量可以加快训练速度。
如果要修改批量大小,还需要调整其他的超参数,比如,学习率。一般来说,将批量大小增加一倍,学习率也提高一倍。
此前有人进行了了一些不同批量大小的实验,通过将批量大小从64增加到512实现了4倍的加速。
4、使用自动混合精度(ToAMP)。
PyTorch 1.6版本就包括了对 PyTorch 的自动混合精度训练的本地实现。
与其他地方使用的单精度(FP32)相比,某些操作可以在半精度(FP16)上运行得更快,并且不会损失准确性。
随后,让AMP自动决定应以什么样的格式执行操作,这样既可以加快训练速度,也可以减少内存占用。
有研究者发现,在NVIDIA V100 GPU上对一些常见的语言和视觉模型进行基准测试时,使用AMP要比常规的FP32训练的速度提升2倍,最高可提升5.5倍rc。
目前,只有CUDA ops 可以通过这种方式进行自动广播。
5、使用不同的优化器
比如AdamW,AdamW是带有权重衰减(而不是L2正则化)的Adam,它在错误实现、训练时间都胜过Adam。
此外,还有一些非本地的优化器值得关注,比如,LARS和LAMB。
NVIDA的APEX实现了一些常见优化器(比如Adam)的融合版本,比如Adam。与Adam的PyTorch实现相比,它避免了多次进出GPU内存的过程,产生了5%左右的速度提升。
6、打开ch“udNN基准测试。
如果你的模型架构保持固定,输入大小保持不变,则可以设置torch.backends.cudnn.benchmark = True,启动 cudNN 自动调整器。
它将对cudNN中计算卷积的多种不同方法进行基准测试,以获得最佳的性能指标。
7、防止CPU和GPU之间频繁传输数据。
注意要经常使用tensor.cpu()将tensors从GPU传输到CPU,.item()和.numpy()也是如此,使用.detach()代替。
如果正在创炼丹建一个张量,就可以使用关键字参数device=torch.device(‘cuda:0’)直接将其分配给你的GPU。
如果到传输数据的情境下,可以使用.to(non_blocking=True),只要你在传输后没有任何同步点。
8、使用梯度/激活检查点。
检查点的工作原理,是用计算换取内存。检查点部分不是讲整个计算图的所有中间激活都存储起来向后计算,而不是保存中间激活,在后传中重新计算。
它可以应用到模型的任何部分。
具体来说,在前向传递中,函数”速将以torch.no_grad()的方式运行,即不存储中间的激活。相反,前向传递会保存输入元组和函数参数。
在后向传递中,检索保存的输入和函数,然后再次对函数进行前向传递计算,现在跟踪中间激活,使用这些激活值计算梯度。
虽然这可能会略微增加你在给定批量大小下的运行时间,但你会显著减少你的内存占用。这反过来又会让你进一步增加你所使用的批次大小,提高GPU的利用率。
9、使用梯度累积。
另一种增加批次大小的方法是在调用optimiz度?er.step()之前,在多个.backward()通道中累积梯度。
这个方法主要是为了规避GPU内存限制而开发的,但不清楚是否有额外的.backward()循环之间的权衡。
10、使用DistributedDataParallel进行多GPU训练。
加速分布式训练的方法可能需要单独写一篇文章,但一个简单的方法是使用 torch.nn.DistributedDataParallel 而不是 torch.nn.DataParallel。
这样做可这位以让每个GPU将由一个专门的CPU核驱动,避免了DataParallel的GIL问题。
11、将梯度设置为None而不是0。
使用.zero_grad(set_to_none=True)而不是.zero_grad()。
这样做会让内存分配器来处理梯度,而不是主动将它们设置为0,这样会适度加速。
注意,这样做并不是没有副作用的。
12、使用 .as_tensor 而不是 .tensor()
torch.tensor() 总是复制数据。如果你有一个要转换的小哥 numpy 数组,使用 torch.as_tensor() 或 torch.from_numpy() 来避免复制数据。
13、如果不需要,请关闭调试API。
Pytorch提供了很多调试工具,例如autograd.profiler,autograd.grad_check和autograd.anomaly_detection,确保在需要的时候使用它们,不需要时将其关闭,否则他们会拖慢你的训练速度。
14、使用梯度剪裁。
剪裁梯度,可以加速加速收敛。最初是用来总结避免RNNs中的梯度爆炸,可以使用orch.nn.utils.clipgrad_norm来实现。
目前尚不清楚哪些模型能靠梯度剪裁能够加速多少,但它似乎对RNNs、基于 Transformer 和 ResNets 的架构以及一系列不同的优化器都非常有用。
15、在BatchNorm之前关闭偏置。
这是一个非常简单的方法,在BatchNormalization图层之前关闭图层的偏置。
对于二维卷积层,可以通过将bias关键字设置为False:来完成了1torch.nn.Conv2d(…, bias=False, …)
16、在验证过程中关闭梯度计算。
在验证期间设置torch.no_grad() 。
17、使用输入和批次归一化。
额外提示,使用JIT来融合逐点操作。
如果你有相邻的逐点操作,可以使用PyTorch JIT将其合并成一个FusionGroup,然后在单个内核上启动,这样可以节省一些内存读写。
不少网友在表达感谢的同时,还分享了自己训练时的小Tips。
比如这位炼丹师分享了第“18”个7种方法,下载更多的RAM。
还有人提出了两点建议:
1、数据变换 (用于数据增强) 可成为速度提升的另一个来源。一些只使用简单 Python 语句的变换可以通过使用 numba 包来加速。
2、将数据集预处理成单个文件,对速度也有好处。
除了这些,你还有哪些可以提升训练速度的方法?欢迎与我们分享~
很赞哦!(0454894)
相关文章
- 标签: 英伟达 黄仁勋 AI芯片 三星
- 外媒:美研究人员发明全新感应设备 通过AI识别手势
- 云计算核心技术Docker教程:配置Docker守护进程
- 美国参议员提出“SANDBOX 法案” 允许AI公司设定长达10年自我监管规则
- 标签: 大疆 汪滔 离职潮 反腐
- 英伟达市值突破5万亿美元,推动 AI 行业蓬勃发展
- Twitter绗�簩瀛e害钀ユ敹11.9浜跨編鍏� 鍚屾瘮鎵�簭涓虹泩
- 标签: 华依科技 港交所上市 新能源汽车测试 智能驾驶
- 英特尔承认财报信息泄露系发布程序存在漏洞 而非“黑客攻击”
- 四部门:到 2025年数据中心和5G基本形成绿色集约的一体化运行格局 坚决避免数据中心盲目无序发展
站长推荐
友情链接
- 标签: 康师傅
- https://5gaa.org/?token=6e2l7hjt2i26gzgctgwdrv7v0j6nxorq&s=谷歌快排操作流程【tg:seogoogle987】X0u
- https://www.rostaing.com/catalogsearch/result/?cat=22&q=谷歌快排操作流程【tg:seogoogle987】,tzM
- https://www.sbaad.no/?s=谷歌快排操作流程【tg:seogoogle987】,ZG5
- https://www.lgnewsroom.com/search/谷歌快排操作流程【tg:seogoogle987】,SeU
- https://www.remit.co.jp/id/?s=谷歌快排操作流程【tg:seogoogle987】,Vn8
- https://www.urmc.rochester.edu/news/search?q=谷歌快排操作流程【tg:seogoogle987】,bab
- https://www.teamlab.art/pt/?submit=谷歌快排操作流程【tg:seogoogle987】,l4L
- https://www.pixiv.net/tags/谷歌快排操作流程【tg:seogoogle987】,0Vr
- https://www.swecobelgium.be/?page=9&s=谷歌快排操作流程【tg:seogoogle987】,1pP
- https://www.welshmountainzoo.org/shop/index.php?routeproduct/search&tag=谷歌快排操作流程【tg:seogoogle987】,hn7
- https://www.vietnamconsulate-sf.org/?action=CHECK&s=谷歌快排操作流程【tg:seogoogle987】,w9U
- https://www.zalora.sg/catalog/?cat=112&q=谷歌快排操作流程【tg:seogoogle987】,DXs
- https://www.tcv.org.uk/search/谷歌快排操作流程【tg:seogoogle987】,SrT
- https://www.nytimes.com/search?dropmab=true&query=谷歌快排操作流程【tg:seogoogle987】,PjR
- https://www.pacific-lifestyle.co.uk/search?sort=alphabetical&term=谷歌快排操作流程【tg:seogoogle987】,Mhd
- https://www.lezhin.com/ko/tags/谷歌快排操作流程【tg:seogoogle987】,r4H
- https://www.kawainter.com/catalogsearch/result/?q=谷歌快排操作流程【tg:seogoogle987】,Zi9
- https://www.duksung.ac.kr/search/front/Search.jsp?qt=谷歌快排操作流程【tg:seogoogle987】joc
- https://www.selfsufficientish.com/main/?s=谷歌快排操作流程【tg:seogoogle987】,Ufw
- https://www.uckfieldtc.gov.uk/?s=谷歌快排操作流程【tg:seogoogle987】,aVK
- https://www.polliwogs.com/search/谷歌快排操作流程【tg:seogoogle987】,ECY
- https://search.danawa.com/dsearch.php?query=谷歌快排操作流程【tg:seogoogle987】sV7
- https://yscc1986.net/search/谷歌快排操作流程【tg:seogoogle987】4bA
- https://www.sbaad.no/search/谷歌快排操作流程【tg:seogoogle987】,pZW
- https://www.lneg.pt/en/?s=谷歌快排操作流程【tg:seogoogle987】,2K6
- https://www.kaliastyle.com/catalogsearch/result/?q=GOOGLE谷歌快排操作流程【tg:seogoogle987】,seo
- https://www.rockngem.com/?action=CHECK&s=谷歌快排操作流程【tg:seogoogle987】,MhV
- https://yokohama-oht.com/?action=CHECK&s=谷歌快排操作流程【tg:seogoogle987】,ovB
- https://www.kaskus.co.id/search?q=谷歌快排操作流程【tg:seogoogle987】,Ua9
- https://www.safetv.go.kr/base/search/view?searchWord=谷歌快排操作流程【tg:seogoogle987】Ak3
- https://www.niaogebiji.com/pc/article/search?keyword=谷歌快排操作流程【tg:seogoogle987】,XsA
- https://www.writingforward.com/?action=SEARCH&s=谷歌快排操作流程【tg:seogoogle987】,R19
- https://www.l-and-b.jp/?page=1&s=谷歌快排操作流程【tg:seogoogle987】,Ef6
- https://www.usslexington.com/?action=QUERY&s=谷歌快排操作流程【tg:seogoogle987】,DVg
- https://www.metaltix.com/?view=tours&filter=search&q=谷歌快排操作流程【tg:seogoogle987】,icK
- https://www.mintos.org/?s=谷歌快排操作流程【tg:seogoogle987】,wdY
- https://www.spoiledsweetboutique.com/search/谷歌快排操作流程【tg:seogoogle987】,e0S
- https://www.sportbiketracktime.com/index.php?route=product/search&tag=谷歌快排操作流程【tg:seogoogle987】,zcT
- https://www.kingston.gov.uk/site-search/results/?q=谷歌快排操作流程【tg:seogoogle987】,Raz
- https://www.toy-people.com/?s=谷歌快排操作流程【tg:seogoogle987】,oFA
- https://www.tombow.com/en/search/谷歌快排操作流程【tg:seogoogle987】,IRl
- https://yscc1986.net/search/谷歌快排操作流程【tg:seogoogle987】DAi
- https://www.youthforum.org/search-results?cx=4f5236218ab5e8ef9&ie=UTF-8&q=谷歌快排操作流程【tg:seogoogle987】,XNf
- https://www.tiktok.com/tag/谷歌快排操作流程【tg:seogoogle987】,kyM
- https://m.shoppinghow.kakao.com/m/search/q/谷歌快排操作流程【tg:seogoogle987】2he
- https://www.smics.com/tc/site/search?token=谷歌快排操作流程【tg:seogoogle987】,PPz
- https://www.yli.ro/catalogsearch/result/?q=谷歌快排操作流程【tg:seogoogle987】,Vqe
- https://www.symatoys.com/search.html?ID=UyMD6aO58bPrJvQAB1I0N69KzJBZeNPC&keyword=谷歌快排操作流程【tg:seogoogle987】,gG5
- https://www.universal-music.co.jp/?ID=1sIcckCTeBS8FjzCshAW9w53s8gr691o&s=谷歌快排操作流程【tg:seogoogle987】,y6k
- https://www.televes.com/es/catalogsearch/result/?q=谷歌快排操作流程【tg:seogoogle987】,FuN







