赞
踩
DataParallel 会将module复制到多个卡上,也会将每个batch均分到每张卡上,每张卡独立forward自己那份data,而在backward时,每个卡上的梯度会汇总到原始的module上(但是,这样的方式会造成原始module在的那张卡的显存压力比其他卡要大,也就是这种方式存在负载不均衡的情况),以此来实现并行。
所以模型必须先设定一个主卡,用来汇聚其余卡的信息,但是数据就不需要,所以模型先model.cuda(id)之后再model = nn,DataParallel(model, device= gpu_list),但是数据传入之前直接tensor.cuda即可,不用初始化主卡,数据会均分,但是实际上数据也是先加载到主卡上,默认0号卡,之后再均分。
本质上是增大batch,毕竟大batch比较稳定。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。