pytorch DistributedDatap带批处理的并行单机多卡实现

1l5u6lss  于 2023-06-29  发布在  其他
关注(0)|答案(1)|浏览(140)

我想实现在单个服务器上的多个GPU上运行我的pytorch模型训练代码。
具体场景如下:训练时期=2000,每个时期的训练数据集的总数=1000,有三个GPU。在一个时期中每个GPU的训练数据运行的数量是episode//3。但由于显存的限制,每个GPU的显存容量只能运行批=32的数据。请问如何设置数据加载和数据加载器打包以适应上述情况,并在此过程中记录每次GPU运行的episode//3数据的平均值?
请注意,我的损失的设置是每个时期中每个事件的训练数据目标值的平均值。
目前在GPU上运行的结构如下:

for epoch in epochs:
    Avg_loss = 0
    while episode < train_num_episode:
          remaining = train_num_episode - episode
          batch_size = min(self.trainer_params['train_batch_size'], remaining)
          avg_loss = train_one_batch(batch_size)
    Avg_loss = average.update(avg_loss)
nimxete2

nimxete21#

创建DataLoader对象。

train_dataloader = data.DataLoader(
    dataset=train_dataset,
    batch_size=batch_size,
    shuffle=True,
    num_workers=num_workers,
    pin_memory=True,
)

将DataLoader对象 Package 在DataParallel对象中。

model = model.cuda()
model = nn.DataParallel(model)

训练模型。

for epoch in epochs:
    for batch_idx, (data, target) in enumerate(train_dataloader):
        data, target = data.cuda(), target.cuda()
        loss = model(data)
        ...

相关问题