jia-zhuang / pytorch-multi-gpu-training

整理 pytorch 单机多 GPU 训练方法与原理
706 stars 80 forks source link

关于Accelerate单机多卡训练 #6

Closed hhr114 closed 3 months ago

hhr114 commented 3 months ago

accelerate单机多卡训练类似于项目中提到的ddp训练方式,训练时每个进程独享一张显卡,那么是否每个进程都会存取一份训练数据(dataset),使得内存占用变成原来单卡的数倍?目前只知道accelerate会对dataloader进行切分,不知道对于前一阶段的dataset,有没有做到进程间共享?以下是Claude3的回答,请您指教。 image.png

jia-zhuang commented 3 months ago

没有共享,内存占用会加倍,这个我测过。对于特别大的数据集可能会爆内存,这种情况可以切换成pytorch的IterableDataset就可以了

hhr114 commented 3 months ago

谢谢解答。请问pytorch的IterableDataset和内存映射(调用np.memmap),哪一个效率更高呢?您对此有经验吗?

jia-zhuang commented 3 months ago

具体没有对比过。不过,pytorch的IterableDataset原生支持多进程并行,效率不低,至少不会成为训练过程中的瓶颈,我现在基本都用这个。如果用np.memmap的话可能还需要自己做数据切分,挺麻烦的。