首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在训练机器学习模型时,GPU利用率低的原因是什么?

在训练机器学习模型时,GPU利用率低的原因是什么?
EN

Stack Overflow用户
提问于 2022-09-03 17:36:26
回答 2查看 58关注 0票数 0

假设服务器上有8个gpus。(由0至7)

当我在gpu #0上训练一个简单的(小的)模型时,每小时大约需要20分钟。但是,当我在一些gpu上加载5或6个以上的模型时,例如,从gpu #0到#2的每个gpu有2个实验,(总共6个)每个时代的训练时间都会爆炸。(约1小时)

当我为所有gpu训练两台gpu(总共16个实验)时,大约需要3个小时才能完成一个时代。

当我看到CPU的利用率时,它是好的。但是GPU的利用率下降了。

下降的原因是什么,我如何解决这个问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-09-03 23:33:11

使用多个GPU进行深度学习基本上有两种方法:

  • 使用torch.nn.DataParallel(module) (DP)

正式文件非常不鼓励这个函数,因为它在的所有GPU中复制整个模块,每个向前通过。在前向传递结束时,模型被破坏。因此,当你有大模型时,它可能是你训练时间的一个重要瓶颈,甚至比单个GPU慢。例如,当您冻结大模块的很大一部分用于微调时,情况可能是这样的。这就是为什么你可以考虑使用:

  • torch.nn.parallel.DistributedDataParallel(module, device_ids=) (顺铂) 文档

这个函数通常需要对代码进行更多的重构,但是它提高了效率,因为它在培训开始时只在GPU上复制一次模型。随着时间的推移,模型是持久化的,在每次通过钩子向后传递之后,梯度都是同步的。为了更进一步,您还可以分发数据和优化器,以避免数据传输。您可以使用火炬-点火/分发简单地完成它(以及并行化模块)。

我不知道您尝试了哪种方法,但是如果您正在使用DDP,我鼓励您使用DDP而不是DP。

票数 2
EN

Stack Overflow用户

发布于 2022-09-04 13:55:14

由于GPU具有极大的并行性,因此处理数据的速度要比CPU快得多,但它们的灵活性却不如CPU。GPU不能像CPU那样管理计算机的所有输入和输出,CPU有大量的指令。单个CPU核比单个GPU核更快(以CPU时钟速度衡量)和更智能(可用指令集来衡量);然而,GPU核的数量和它们提供的巨大并行性弥补了单核时钟速度和受限指令集之间的差异。

GPU最有效的使用是重复的、高度并行的处理作业。

如果您的代码不是重复的或非常并行的,请使用您的CPU。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73594247

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档