7个提升PyTorch性能的技巧

文 | William Falcon
源 | AI公园

在过去的10个月里,在PyTorch Lightning工作期间,团队和我已经接触过许多结构PyTorch代码的风格,我们已经发现了一些人们无意中引入瓶颈的关键地方。

我们非常小心地确保PyTorch Lightning不会对我们为你自动编写的代码犯任何这些错误,我们甚至会在检测到这些错误时为用户纠正这些错误。然而,由于Lightning只是结构化的PyTorch,而你仍然控制所有的PyTorch,因此在许多情况下,我们不能为用户做太多事情。此外,如果不使用Lightning,可能会在无意中将这些问题引入代码。为了帮助你训练得更快,这里有7个技巧,你应该知道它们可能会减慢你的代码。

在DataLoaders中使用workers

第一个错误很容易纠正。PyTorch允许同时在多个进程上加载数据。

在这种情况下,PyTorch可以通过处理8个批次绕过GIL锁,每个批次在一个单独的进程上。你应该使用多少workers?一个好的经验法则是:

num_worker = 4 * num_GPU

https://discuss.pytorch.org/t/guidelines-for-assigning-num-workers-to-dataloader/813/7这里对此有一个很好的讨论。

警告:缺点是你的内存使用也会增加

Pin memory

你知道有时候你的GPU内存显示它是满的但你很确定你的模型没有使用那么多?这种开销称为_pinned memory_。这个内存被保留为一种“working allocation”类型。

当你在一个DataLoader中启用pinned_memory时,它“自动将获取的数据张量放在pinned memory中,并使数据更快地传输到CUDA-enabled的gpu”

这意味着你不应该不必要的去调用:

torch.cuda.empty_cache()

避免CPU到GPU的传输,反之亦然

# bad.cpu().item().numpy()

我看到大量使用.item()或.cpu()或.numpy()调用。这对于性能来说是非常糟糕的,因为每个调用都将数据从GPU传输到CPU,从而极大地降低了性能。

如果你试图清除附加的计算图,请使用.detach()。

# good.detach()

这不会将内存转移到GPU,它会删除任何附加到该变量的计算图。

直接在GPUs上构建张量

大多数人都是这样在GPUs上创建张量的

t = tensor.rand(2,2).cuda()

然而,这首先创建CPU张量,然后将其转移到GPU……这真的很慢。相反,直接在想要的设备上创建张量。

t = tensor.rand(2,2, device=torch.device('cuda:0'))

如果你正在使用Lightning,我们会自动把你的模型和批处理放到正确的GPU上。但是,如果你在代码的某个地方创建了一个新的张量(例如:为一个VAE采样随机噪声,或类似的东西),那么你必须自己放置张量。

t = tensor.rand(2,2, device=self.device)

每个LightningModule都有一个方便的self.device调用,无论你是在CPU上,多 GPUs上,还是在TPUs上,lightning会为那个张量选择正确的设备。

使用DistributedDataParallel不要使用DataParallel

PyTorch有两个主要的模式用于在多 GPUs训练。第一种是DataParallel,它将一批数据分割到多个GPUs上。但这也意味着模型必须复制到每个GPU上,一旦在GPU 0上计算出梯度,它们必须同步到其他GPU。

这需要大量昂贵的GPU传输!相反,DistributedDataParallel在每个GPU(在它自己的进程中)上创建模型副本,并且只让数据的一部分对该GPU可用。这就像是让N个独立的模型进行训练,除了一旦每个模型都计算出梯度,它们就会在模型之间同步梯度……这意味着我们在每批处理中只在GPUs之间传输一次数据。

在Lightning中,你可以在两者之间轻松切换

Trainer(distributed_backend='ddp', gpus=8)Trainer(distributed_backend='dp', gpus=8)

请注意,PyTorch和Lightning都不鼓励使用DP。

使用16-bit精度

这是另一种加快训练速度的方法,我们没有看到很多人使用这种方法。在你的模型进行16bit训练的部分,数据从32位变到到16位。这有几个优点:

  1. 你使用了一半的内存(这意味着你可以将batch大小翻倍,并将训练时间减半)。

  2. 某些GPU(V100, 2080Ti)可以自动加速(3 -8倍),因为它们针对16位计算进行了优化。

在Lightning中,这很简单:

Trainer(precision=16)

注意:在PyTorch 1.6之前,你还必须安装Nvidia Apex,现在16位是PyTorch的原生版本。但如果你使用的是Lightning,它同时支持这两种功能,并根据检测到的PyTorch版本自动切换。

对你的代码进行Profile

如果没有Lightning,最后一条建议可能很难实现,但你可以使用cprofiler这样的工具来实现。然而,在Lightning中,你可以通过两种方式获得所有在训练期间所做的调用的总结:

首先,内置的basic profiler

Trainer(profile=True)

可以给出这样的输出:

或者是高级的profiler:

profiler = AdvancedProfiler()trainer = Trainer(profiler=profiler)

得到更小粒度的结果:

英文原文:https://towardsdatascience.com/7-tips-for-squeezing-maximum-performance-from-pytorch-ca4a40951259

寻求报道、约稿、文案投放:
添加微信xixiaoyao-1,备注“商务合作”

后台回复关键词【入群

加入卖萌屋NLP/IR/Rec与求职讨论群

后台回复关键词【顶会

获取ACL、CIKM等各大顶会论文集!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/478572.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文浅尝 - EMNLP2020 | 基于规则引导的协作 agent 知识图谱推理学习

论文笔记整理:叶橄强,浙江大学在读硕士,研究方向为知识图谱的表示学习和预训练。来源:EMNLP 2020现有的大多数基于行走的模型通过在提供可解释的决策的同时获得良好的性能,在知识图谱推理中显示出其优势。但在遍历过程…

Shield——开源的移动端页面模块化开发框架

一直以来,如何能更高效地开发与维护页面是Android与iOS开发同学最主要的工作和最关心的问题。随着业务的不断发展,根据特定业务场景产生的定制化需求变得越来越多。单一页面往往需要根据不同业务、不同场景甚至不同用户展示不同的内容。在这样的背景下&a…

1年排名前进13位 ,这个论题成顶会新宠!

写过论文的同学都知道,写久了真的会头秃,其中耗发量最高的当属论题和创新点。今天分享一套方法,这个方法已经帮助近3000位同学成功发(拯)表(救)论(头)文(发&a…

LeetCode 50. Pow(x, n)(二分查找)

文章目录1. 题目2. 二分查找2.1 递归2.2 循环1. 题目 实现 pow(x, n) &#xff0c;即计算 x 的 n 次幂函数。 示例 输入: 2.00000, 10 输出: 1024.00000 示例 输入: 2.00000, -2 输出: 0.25000 解释: 2-2 1/22 1/4 0.25 说明: -100.0 < x < 100.0 n 是 32 位有符号…

OpenKG 祝大家 2021 新年快乐 —「2020 精选文章汇编」

过去的一年是不寻常的一年&#xff0c;虽然疫情改变了所有人的生活&#xff0c;但是它并没有击垮我们。这一年&#xff0c;大家依旧保持着开源开放的精神&#xff0c;持续地分享着知识图谱领域的技术动态、应用实践&#xff0c;同学们也持续不断地输出优质的论文笔记。OpenKG 继…

智能分析最佳实践——指标逻辑树

所有业务都会面对“为什么涨、为什么降、原因是什么&#xff1f;”这种简单粗暴又不易定位的业务问题。为了找出数据发生异动的原因&#xff0c;业务人员会通过使用多维查询、dashboard等数据产品锁定问题&#xff0c;再辅助人工分析查找问题原因&#xff0c;这个过程通常需要一…

论文浅尝 - EMNLP2020 | 图结构对于多跳问答而言必要吗?

笔记整理 | 陈卓&#xff0c;浙江大学计算机科学与技术系&#xff0c;博士研究生研究方向 | 知识图谱&#xff0c;图神经网络&#xff0c;多模态论文链接&#xff1a;https://www.aclweb.org/anthology/2020.emnlp-main.583.pdf发表会议&#xff1a;EMNLP 2020背景提要抽取式阅…

为什么每次有人大声通电话时,我就很烦躁...

文 | Chaos编 | 小戏不知你是否有过这样的体验&#xff0c;当你周围有人在大声讲电话时&#xff0c;你会不自觉的感觉到烦躁。为什么呢&#xff1f;有一种委婉的说法是因为你听到了不完整的对话。直白点说其实就是讲电话的人通过放大声音强行让你接收了他说的信息&#xff0c;但…

LeetCode 367. 有效的完全平方数(二分查找)

1. 题目 给定一个正整数 num&#xff0c;编写一个函数&#xff0c;如果 num 是一个完全平方数&#xff0c;则返回 True&#xff0c;否则返回 False。 说明&#xff1a;不要使用任何内置的库函数&#xff0c;如 sqrt。 示例 1&#xff1a; 输入&#xff1a;16 输出&#xff1…

美团点评联盟广告场景化定向排序机制

在美团点评的联盟广告投放系统&#xff08;DSP&#xff09;中&#xff0c;广告从召回到曝光的过程需要经历粗排、精排和竞价及反作弊等阶段。其中精排是使用CTR预估模型进行排序&#xff0c;由于召回的候选集合较多&#xff0c;出于工程性能上的考虑&#xff0c;不能一次性在精…

论文浅尝 - COLING2020 | 一种用于跨语言实体对齐的上下文对齐强化跨图谱注意力网络...

笔记整理 | 谭亦鸣&#xff0c;东南大学博士生来源&#xff1a;COLING 2020链接&#xff1a;https://www.aclweb.org/anthology/2020.coling-main.520.pdf本文发现&#xff0c;目前基于GCN的对齐方法都是分别考虑两个KG&#xff0c;然后分别学习它们的embedding&#xff0c;并认…

LeetCode 744. 寻找比目标字母大的最小字母(二分查找)

1. 题目 给定一个只包含小写字母的有序数组letters 和一个目标字母 target&#xff0c;寻找有序数组里面比目标字母大的最小字母。 数组里字母的顺序是循环的。举个例子&#xff0c;如果目标字母target ‘z’ 并且有序数组为 letters [‘a’, ‘b’]&#xff0c;则答案返回…

超越YOLOv5,1.3M超轻量,高效易用,这个目标检测开源项目太香了!

这个目标检测神器简直香炸了&#xff01;它不仅连续登录Github全球趋势榜&#xff0c;拥有的全球尖端算法论文也接连登录全球技术趋势榜PaperWithCode。这个神器就是刚刚全面升级的PaddleDetection2.0&#xff01;它全面兼顾高性能算法、便捷开发、高效训练及完备部署&#xff…

MyFlash——美团点评的开源MySQL闪回工具

由于运维、DBA的误操作或是业务bug&#xff0c;我们在操作中时不时会出现误删除数据情况。早期要想恢复数据&#xff0c;只能让业务人员根据线上操作日志&#xff0c;构造误删除的数据&#xff0c;或者DBA使用binlog和备份的方式恢复数据&#xff0c;不管那种&#xff0c;都非常…

论文浅尝 - ACL2020 | 用于多媒体事件提取的跨媒体结构化公共空间

笔记整理 | 王琰&#xff0c;东南大学来源&#xff1a;ACL 2020链接&#xff1a;https://arxiv.org/pdf/2005.02472.pdf概述本论文引入一项新任务&#xff1a;多媒体事件提取&#xff08;ME&#xff09;&#xff0c;该任务旨在从多模态中抽取出事件和其论点(M2E2)。此外&#x…

屠榜CV还不是这篇论文的终极目标,它更大的目标其实是……

文 | 魏旭编 | 橙橙子&#xff0c;小戏当 BERT 模型出来之后&#xff0c;Transformer 架构基本成为 NLP 任务的底色。诸如 Roberta、XLNet、ELECTRA、GPT3 等刷榜各类 NLP 任务的模型&#xff0c;无一不是基于 Transformer 框架。无疑&#xff0c;Transformer 开启了 NLP 的统治…

day01『NLP打卡营』实践课1:词向量应用演示

Day01 词向量作业辅导 本教程旨在辅导同学如何完成 AI Studio课程——『NLP打卡营』实践课1&#xff1a;词向量应用展示 课后作业。 1. 选择词向量预训练模型 在PaddleNLP 中文Embedding模型查询PaddleNLP所支持的中文预训练模型。选择其中一个模型&#xff0c;如中文维基百…

流计算框架 Flink 与 Storm 的性能对比

1. 背景 Apache Flink 和 Apache Storm 是当前业界广泛使用的两个分布式实时计算框架。其中 Apache Storm&#xff08;以下简称“Storm”&#xff09;在美团点评实时计算业务中已有较为成熟的运用&#xff08;可参考 Storm 的可靠性保证测试&#xff09;&#xff0c;有管理平台…

论文浅尝 - AAAI2021 | 基于对比学习的三元组生成式抽取方法

作者 | 叶宏彬&#xff0c;浙江大学博士研究生&#xff0c;研究方向&#xff1a;知识图谱、自然语言处理接收会议 | AAAI2021论文链接 | https://arxiv.org/pdf/2009.06207.pdf摘要在自然语言处理和知识图谱领域的信息提取中&#xff0c;三元组抽取是必不可少的任务。在本文中&…