LLaMA-Factory icon indicating copy to clipboard operation
LLaMA-Factory copied to clipboard

多节点使用zero3速度很慢

Open HelloWorld506 opened this issue 1 year ago • 12 comments

Reminder

  • [X] I have read the README and searched the existing issues.

System Info

多个节点,每个节点8张40G A100,训练72B模型

Reproduction

多节点使用zero3速度很慢 我有多个节点,每个节点下面有8张A100,使用zero3时,72B模型被分到了所有节点的所有gpu上,即使使用了nvlink,但通信延迟仍然非常高,导致训练速度很慢,比单节点使用zero3+offload速度还慢很多,导致的问题是节点越多,训练速度反而更慢,不如只使用单节点 然而实际上单节点的8张A100理论上就可以使用zero3放下整个72B模型了,若可以控制模型只在节点内被拆分,理论上可以减少通信,加快训练速度 请问大佬们,有方法控制zero3只把模型参数分摊到同一节点内吗,每个节点都保存一个完整的模型,节点之间只用同步梯度,从而加快训练速度吗

Expected behavior

No response

Others

No response

HelloWorld506 avatar Dec 18 '24 03:12 HelloWorld506

try deepspeed zero++ or HSDP

hiyouga avatar Jan 12 '25 09:01 hiyouga

@hiyouga 我尝试过使用zero++,设置了zero_hpz_partition_size为8,确实加速了训练,但是训练过程中loss一直固定为11,grad_norm一直为0,训练失败,请问是llamafactory还没适配zero++吗,我该怎样才能正确使用zero++?

HelloWorld506 avatar Jan 12 '25 09:01 HelloWorld506

那试试 HSDP?

hiyouga avatar Jan 12 '25 09:01 hiyouga

那试试 HSDP?

@hiyouga 请问HSDP在llamafactory中应该如何使用呢

HelloWorld506 avatar Jan 13 '25 03:01 HelloWorld506

https://huggingface.co/docs/accelerate/en/usage_guides/fsdp HYBRID_SHARD

hiyouga avatar Jan 13 '25 04:01 hiyouga

https://huggingface.co/docs/accelerate/en/usage_guides/fsdp HYBRID_SHARD

@hiyouga 您好,我尝试了HYBRID_SHARD,然而在训练刚开始即报错torch.distributed.elastic.multiprocessing.errors.ChildFailedError,然后自动退出 image 10 我的fsdp_config如下: compute_environment: LOCAL_MACHINE debug: false distributed_type: FSDP downcast_bf16: 'no' enable_cpu_affinity: false fsdp_config: fsdp_activation_checkpointing: false fsdp_auto_wrap_policy: TRANSFORMER_BASED_WRAP fsdp_backward_prefetch: BACKWARD_PRE fsdp_cpu_ram_efficient_loading: true fsdp_forward_prefetch: false fsdp_offload_params: true fsdp_sharding_strategy: HYBRID_SHARD fsdp_state_dict_type: FULL_STATE_DICT fsdp_sync_module_states: true fsdp_use_orig_params: true machine_rank: 0 main_process_ip: 30.77.80.237 main_process_port: 23456 main_training_function: main mixed_precision: bf16 num_machines: 2 num_processes: 16 rdzv_backend: static same_network: false tpu_env: [] tpu_use_cluster: false tpu_use_sudo: false use_cpu: false

但我把HYBRID_SHARD改为FULL_SHARD可成功运行,只是速度很慢

HelloWorld506 avatar Jan 13 '25 09:01 HelloWorld506

@hiyouga 我尝试使用了HYBRID_SHARD+4bitQLoRA训练72B模型,成功了,但是不进行量化的话会有进程自动退出,猜测是OOM,但是并没有OOM的报错,不过之前尝试单节点使用zero3+offload是能够成功lora微调72B模型的,并不会OOM

HelloWorld506 avatar Jan 14 '25 04:01 HelloWorld506

@hiyouga 您好,我发现使用FSDP时设置fsdp_offload_params为true并没有作用,所有参数仍然在GPU,并没有被卸载到CPU,因此才导致OOM,请问可以指点一下llamafactory中fsdp的代码位置吗

HelloWorld506 avatar Jan 16 '25 06:01 HelloWorld506

@hiyouga 我尝试过使用zero++,设置了zero_hpz_partition_size为8,确实加速了训练,但是训练过程中loss一直固定为11,grad_norm一直为0,训练失败,请问是llamafactory还没适配zero++吗,我该怎样才能正确使用zero++?

我在进行dpo训练的时候也遇到了这个问题。

stainless-steel-rat avatar Jan 16 '25 15:01 stainless-steel-rat

@hiyouga 我尝试过使用zero++,设置了zero_hpz_partition_size为8,确实加速了训练,但是训练过程中loss一直固定为11,grad_norm一直为0,训练失败,请问是llamafactory还没适配zero++吗,我该怎样才能正确使用zero++?

@HelloWorld506 Hi, 请问你解决了这个问题吗?或者你能共享下你的zero++配置给我参考一下吗?我也碰到了deepspeed多节点使用zero3速度很慢的问题,尝试用zero++解决

xiazhi1 avatar Jan 22 '25 11:01 xiazhi1

@hiyouga 我尝试过使用zero++,设置了zero_hpz_partition_size为8,确实加速了训练,但是训练过程中loss一直固定为11,grad_norm一直为0,训练失败,请问是llamafactory还没适配zero++吗,我该怎样才能正确使用zero++?

@HelloWorld506 Hi, 请问你解决了这个问题吗?或者你能共享下你的zero++配置给我参考一下吗?我也碰到了deepspeed多节点使用zero3速度很慢的问题,尝试用zero++解决

@xiazhi1 我还没有解决,我使用的zero++配置只是在原zero3基础上增加了zero_hpz_partition_size:8,不过我们可以加个微信一起交流这个问题

HelloWorld506 avatar Jan 22 '25 12:01 HelloWorld506