前言 关于 PyTorch 炼丹,本文作者表明:假如你有 8 个 GPU,整个操练进程只需求 2 分钟,完成 11.5 倍的功能加快。

本文转载自机器之心

仅用于学术分享,若侵权请联络删去

欢迎重视大众号CV技能攻略,专心于核算机视觉的技能总结、最新技能盯梢、经典论文解读、CV招聘信息。

CV各大方向专栏与各个部署结构最全教程收拾

核算机视觉入门1v3辅导班

怎么提升 PyTorch「炼丹」速度?

最近,知名机器学习与 AI 研讨者 Sebastian Raschka 向我们展现了他的绝技。据他表明,他的办法在不影响模型准确率的情况下,只是经过改动几行代码,将 BERT 优化时刻从 22.63 分钟缩减到 3.15 分钟,操练速度足足提升了 7 倍。

改变几行代码,PyTorch炼丹速度狂飙、模型优化时间大减

作者更是表明,假如你有 8 个 GPU 可用,整个操练进程只需求 2 分钟,完成 11.5 倍的功能加快。

改变几行代码,PyTorch炼丹速度狂飙、模型优化时间大减

下面我们来看看他到底是怎么完成的。

让 PyTorch 模型操练更快

首要是模型,作者选用 DistilBERT 模型进行研讨,它是 BERT 的精简版,与 BERT 比较规划缩小了 40%,但功能简直没有丢失。其次是数据集,操练数据集为大型电影谈论数据集 IMDB Large Movie Review,该数据集总共包括 50000 条电影谈论。作者将运用下图中的 c 办法来预测数据会集的影评情绪。

改变几行代码,PyTorch炼丹速度狂飙、模型优化时间大减

基本使命告知清楚后,下面便是 PyTorch 的操练进程。为了让我们更好地了解这项使命,作者还贴心肠介绍了一下热身操练,即怎么在 IMDB 电影谈论数据集上操练 DistilBERT 模型。假如你想自己运转代码,能够运用相关的 Python 库设置一个虚拟环境,如下所示:

改变几行代码,PyTorch炼丹速度狂飙、模型优化时间大减

相关软件的版本如下:

**

改变几行代码,PyTorch炼丹速度狂飙、模型优化时间大减

**

现在省略掉单调的数据加载介绍,只需求了解本文将数据集划分为 35000 个操练示例、5000 个验证示例和 10000 个测验示例。需求的代码如下:

改变几行代码,PyTorch炼丹速度狂飙、模型优化时间大减

代码部分截图

完好代码地址:github.com/rasbt/faste…

然后在 A100 GPU 上运转代码,得到如下成果:

改变几行代码,PyTorch炼丹速度狂飙、模型优化时间大减

部分成果截图

正如上述代码所示,模型从第 2 轮到第 3 轮开始有一点过拟合,验证准确率从 92.89% 下降到了 92.09%。在模型运转了 22.63 分钟后进行微调,最终的测验准确率为 91.43%。

运用 Trainer 类

接下来是改善上述代码,改善部分首要是把 PyTorch 模型包装在 LightningModule 中,这样就能够运用来自 Lightning 的 Trainer 类。部分代码截图如下:

改变几行代码,PyTorch炼丹速度狂飙、模型优化时间大减

完好代码地址:github.com/rasbt/faste…

上述代码建立了一个 LightningModule,它定义了怎么履行操练、验证和测验。比较于前面给出的代码,首要改变是在第 5 部分(即 ### 5 Finetuning),即微调模型。与曾经不同的是,微调部分在 LightningModel 类中包装了 PyTorch 模型,并运用 Trainer 类来拟合模型。

改变几行代码,PyTorch炼丹速度狂飙、模型优化时间大减

之前的代码显示验证准确率从第 2 轮到第 3 轮有所下降,但改善后的代码运用了 ModelCheckpoint 以加载最佳模型。在同一台机器上,这个模型在 23.09 分钟内到达了 92% 的测验准确率。

改变几行代码,PyTorch炼丹速度狂飙、模型优化时间大减

需求留意,假如禁用 checkpointing 并允许 PyTorch 以非确定性形式运转,本次运转最终将获得与普通 PyTorch 相同的运转时刻(时刻为 22.63 分而不是 23.09 分)。

主动混合精度操练

进一步,假如 GPU 支持混合精度操练,能够敞开 GPU 以进步核算功率。作者运用主动混合精度操练,在 32 位和 16 位浮点之间切换而不会牺牲准确率。

改变几行代码,PyTorch炼丹速度狂飙、模型优化时间大减

在这一优化下,运用 Trainer 类,即能经过一行代码完成主动混合精度操练:

改变几行代码,PyTorch炼丹速度狂飙、模型优化时间大减

上述操作能够将操练时刻从 23.09 分钟缩短到 8.75 分钟,这简直快了 3 倍。测验集的准确率为 92.2%,甚至比之前的 92.0% 还略有进步。

改变几行代码,PyTorch炼丹速度狂飙、模型优化时间大减

运用 Torch.Compile 静态图

最近 PyTorch 2.0 公告显示,PyTorch 团队引入了新的 toch.compile 函数。该函数能够经过生成优化的静态图来加快 PyTorch 代码履行,而不是运用动态图运转 PyTorch 代码。

改变几行代码,PyTorch炼丹速度狂飙、模型优化时间大减

因为 PyTorch 2.0 尚未正式发布,因而有必要先要装置 torchtriton,并更新到 PyTorch 最新版本才能运用此功能。

改变几行代码,PyTorch炼丹速度狂飙、模型优化时间大减

然后经过增加这一行对代码进行修改:

改变几行代码,PyTorch炼丹速度狂飙、模型优化时间大减

在 4 块 GPU 上进行分布式数据并行

上文介绍了在单 GPU 上加快代码的混合精度操练,接下来介绍多 GPU 操练战略。下图总结了几种不同的多 GPU 操练技能。

改变几行代码,PyTorch炼丹速度狂飙、模型优化时间大减

想要完成分布式数据并行,能够经过 DistributedDataParallel 来完成,只需修改一行代码就能运用 Trainer。

改变几行代码,PyTorch炼丹速度狂飙、模型优化时间大减

经过这一步优化,在 4 个 A100 GPU 上,这段代码运转了 3.52 分钟就到达了 93.1% 的测验准确率。

改变几行代码,PyTorch炼丹速度狂飙、模型优化时间大减

改变几行代码,PyTorch炼丹速度狂飙、模型优化时间大减

DeepSpeed

最终,作者探索了在 Trainer 中运用深度学习优化库 DeepSpeed 以及多 GPU 战略的成果。首要有必要装置 DeepSpeed 库:

改变几行代码,PyTorch炼丹速度狂飙、模型优化时间大减

接着只需更改一行代码即可启用该库:

改变几行代码,PyTorch炼丹速度狂飙、模型优化时间大减

这一波下来,用时 3.15 分钟就到达了 92.6% 的测验准确率。不过 PyTorch 也有 DeepSpeed 的代替计划:fully-sharded DataParallel,经过 strategy=”fsdp” 调用,最终花费 3.62 分钟完成。

改变几行代码,PyTorch炼丹速度狂飙、模型优化时间大减

以上便是作者进步 PyTorch 模型操练速度的办法,感兴趣的小伙伴能够跟着原博客尝试一下,相信你会得到想要的成果。

原文链接:sebastianraschka.com/blog/2023/p…

欢迎重视大众号CV技能攻略,专心于核算机视觉的技能总结、最新技能盯梢、经典论文解读、CV招聘信息。

核算机视觉入门1v3辅导班

【技能文档】《从零搭建pytorch模型教程》122页PDF下载

QQ沟通群:470899183。群内有大佬负责回答我们的日常学习、科研、代码问题。

其它文章

​AI最全资料汇总 | 基础入门、技能前沿、工业应用、部署结构、实战教程学习

改动几行代码,PyTorch炼丹速度狂飙、模型优化时刻大减

AAAI 2023 | 轻量级语义切割新范式: Head-Free 的线性 Transformer 结构

TSCD:弱监督语义切割新办法,中科院主动化所和北邮等联合提出

怎么用单个GPU在不到24小时的时刻内从零开始操练ViT模型?

CVPR 2023 | 根据Token对比的弱监督语义切割新计划!

比MobileOne还秀,Apple将重参数与ViT相结合提出FastViT

CVPR 2023 | One-to-Few:没有NMS检测也能够很强很快

ICLR 2023 | Specformer: Spectral GNNs Meet Transformers

从头审视Dropout

RestoreDet:低分辨率图像中方针检测

AAAI 2023 | 打破NAS瓶颈,AIO-P跨使命网络功能预测新结构

CLIP:语言-图像表明之间的桥梁​

方针检测Trick | SEA办法轻松抹平One-Stage与Two-Stage方针检测之间的差距

少样本学习总述:技能、算法和模型

CVPR 2023 | 标示500类,检测7000类!清华大学等提出通用方针检测算法UniDetector

CVPR 2023|根据多层多标准重建使命的MIM改善算法

CVPR 2023 | 超越MAE!谷歌提出MAGE:图像分类和生成到达SOTA!

称霸Kaggle的十大深度学习技巧

CVPR 2023 | 用于半监督方针检测的常识蒸馏办法

方针盯梢方向开源数据集资源汇总

CVPR2023 | 书生模型霸榜COCO方针检测,研讨团队解读揭露

Vision Transformer的重参化也来啦 | RepAdpater让ViT起飞

高效压缩99%参数量!轻量型图像增强计划CLUT-Net开源

一文了解 CVPR 2023 的Workshop 都要做什么

CVPR’23 最新 70 篇论文分方向收拾|包括方针检测、图像处理、人脸、医学影像、半监督学习等方向

方针检测无痛涨点新办法 | DRKD蒸馏让ResNet18具有ResNet50的精度

PyTorch 2.0正式版来了!

CVPR2023最新Backbone | FasterNet远超ShuffleNet、MobileNet、MobileViT等模型

CVPR2023 | 集成预操练金字塔结构的Transformer模型

AAAI 2023 | 一种通用的粗-细视觉Transformer加快计划

大核分化与留意力机制的奇妙结合,图像超分多标准留意网络MAN已开源!

核算机视觉各个方向沟通群与常识星球

CV小常识讨论与剖析(7) 寻觅论文立异点的新方式

CV小常识剖析与讨论(6)论文立异的一点误区

核算机视觉入门1v3辅导班

核算机视觉沟通群

聊聊核算机视觉入门