OpenBMB / BMTrain

Efficient Training (including pre-training and fine-tuning) for Big Models
Apache License 2.0
560 stars 77 forks source link

如果一台机器上的显存不够加大载模型时,是否将加载到其他机器上? #62

Closed bucm-tcm-tool closed 1 year ago

bucm-tcm-tool commented 1 year ago

您好,问题如下: 4台机器,每台2张2080ti(11G),如果模型很大,一台机器加载不了,是否会通过模型并行加载到其他机器上? 如果是,各节点是依次执行以下代码实现训练吗? torchrun --nnodes=4 --nproc_per_node=2 --rdzv_id=1 --rdzv_backend=c10d --rdzv_endpoint=xxx.xxx.xxx.xx:88688} train.py _注:各节点执行以上代码时时,将指令中的rdzvid=更改为1、2、3、4,以对应四台机器,是这样吗?

a710128 commented 1 year ago

BMTrain在设计时是考虑了这种情况的,例如使用bmtrain.load会现在rank0上将模型加载到内存,在将参数拷贝到GPU上时同步进行参数切割。所以可以在单块GPU显存不够时加载模型。

将指令中的rdzv_id=更改为1、2、3、4,以对应四台机器,是这样吗?

rdzv_id是指job_id,具体使用方法可以参考官方文档https://pytorch.org/docs/stable/elastic/run.html#usage

bucm-tcm-tool commented 1 year ago

也就是说,我首先需要保证rank 0的内存足以加载模型。有了这个前提,然后rank 0,1,2,3依次执行指令”torchrun --...“,其中rdzv_id=分别为1,2,3,4,是这样吗? 不知道理解的对不对:模型先加载到内存,此时因rank 0的显存不够,所以会等后续的rank启动。当多个rank的显存满足模型后,再分别加载到各rank上开始训练。

a710128 commented 1 year ago

rdzv_id需要设置成一样的