Tuesday, July 2, 2019

怎么样利用多个GPU

如果用pytorch, 那就得搞懂data and model parallelization  两种parallelization

data parallelization
1. replication明白的就是把model 复制到几个gpu上 (assumption是model 能fit在一个gpu)
2. scatter 然后把data split 成几份
3. parallel apply 叫forward
4. gather各自training 然后output在一个default gpu上

这个output 接着就是做
1. loss.backward() (这个loss 也可以用data parallelization wrap, 于是重复前面四个步骤,得到grad) - 需要了解这个怎么弄
2. optimizer.step() 然后在default gpu 上做optimizer.step()

然后再回到前面的forward

model parallelization
这个就需要把model 拆分到个个不同的gpu上
但是这个performance 其实会下降,因为tensor 需要在不同的gpu移动,而且各自的gpu常常闲置
pipeline:比较好的方法用pipeline,就是把batch data继续split, 当一个gpu 1处理完一个split,一道另移到gpu2是,马上给gpu1 上新的split.这样会使到overall performance变得更快。


Pru - 和老板聊了下,可能switch到另一个project che 去
Paper - 了解了一下pytorch code, 明天继续了解。发现pytorch forum, stackoverflow 都挺给力,这样了解起来就比较方便。 data 和model parellization 这两个概念也终于搞懂了

No comments:

Post a Comment