问题
最近跑师兄21年的论文代码,代码里使服务器托管网用了Pytorch分布式训练,在单机8卡的情况下,运行代码,出现如下问题。
也就是说GPU(1..7)上的进程占用了GPU0,这导致GPU0占的显存服务器托管网太多,以至于我的batchsize不能和原论文保持一致。
解决方法
我一点一点进行debug。
首先,在数据加载部分,由于没有将local_rank
和world_size
传入get_cifar_iter
函数,导致后续使用DALI创建pipeline时使用了默认的local_rank=0
,因此会在GPU0上多出该GPU下的进程
其次,在使用torch.load
加载模型权重时,没有设置map_location
,于是会默认加载到GPU0上,下图我选择将模型权重加载到cpu。虽然,这会使训练速度变慢,但为了和论文的batchsize保持一致也不得不这样做了。-.-
参考文献
- nn.parallel.DistributedDataParallel多卡训练,第一张卡会多出进程?
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
作为理工男,这份随笔更多是服务器托管网抒发个人见解,不设定立场,欢迎探讨。 人类从原始社会文明不断更替,需求从低层往高阶变化。历史总在不断循环更替中起起伏伏着。 原以为数学的学习就是一项工程技能的掌握,直到现今的领导多数具备高等理工背景。好奇心驱使,不仅一个问…