hiyouga / LLaMA-Factory

Unified Efficient Fine-Tuning of 100+ LLMs (ACL 2024)
https://arxiv.org/abs/2403.13372
Apache License 2.0
34.15k stars 4.2k forks source link

deepspeed ZeRO stage3 全量微调baichuan13b模型 保存的模型(pytorch_model.bin)只有905kb #253

Closed loxs123 closed 1 year ago

loxs123 commented 1 year ago

运行命令 accelerate launch --config_file /home/nvidia/.cache/huggingface/accelerate/deepspeed.yaml src/train_bash.py \ --stage sft \ --model_name_or_path baichuan-inc/Baichuan-13B-Chat \ --do_train \ --dataset huatuo_test \ --finetuning_type full \ --output_dir /home/nvidia/llm-agriculture/checkpoints/baichuan13b_huatuo_test_full \ --overwrite_cache \ --per_device_train_batch_size 16 \ --gradient_accumulation_steps 8 \ --lr_scheduler_type cosine \ --logging_steps 10 \ --save_steps 1000 \ --learning_rate 5e-5 \ --num_train_epochs 1.0 \ --plot_loss \ --fp16 \ --prompt_template baichuan

deepspeed.yaml如下 compute_environment: LOCAL_MACHINE deepspeed_config: gradient_accumulation_steps: 8 gradient_clipping: 1.0 offload_optimizer_device: cpu offload_param_device: cpu zero3_init_flag: true zero3_save_16bit_model: true stage3_gather_16bit_weights_on_model_save: true zero_stage: 3 distributed_type: DEEPSPEED downcast_bf16: 'no' fsdp_config: {} machine_rank: 0 main_process_ip: null main_process_port: null main_training_function: main mixed_precision: fp16 num_machines: 1 num_processes: 4 use_cpu: false

程序是可以正常跑完的,没有任何报错,并且损失也是正常下降的。

之后我尝试在src/llmtuner/tuner/core/trainer.py,第52行位置打印 image 发现模型的state_dict除了layernorm层其他所有层的tensor都是空的,后来又尝试了baichuan-7b模型,也是一样的情况,请问这个问题该如何解决? image

hiyouga commented 1 year ago

zero 3 需要手动恢复模型权重,使用 zero fp32 脚本

loxs123 commented 1 year ago

可能和transformers版本有关系,我的是4.31.1,我下降到4.30.1就好了

ZZR0 commented 1 year ago

同样的问题,但我需要微调llama2模型所有不能把transformers降级到4.30.1,然后也不能用zero_to_fp32.py脚本,因为这个脚本似乎只能对checkpoint文件夹使用,不能用于最终的保存文件,请问有什么其他解决方案吗?

loxs123 commented 1 year ago

不能用于最终的保存文件可以解释一下吗? 之前我的那个错误,在deepspeed.yaml去掉下面两句也可以解决[这样的话需要使用 zero fp32 脚本],但是我不知道为什么最后生成的模型(pytorch_model.bin)会变成原来的两倍

zero3_save_16bit_model: true
stage3_gather_16bit_weights_on_model_save: true