运行程序时报错:
定位的错误是:D=torch.nn.DataParallel(discriminator(n_filters=32)).cuda(gpu_id)
本来以为是因为服务器上有4块显卡,GPU1,GPU2,GPU3的计算能力都是2.0,但是GPU0的计算能力是>3的,所以认为是调用的时候为每个GPU都分配一定的任务,所以才报错的. 但是 看其他框架下的代码直接使用XX.cuda()也是可以的..查了很多资料都没有解决方案.
有遇到过类似问题的,他们的原因是系统升级后,显卡驱动不能用了,所以要升级显卡驱动....但是我没有升级系统呀???
把函数改一改,将gpu_id作为全局变量,然后还是不行...
最后师弟将这两句函数改了,变成如下方式,就可以了....
gpu_id=0
D=discriminator(n_filters=32).cuda(gpu_id)
#D=torch.nn.DataParallel(discriminator(n_filters=32)).cuda(gpu_id)
G=generator(n_filters=32).cuda(gpu_id)
#G=torch.nn.DataParallel(generator(n_filters=32)).cuda(gpu_id)
我查了查DataParallel在pytorch中使用的,它的使用方法如下:
可能是使用的格式不对吧.这样的操作可能是对于多个GPU可以分散任务,但是由于我的其他的GPU不能用,能用的只有1块,所以就会报错,还是直接使用单个GPU就好了...但是在单GPU的机器上跑就不会出错.