pytorch使用多显卡并行加速训练模型(nn.DataParallel)


torch.nn.DataParallel是一种能够将数据分散到多张显卡上从而加快模型训练的方法。

它的原理是首先在指定的每张显卡上拷贝一份模型,然后将输入的数据分散到各张显卡上,计算梯度,回传到第一张显卡上,然后再对模型进行参数优化。

所以,第一张显卡的负载往往更高,但由于该方法集成度高,书写简便,使用仍十分广泛。

示例:

import torch
import torch.nn as nn

...
gpu_num = x  # 可用的gpu数量
model = Model()

if gpu_num == 1:  # 单卡
    model = model.cuda(0)
else:  # 多卡
    device_ids = list(range(gpu_num))
    model = nn.DataParallel(model, device_ids=device_ids).cuda(device=device_ids[0])
...
# 所有数据都需要先放到指定的第一张显卡上才能进行多卡训练
data = data.cuda(0)
...
# train ...

 

***注意使用nn.DataParellel时,模型后会自动添加一个.module的属性,在save的时候会将其保存下来,所以在load该模型时需要去掉字典key中的’.module’字符串

 

***在使用nn.DataParellel时,由于自动添加了module模型,因此需要分块训练模型的时候,也需要将模型块名更改。

例如:

# 原optimizer定义
optimizer = optim.Adam(params=model.part.parameters(), lr=0.00001)

# 使用多卡训练后
optimizer = optim.Adam(params=model.module.part.parameters(), lr=0.00001)

 

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/279373.html

(0)
上一篇 2022年8月7日 14:47
下一篇 2022年8月7日 14:47

相关推荐

发表回复

登录后才能评论