改变几行代码,PyTorch炼丹速度狂飙模型优化时间大减
欢迎关注" 计算机视觉研究院 "
计算机视觉研究院专栏
作者:Edison_G
关于 PyTorch 炼丹,本文作者表示: 「如果你有 8 个 GPU,整个训练过程只需要 2 分钟,实现 11.5 倍的性能加速 。
转自《机器之心》
如何提升 PyTorch「炼丹」速度? 最近,知名机器学习与 AI 研究者 Sebastian Raschka 向我们展示了他的绝招。据他表示,他的方法在不影响模型准确率的情况下,仅仅通过改变几行代码,将 BERT 优化时间从 22.63 分钟缩减到 3.15 分钟,训练速度足足提升了 7 倍。 作者更是表示,如果你有 8 个 GPU 可用,整个训练过程只需要 2 分钟,实现 11.5 倍的性能加速。 下面我们来看看他到底是如何实现的。 让 PyTorch 模型训练更快 首先是模型,作者采用 DistilBERT 模型进行研究,它是 BERT 的精简版,与 BERT 相比规模缩小了 40%,但性能几乎没有损失。 其次是数据集,训练数据集为大型电影评论数据集 IMDB Large Movie Review,该数据集总共包含 50000 条电影评论。 作者将使用下图中的 c 方法来预测数据集中的影评情绪。 基本任务交代清楚后,下面就是 PyTorch 的训练过程。为了让大家更好地理解这项任务,作者还贴心地介绍了一下热身练习,即如何在 IMDB 电影评论数据集上训练 DistilBERT 模型。如果你想自己运行代码,可以使用相关的 Python 库设置一个虚拟环境,如下所示: 相关软件的版本如下: 现在省略掉枯燥的数据加载介绍,只需要了解本文将数据集划分为 35000 个训练示例、5000 个验证示例和 10000 个测试示例。需要的代码如下:
代码部分截图 完整代码地址: https://github.com/rasbt/faster-pytorch-blog/blob/main/1_pytorch-distilbert.py 然后在 A100 GPU 上运行代码,得到如下结果:
部分结果截图 正如上述代码所示,模型从第 2 轮到第 3 轮开始有一点过拟合,验证准确率从 92.89% 下降到了 92.09%。在模型运行了 22.63 分钟后进行微调,最终的测试准确率为 91.43%。 使用 Trainer 类 接下来是改进上述代码,改进部分主要是把 PyTorch 模型包装在 LightningModule 中,这样就可以使用来自 Lightning 的 Trainer 类。部分代码截图如下:
完整代码地址:https://github.com/rasbt/faster-pytorch-blog/blob/main/2_pytorch-with-trainer.py 上述代码建立了一个 LightningModule,它定义了如何执行训练、验证和测试。相比于前面给出的代码,主要变化是在第 5 部分(即 ### 5 Finetuning),即微调模型。与以前不同的是,微调部分在 LightningModel 类中包装了 PyTorch 模型,并使用 Trainer 类来拟合模型。
之前的代码显示验证准确率从第 2 轮到第 3 轮有所下降,但改进后的代码使用了 ModelCheckpoint 以加载最佳模型。在同一台机器上,这个模型在 23.09 分钟内达到了 92% 的测试准确率。 需要注意,如果禁用 checkpointing 并允许 PyTorch 以非确定性模式运行,本次运行最终将获得与普通 PyTorch 相同的运行时间(时间为 22.63 分而不是 23.09 分)。 自动混合精度训练 进一步,如果 GPU 支持混合精度训练,可以开启 GPU 以提高计算效率。作者使用自动混合精度训练,在 32 位和 16 位浮点之间切换而不会牺牲准确率。 在这一优化下,使用 Trainer 类,即能通过一行代码实现自动混合精度训练:
上述操作可以将训练时间从 23.09 分钟缩短到 8.75 分钟,这几乎快了 3 倍。测试集的准确率为 92.2%,甚至比之前的 92.0% 还略有提高。 使用 Torch.Compile 静态图 最近 PyTorch 2.0 公告显示,PyTorch 团队引入了新的 toch.compile 函数。该函数可以通过生成优化的静态图来加速 PyTorch 代码执行,而不是使用动态图运行 PyTorch 代码。 由于 PyTorch 2.0 尚未正式发布,因而必须先要安装 torchtriton,并更新到 PyTorch 最新版本才能使用此功能。
然后通过添加这一行对代码进行修改:
在 4 块 GPU 上进行分布式数据并行 上文介绍了在单 GPU 上加速代码的混合精度训练,接下来介绍多 GPU 训练策略。下图总结了几种不同的多 GPU 训练技术。 想要实现分布式数据并行,可以通过 DistributedDataParallel 来实现,只需修改一行代码就能使用 Trainer。
经过这一步优化,在 4 个 A100 GPU 上,这段代码运行了 3.52 分钟就达到了 93.1% 的测试准确率。
DeepSpeed 最后,作者探索了在 Trainer 中使用深度学习优化库 DeepSpeed 以及多 GPU 策略的结果。首先必须安装 DeepSpeed 库:
接着只需更改一行代码即可启用该库:
这一波下来,用时 3.15 分钟就达到了 92.6% 的测试准确率。不过 PyTorch 也有 DeepSpeed 的替代方案:fully-sharded DataParallel,通过 strategy="fsdp" 调用,最后花费 3.62 分钟完成。 以上就是作者提高 PyTorch 模型训练速度的方法,感兴趣的小伙伴可以跟着原博客尝试一下,相信你会得到想要的结果。 原文链接:https://sebastianraschka.com/blog/2023/pytorch-faster.html © THE END
转载请联系本公众号获得授权 计算机视觉研究院学习群等你加入!
计算机视觉研究院 主要涉及 深度学习 领域,主要致力于 人脸检测、人脸识别,多目标检测、目标跟踪、图像分割等 研究方向。研究院 接下来会不断分享最新的论文算法新框架,我们这次改革不同点就是,我们要着重" 研究 "。之后我们会针对相应领域分享实践过程,让大家真正体会 摆脱理论 的真实场景,培养爱动手编程爱动脑思考的习惯!
计算机视觉研究院 公众号ID |ComputerVisionGzq
肾虚引起头痛,补肾是根本,记准一个穴位头痛是中青年的常发病症,因为其不同的疼痛性质和不同的疼痛部位分为不同的证型。治疗过程中辩证论治,通过辩证使用不同的治疗方案,才能有的放矢,提高治疗效果。使用针灸还是使用中药,只是治
崩漏效穴之隐白穴隐白为脾经井穴,脾主统血,故治崩漏效佳。百症赋梦靥不宁,厉兑相谐于隐白。为十三鬼穴之一,可以治疗神经精神类病变。隐白(井穴)解析1)隐白。隐,隐秘隐藏也。白,肺之色也,气也。该穴名
蔡英文吹牛拉票,后方却顶不住,望台独看懂中美元首会晤内容随着九合一选举临近,民进党为了赢得选举疯狂造势,继续打抗中保台牌。近日,为了助陈时中和林佳龙赢得台北市长选举,民进党在凯达格兰大道举行了一场拉票活动,蔡英文也出席了该活动。在活动现
2022创意农业学术季丨章继刚培育更香的岷江花田美学经济头条创作挑战赛2022创意农业学术季创意农业学乡村振兴微课堂2035全球农业展望田园中国创意农业新场景第一季(在第十五届创意农业论坛岷江村乡村旅游创意产业振兴峰会暨2022温江寿安
痴迷邪教晚节不保的法轮功神韵艺术团副团长关贵敏病亡中国反邪教网2022年11月15日消息,通讯员江韬李芬据悉,境外法轮功邪教组织重要骨干神韵艺术团副团长纽约天国乐团团长关贵敏于2022年9月底因肝癌在美国病亡,时年78岁。关贵敏关
280大平层,客厅落地窗外是海景,足不出户就能享受度假的快乐有钱真好,面朝大海,大面积落地窗采光,还拥有超大的开放式阳台,这该是多少人可望而不可得的,最要命的是这还不是他家唯一的一套房子!室内大概有280,超大平层,本来借着2面落地窗就显宽
快本停播超一年,快乐家族5人资源差距大,旱的旱死涝的涝死许嵩恋情的曝光,让冯禧这个芒果新人热度猛涨,而她所在的常规综艺你好星期六也再度成为了网民们热议的焦点。尽管湖南卫视和快乐大本营官方至今都没有官宣过节目停播,但该节目上次的更新时间已
人到中年,要斟酌什么叫适可而止而不是继续自我放飞人到中年,什么是最重要人到中年,多数人已经小有成就,事业还在上升期,家有妻儿,外有形形色色的红颜或蓝颜,只要TA愿意,想请TA赏脸共进晚餐拉近关系的人乌央乌央的多。中年人,前面有一
当秋天遇上童真褪去了夏日的炙热换上了秋日的闲适天高云淡每个角落都别具风情把秋天的美尽收其中让我们和孩子一起出发去感受这个醉人的季节机关幼儿园机关幼儿园开展我和秋天有约系列活动,活动包括探秋秘玩秋
危城之下,比病毒更可怕的是人心人类居住的环境不断恶化病毒也在不断变异一种特殊病毒能让人类的运动能力大幅提升思考能力并无太大影响但是变异人会变得凶残无比病毒进化的速度远超人们所想虽然人们也研发了大量高科技武器但是
秋天干燥多喝汤,一身火气全败光,推荐3道鲜美汤,清火去燥秋天干燥多喝汤,一身火气全败光,推荐3道鲜美汤,清火去燥秋天了,本身就比较干燥,特别容易上火,然而还有一大批人,还喜欢吃辛辣刺激的,太过于进补的肉类,美其名曰贴秋膘。其实秋天是适合