多GPU环境运行实验的一点经验

多GPU环境运行实验的一点经验

电脑配置

OS: Ubuntu 20.04
GPU: RTX 3090 x 2, 分别记为gpu0,gpu1。
Tensorflow: 2.4.0

遇到的问题

程序里面原本设置如下:

os.environ["CUDA_VISIBLE_DEVICES"] = "0, 1"

实际上如果不设置的话,也是默认使用两块GPU.

我遇到的问题是:启动一个程序的话,使用率, gpu0:90%, gpu1: 接近0。
然后我启动了3个程序,相当于三个程序同时在运行(速度相比于只运行一个慢多了),这样一来, 使用率, gpu0:100%, gpu1: 10%, 我发现这三个程序实际上都是在gpu0上运行的,如下:
在这里插入图片描述看来,gpu1基本上没啥用,太浪费了。 怎么办?

尝试1

首先想到的是在运行程序的时候通过指定GPU的方式来把4个运行任务均摊到两个gpu上。具体讲:
通过命令行+ 参数的方式来指定gpu,
运行程序的命令如下:

:python3 start.py --gpuid '0'

其中start.py即为要运行的程序文件,通过参数gpuid来指定使用哪一块gpu。

start.py中,

parser.add_argument('--gpuid', type=str, default='0, 1', help="GPU-ID used for training in a multi-GPU environment (default: None)")


os.environ["CUDA_VISIBLE_DEVICES"] = args.gpuid # 指定GPU

# 接着就是启动实验的程序。

奇怪的是这种指定方式的方式并没有起到任何作用。

尝试2

直接在命令行进行指定并启动程序,具体命令如下:

CUDA_VISIBLE_DEVICES = 1 python3 start.py

注:当然也可以指定多个gpu, 如, CUDA_VISIBLE_DEVICES=0, 1。

通过这样的方式给每个GPU分配两个运行任务,与不指定GPU相比,发现:
1.GPU1的使用率提高了,实际上两块GPU的使用率相当;
2 程序运行速度提高了不少,因为之前4个运行任务都在gpu0上,不过带来的问题时噪音变大了。之前两个GPU fan都在75%左右, 现在两个gpu fan都很高,一个为100%。
如下:
在这里插入图片描述

其他技巧

多GPU环境,如果不指定GPU的话,系统以一种贪婪的方式把计算任务铺满所有的GPU资源,因此可以在程序中设置动态分配GPU资源
如下:

gpus = tf.config.experimental.list_physiological_devices("GPU")
for gpu in gpus:
	 tf.config.experimental.set_memory_growth(gpu, True)

OK.

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MasterQKK 被注册

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值