http://zh.d2l.ai/chapter_computational-performance/multiple-gpus-concise.html
有个疑问,为什么net是放在了0和1两个GPU上,但当train的时候,却只把X和y移到了GPU[0]上呢?谢谢!
5 Likes
pytorch中,网络被Dataparallel“包装”后,在前向过程会把输入tensor自动分配到每个显卡上。
而Dataparallel使用的是master-slave的数据并行模式,主卡默认为0号GPU,所以在进网络之前,只要移到GPU[0]就可以了。
2 Likes
我有两张GPU,代码跑时候报错信息如下:
module must have its parameter and buffers on device cuda:0(device_ids[0]) but found one of them on device:cpu
请问是什么原因呢
从13.1节里面的例子来看,应该还要把网络也迁移一下
net = nn.DataParallel(net, device_ids=devices).to(devices[0])
1 Like
反向传播不用 l.mean().backward()吗?直接 l.backward()?第三章3.6是 l.mean().backward()
你好,我是用pycharm运行代码时出现一下问题:
warnings.warn('PyTorch is not compiled with NCCL support')
我自己看了写答案,它们说python不支持nccl,如果我把net = nn.DataParallel(net, device_ids=devices).to(devices[0])
去掉,就不会出现这个warning,我的问题是:
- 有没有办法去掉这个warning
- 如果有,改变nccl之后对结果有什么影响?例如精度或者速度?
谢谢
1 Like
CrossEntropyLoss默认好像是mean,3.6是因为使用的是自定义的crossentropy
1 Like
你可以检查一下你的devices变量,我估计里面有cpu
注意,这部分的代码的原始库进行相应了的修改,请使用英文版教材中的实例代码