多GPU训练

http://zh-v2.d2l.ai/chapter_computational-performance/multiple-gpus.html

new_params = [p.clone().to(device) for p in params]

这里为什么要用clone()呢,to()方法一般都会返回copy吧

沐神说了可加可不加,之所以写clone是因为假设p已经在GPU0上了,再to到GPU0上的话,它是不会做任何操作的,clone了再to的话它永远会帮你复制。保险起见,可以clone,但实际上在这个情况里不用是没关系的。可以看b站回放,34集02:13。

把GPU数量改成4个以上的时候acc会暴跌。

已经解决, 书中allreduce 代码有错误。 因为赋值给其他gpu的时候用的是 =, 所以赋值失败, 实际上其他gpu没有得到更新的数据, 除了0号gpu的数据是叠加的, 其他的没有叠加过。