pytorch使用多显卡训练

多显卡参考链接

链接1
链接2
链接3

第一步:设置多卡训练正确

如果服务器的0号卡被别人占用,就得在刚开始加上这几行代码,手动更改0号显卡是2,1号卡是3。实际上,在通过各种提交方式提交程序作业至服务器,被分配好显卡之后,CUDA_VISIBLE_DEVICES已经被设置为可用的卡的逻辑编号了,直接写就好了。
如果想得知自己使用的是哪一张卡,可以使用os.environ查看系统环境比那辆,应该就能找到。
习惯放在import os之后

os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID"
os.environ["CUDA_VISIBLE_DEVICES"] = "2, 3"

为什么这样写:详见
怎样选卡,超级详细?参考
训练的时候

device_ids = [0, 1]  # 这里的0和1就是前面的2和3
net = torch.nn.DataParallel(net) # , device_ids=device_ids)  # 就不加那个id选择,有多少用多少。
# 优化器的写法
optimizer = torch.optim.SGD(net.parameters(), lr=lr)
optimizer = nn.DataParallel(optimizer, device_ids=device_ids)

第二步:设置随机种子

def setup_seed(seed):
     torch.manual_seed(seed)
     torch.cuda.manual_seed_all(seed)
     np.random.seed(seed)
     random.seed(seed)
     torch.backends.cudnn.deterministic = True  # 为了确定算法,保证得到一样的结果。
     torch.backends.cudnn.enabled = True  # 使用非确定性算法
     torch.backends.cudnn.benchmark = True  # 是否自动加速。
# 设置随机数种子
setup_seed(20)

第三步:起飞小指南

就是有多少显卡,用多少显卡。

if device == 'cuda':
    net = torch.nn.DataParallel(net)
    net11 = torch.nn.DataParallel(net11)
    torch.cudnn.benchmark = True

第四步:‘DataParallel’ object has no attribute 'update’报错

这是因为使用DataParallel之后相当于给你的模型包装了一层DataParallel,可以在DataParallel之后使用model=model.module就变为直接可以用的模型,使用自己定义的其他函数了。

在Conda环境中,如果你想要利用两块GPU进行并行训练,通常需要在使用支持GPU计算的库(如PyTorch、TensorFlow等)时设置。这里以PyTorch为例说明: 1. **安装必要的库**: 确保你已经安装了PyTorch和CUDA,可以使用以下命令安装: ``` conda install pytorch torchvision cudatoolkit=10.2 -c pytorch ``` 需要注意的是,你需要匹配你机器上安装的CUDA版本。 2. **配置环境**: 使用`conda create`创建一个新的环境,并启用CUDA和Multi-GPU支持: ```bash conda create -n my_gpus_env python=3.8 torch=your_version torchvision cuDNN=your_version mambaforge # 使用mambaforge加速安装 conda activate my_gpus_env ``` 3. **设置CUDA_VISIBLE_DEVICES**: 进入环境后,在Python脚本中,你可以通过`os.environ['CUDA_VISIBLE_DEVICES']`来指定显卡。例如,如果你想使用第一张和第二张GPU,可以这样做: ```python import os os.environ["CUDA_VISIBLE_DEVICES"] = "0,1" # 如果你的GPU编号从0开始 4. **数据并行或多进程训练**: PyTorch提供了一些工具来支持多GPU训练,比如DataParallel(数据并行)或DistributedDataParallel(分布式数据并行)。下面是一个简单的例子,展示了如何使用DataParallel: ```python from torch.nn.parallel import DataParallel model = MyModel() # 先实例化模型 model = DataParallel(model) # 包装到DataParallel中 ``` 5. **运行训练**: 开始训练时,模型会自动分布到指定的GPU上。记得将训练代码放在适当的循环中,如`for epoch in epochs:`。 注意:不同框架的具体设置可能会有所不同,尤其是对于分布式训练,通常还需要一个调度器(如Horovod)来管理资源。此外,硬件配置和系统限制也会影响能否顺利使用多GPU。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值