RuntimeError: module must have its parameters and buffers on device cuda:2 (device_ids[0]) but found

RuntimeError: module must have its parameters and buffers on device cuda:2 (device_ids[0]) but found one of them on device: cuda:0

出现这个问题是使用一机多卡分布式训练时,没有调用显卡0,例如使用显卡1,2,3进行训练。
使用的模块是pytorch nn.DataParallel。

下面给出有问题的代码

    device = torch.device("cuda" if args.cuda else "cpu")
    #Try to load models
    if args.model == 'pointnet':
        model = PointNet(args).to(device)  #这里应该对应自己的模型
    elif args.model == 'dgcnn':
        model = DGCNN(args).to(device)     #这里应该对应自己的模型
    else:
        raise Exception("Not implemented")
    device_ids = [12,3]
    model = nn.DataParallel(model,device_ids=device_ids)

问题就出在device处,因为下面这条语句,默认将模型放在了cuda 0上,也就是我们没有使用的显卡0。于是会产生错误RuntimeError: module must have its parameters and buffers on device cuda:2 (device_ids[0]) but found one of them on device: cuda:0

device = torch.device("cuda")

那么修改的思路也比较简单,如下。指定cuda,避免将其放在默认的显卡0上。

    device = torch.device("cuda:1" if args.cuda else "cpu")
    #Try to load models
    if args.model == 'pointnet':
        model = PointNet(args).to(device)  #这里应该对应自己的模型
    elif args.model == 'dgcnn':
        model = DGCNN(args).to(device)     #这里应该对应自己的模型
    else:
        raise Exception("Not implemented")
    device_ids = [12,3]
    model = nn.DataParallel(model,device_ids=device_ids)

问题解决,可以愉快的训练了。

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值