OpenMOSS/CoLLiE

跑3D并行时,如果节点数大于1,会卡住

Closed this issue · 3 comments

我这边使用collie来跑3d_parallelism,用的脚本时legacy中的one_sentence_overfitting的3d_parallelism.py,其中tp_size=4,pp_size=4,16张卡来跑,pp_rank=0和pp_rank=3的进程会卡在optimizer.step之前,但是如果用的GPU数量时8的话,也就是不跨节点,就不会卡住,这可能时什么原因呢?

您可以更新一下collie版本再运行examples/one_sentence_overfitting/3d_parallelism.py试一下吗?我们在这个版本的代码上是可以正常进行多机训练的

我更新到dev分支之后,可以正常跑了。谢谢!可能是主分支还有bug?
另外有个问题,llama的transformers的模型能够直接载入吗?我看代码里面是有做state_dict的转换的,但是我这边跑用transformers训练过的llama-13b模型时,发现出来的loss和用transformers跑的有差距,transformers的时0.1左右,但是collie的是3左右。不过这个loss比随机初始化的loss是已经低不少了,所以我猜测是不是部分权重载入成功了,但是有些没有成功。这方面您有什么排查的建议吗?

@tongjizzy collie中实现的llama代码是根据pipeline和tensor parallelism特殊处理过的,并行模式下state dict确实和transformers的有所不同,建议用LlamaForCausalLM.from_pretrained或者LlamaForCausalLM.load_parallel_state_dict加载模型,例如:

# method 1
model = LlamaForCausalLM.from_pretrained("decapoda-research/llama-7b-hf", config=config)

# method 2
model =  LlamaForCausalLM.from_config(config)
state_dict = LlamaForCausalLM.load_parallel_state_dict(path, config)
model.load_state_dict(state_dict)