pytorch多卡训练模型

部署运行你感兴趣的模型镜像

DP方法

基本原理

也即是:数据拆分,模型不拆分的思路。

输入数据自动分割成若干小批量,并将模型复制到指定的多个 GPU 上。所有 GPU 计算得到的梯度会在主设备(device_ids 列表中的第一个 GPU)进行汇总后更新模型参数。这时的batch size应该是单块显卡上的batch size乘以显卡数量。

适用场景

适用于模型较小的场景。 但会造成主设备负载过高。

使用方法

#------------------------- 初始化device变量------------------------- 
device = torch.device('cuda:1' if torch.cuda.is_available() else "cpu")

#-------------- 修改batch size为所有显卡训练的batch size总和 --------------
train_dataloader = DataLoader(train_dataset, 8, True)

# ------------------------- 模型初始化、数据并行 -------------------------
model = model(num_class=3)

#调用DataParallel类,传参数。第二个参数为一个list,为参与并行计算的显卡的id,从0开始
#要注意list的第一个数字要和初始化device的显卡号对应一致,否则会报错。
model = model.to(device)  # 先移到主GPU
model = torch.nn.DataParallel(module=model, device_ids=[1, 0, 2, 3])  # 然后包装

主要是上面三个部分要做改动。整体比较简单。

错误记录

1. 调用DataParallel类,传参数。

unet = torch.nn.DataParallel(module=unet, device_ids=[1, 0, 2, 3])。

第二个参数为一个list,为参与并行计算的显卡的id,id从0开始。要注意list的第一个数字要和

device = torch.device('cuda:1' if torch.cuda.is_available() else "cpu")

的显卡号对应一致,否则会报错。

2. train_dataloader = DataLoader(train_dataset, batch size = 8, True)

这里的batch size 应该是所有参加训练的显卡的batch size的总和。因为DataParallel 会将输入 batch 按照设备数量进行切分。如果太小会导致并不是所有的指定的显卡都会参与训练。

DDP方法

目前实验室配置以满足需求,暂不考虑DDP方法。DP方法已经能够完成日常学习。后期若要训练大模型会再学习该方法。

您可能感兴趣的与本文相关的镜像

PyTorch 2.5

PyTorch 2.5

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值