训练提速60%!只需5行代码,PyTorch 1.6即将原生支持自动混合精度训练
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 功效如下: 因为前馈收集很是小,殽杂精度实习对它没有任何甜头。 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 内存保存举动的影响: 风趣的是,固然两个较大的模子都看到了切换到殽杂精度的甜头,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 库中得到。
(编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |