xypu98 / CWSAM

43 stars 0 forks source link

关于增大模型参数量后的疑问 #11

Open DBook111 opened 6 months ago

DBook111 commented 6 months ago

您好, 我在单卡上跑微调任务的时候一切都正常运行,显存占用11G/16G。 但是,我改进了SAM模型的adapter后,模型参数量变大了(因为对所有Vit block的适配器都进行了改变),继续使用单卡会爆显存,于是我设置 CUDA_VISIBLE_DEVICES=0,1,2,3 python -m torch.distributed.launch --nnodes 1 --nproc_per_node 4 train.py 进行分布式训练。 然而,我发现这样做每张卡都会复制相同大小的数据集,每张显卡都具有相同的显存占用😟。也就是说即便我设置了4块卡进行训练,依然会报显存不足的错误。这样单卡和多卡训练的区别仅在训练时间上,我并没有节省显存资源😂

所以,我想请问一下有没有什么解决办法来应对这种问题呢?

xypu98 commented 6 months ago

您好, 我在单卡上跑微调任务的时候一切都正常运行,显存占用11G/16G。 但是,我改进了SAM模型的adapter后,模型参数量变大了(因为对所有Vit block的适配器都进行了改变),继续使用单卡会爆显存,于是我设置 CUDA_VISIBLE_DEVICES=0,1,2,3 python -m torch.distributed.launch --nnodes 1 --nproc_per_node 4 train.py 进行分布式训练。 然而,我发现这样做每张卡都会复制相同大小的数据集,每张显卡都具有相同的显存占用😟。也就是说即便我设置了4块卡进行训练,依然会报显存不足的错误。这样单卡和多卡训练的区别仅在训练时间上,我并没有节省显存资源😂

所以,我想请问一下有没有什么解决办法来应对这种问题呢?

如果bs为1还爆显存,那就是模型太大需要使用模型并行分布式策略, 可以考虑用DeepSpeed或者Accelerate之类的包,个人没有拆模型并行分布式的经验,不好意思