加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 创业 > 正文

训练提速60%!只需5行代码,PyTorch 1.6即将原生支持自动混合精度训练

发布时间:2020-07-15 04:57:05 所属栏目:创业 来源:站长网
导读:副问题#e# PyTorch 1.6 nightly增进了一个子模块 amp,支持自动殽杂精度实习。值得等候。来看看机能怎样,对比Nvidia Apex 有哪些上风? 即将在 PyTorch 1.6上宣布的 torch.cuda.amp 殽杂精度实习模块实现了它的理睬,只需增进几行新代码就可以进步峻型模子

with torch.cuda.amp.autocast():     y_pred = model(X_batch).squeeze()     loss = self.loss_fn(y_pred, y_batch) 

以这种方法包装前向撒播,可以自动打开后传(如 loss.backwards ())的autocasting,因此不必要挪用两次autocast。

只要你遵循PyTorch 的最佳实践(譬喻,停止in-place操纵) ,autocasting根基上就可以“正常事变”。它乃至可以行使多GPU DistributedDataParallel API (只要遵循提议的计策,每个 GPU 只行使一个历程)。只需一个小调解,多GPU DataParallel API也可以用。Pytorch 文档中的 Automatic Mixed Precision Examples 页面的“Working with multiple GPUs”部门是关于这个主题的一个利便的参考。小我私人概念,有一个要记着的重点是: "优先用 binary cross entropy with logits 而不是 binary cross entropy"。

Benchmarks机能

此时,我们已经相识了什么是殽杂精度,什么是张量核,以及 PyTorch API 怎样实现自动殽杂精度。独一剩下的就是看看一些真实天下的机能benchmarks!

我曾经用自动殽杂精度实习过三个很是纷歧样的神经收集,尚有一次没用,通过 Spell API 挪用 V100s (上一代张量核)和 T4s (今世张量核)。我别离行使了 AWS EC2实例、 p3.2xlarge 和 g4dn.xlarge,最近的 PyTorch 1.6 nightly 和 CUDA 10.0。全部模子的收敛都是同等的,即没有一个模子发明殽杂精度收集和原收集在逊?ю失上有任何差别。实习的收集如下:

前馈, 一个前馈神经收集,实习数据来自Kaggle角逐Rossman Store Samples UNet, 一此中等巨细的原版UNet 图像支解收集, 在数据集Segmented Bob Ross Images 上实习 BERT, 一个大的 NLP transformer 模子,行使bert-base-uncased 主干(通过 huggingface),及数据来自Kaggle比赛 Twitter Sentiment Extraction

功效如下:

实习提速60%!只需5行代码,PyTorch 1.6即将原生支持自动殽杂精度实习

因为前馈收集很是小,殽杂精度实习对它没有任何甜头。

UNet 是一此中等局限的卷积模子,共有7,703,497个参数,从殽杂精度实习中获得了明显的甜头。风趣的是,固然 V100和 T4都受益于殽杂精度实习,但 T4的甜头要大得多: 节减5%时刻vs. 高达30%的时刻。

BERT 是一个很大的模子,在这里行使殽杂精度实习节减时刻,从中等模子的“很好”到了“必需拥有”。在Volta或Turing GPU 上实习,自动殽杂精度将为大型模子镌汰50% 到60% 的实习时刻!

这是一个庞大的上风,尤其是当你思量到增进的伟大性极小时——只必要对模子实习剧本举办四到五行代码修改。在我看来:

殽杂精度应该是你对模子实习剧本举办的最先机能优化之一。

内存呢?

正如我在“殽杂精度是怎样事变的”一节中表明的那样,在内存中fp16矩阵的巨细是fp32矩阵的一半,因此,殽杂精度实习的另一个据称的上风是内存行使率。GPU 内存的瓶颈远小于 GPU 的计较手段,但仍有很大的优化代价。你的内存行使服从越高,你可以在 GPU 上行使的batch size就越大。

PyTorch 在模子实习进程开始时保存必然数目的 GPU 内存,并在实习时代保存这些内存。这可以防备其余历程在实习进程中抢占过多的 GPU 内存,迫使 PyTorch 实习剧本瓦解并呈现 OOM 错误。

以下是启用殽杂精度实习对 PyTorch 内存保存举动的影响:

实习提速60%!只需5行代码,PyTorch 1.6即将原生支持自动殽杂精度实习

风趣的是,固然两个较大的模子都看到了切换到殽杂精度的甜头,UNet 从切换中获得的甜头比 BERT 多得多。PyTorch 内存分派举动对我来说很是不透明,以是我不知道为什么会呈现这种环境。

总结

在即将宣布的 PyTorch 1.6版本中,自动殽杂精度实习是一个易于行使且成果强盛的新特征,该版本理睬将在最新的 NVIDIA GPU 上运行的大型模子实习事变加速60% 。

固然这种技能已经存在了一段时刻,可是对付平凡用户来说还不是很轻易领略,由于直到此刻它还没有一个原生 PyTorch API。

要直接从源代码中相识更多关于殽杂精度实习的信息,请参阅 PyTorch master 文档中的automatic mixed precision package和automatic mixed precision examples页面。

想本身测试一下这个成果?安装最新的 PyTorch nightly很是简朴: 查察 PyTorch 主页上的声名相识怎样安装。

想要本身复现这些benchmarks吗?全部模子源代码都可以在 GitHub 上的 ResidentMario/spell-feedforward-rossman, ResidentMario/spell-unet-bob-ross, 和 ResidentMario/spell-tweet-sentiment-extraction 库中得到。

 

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读