为什么dataloader出来batchsize为8,进入到model之后就变成了2
首先说原因,大概率是由于一个batchsize中的数据被分载到四个gpu上工作了,你可能设置了gpu数量为1,但是如果不设置gpu的可见域,它依然会默认调用所有可用gpu资源进行分载,这就导致事实上只用了四分之一的数据,后面计算的梯度都没算进去,所以解决办法就是重新定义gpu的可见域:
代码通常由以下组成:
parser.add_argument('-g', '--gpu', default=0, type=int,
help='indices of GPUs to enable (default: all)')
gpu = str(args.gpu)
os.environ["CUDA_VISIBLE_DEVICES"] = gpu
如此,所有数据就都在一个gpu上了,不用考虑分载的问题。
另外说明,如果本身就需要实现多gpu并行,那是正常的,前提得保证可见域和需要用到gpu数量的对齐