多节点使用zero3速度很慢
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
try deepspeed zero++ or HSDP
@hiyouga 我尝试过使用zero++,设置了zero_hpz_partition_size为8,确实加速了训练,但是训练过程中loss一直固定为11,grad_norm一直为0,训练失败,请问是llamafactory还没适配zero++吗,我该怎样才能正确使用zero++?
那试试 HSDP?
那试试 HSDP?
@hiyouga 请问HSDP在llamafactory中应该如何使用呢
https://huggingface.co/docs/accelerate/en/usage_guides/fsdp HYBRID_SHARD
https://huggingface.co/docs/accelerate/en/usage_guides/fsdp
HYBRID_SHARD
@hiyouga 您好,我尝试了HYBRID_SHARD,然而在训练刚开始即报错torch.distributed.elastic.multiprocessing.errors.ChildFailedError,然后自动退出
我的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可成功运行,只是速度很慢
@hiyouga 我尝试使用了HYBRID_SHARD+4bitQLoRA训练72B模型,成功了,但是不进行量化的话会有进程自动退出,猜测是OOM,但是并没有OOM的报错,不过之前尝试单节点使用zero3+offload是能够成功lora微调72B模型的,并不会OOM
@hiyouga 您好,我发现使用FSDP时设置fsdp_offload_params为true并没有作用,所有参数仍然在GPU,并没有被卸载到CPU,因此才导致OOM,请问可以指点一下llamafactory中fsdp的代码位置吗
@hiyouga 我尝试过使用zero++,设置了zero_hpz_partition_size为8,确实加速了训练,但是训练过程中loss一直固定为11,grad_norm一直为0,训练失败,请问是llamafactory还没适配zero++吗,我该怎样才能正确使用zero++?
我在进行dpo训练的时候也遇到了这个问题。
@hiyouga 我尝试过使用zero++,设置了zero_hpz_partition_size为8,确实加速了训练,但是训练过程中loss一直固定为11,grad_norm一直为0,训练失败,请问是llamafactory还没适配zero++吗,我该怎样才能正确使用zero++?
@HelloWorld506 Hi, 请问你解决了这个问题吗?或者你能共享下你的zero++配置给我参考一下吗?我也碰到了deepspeed多节点使用zero3速度很慢的问题,尝试用zero++解决
@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,不过我们可以加个微信一起交流这个问题