欢迎光临散文网 会员登陆 & 注册

专题三:多GPU计算

2023-03-29 18:41 作者:YouOnly_LiveOnce  | 我要投稿

引言:

NVIDIA公司的GPU编程接口采用CUDA,AMD公司的GPU编程接口采用OpenCL,本文以NVIDIA公司的GPU举例。

部分一:

查看显卡占用情况,指令如下:

打印结果:

包括了GPU的标号(取值为0,1,2,...)、GPU的名称(Name)和GPU使用率(Volatile GPU-Util)等内容,具体可参考专题一:Ubuntu搭建深度学习开发环境(Pytorch);进程(Processes)一栏则显示了所有占用GPU的进程信息,包括进程号(PID)、进程名称和显存占用等内容。

注意:

如果模型训练完成后,显存和GPU占用没有被自动释放,则需要将显存手动释放掉,方法如下:先使用"nvidia-smi"指令查看占用显存的进程;然后使用"sudo kill -9 PID(进程号)"来结束进程,即可释放显存。


部分二:利用pytorch查看显卡的数量、名称和属性等信息

查看显卡的CUDA是否有效

查看显卡的数量(标号为0,1,2,...)

查看当前显卡的标号

查看标号为0的显卡名称

查看标号为0的显卡属性

打印结果如下


部分三:指定GPU计算

方式一:.to(device)

指定单个GPU或CPU

指定多个GPU

方法二:.cuda()

指定单个GPU

指定多个GPU


注意一:

torch.nn.DataParallel是pytorch的一种并行方法,也称为单进程多GPU训练模式(DP模式),这种模式下并行计算的多个GPU都是由一个进程(process)控制的,在进行梯度传播时,也是在主GPU上进行的。


注意二:多GPU模型的保存与加载

单GPU模型

多GPU模型

可见,多GPU模型结构发生了改变!DataParallel也是一个nn.Module,传入的模型被放到了module中,在进行模型保存时,需要只保存DataParallel.module中的内容,即:

如果保存了整个DataParallel,则需要将新模型传入到DataParallel中才能加载权重文件,即:


注意三:不同GPU之间的数据不能直接计算


专题三:多GPU计算的评论 (共 条)

分享到微博请遵守国家法律