InternLM / xtuner

An efficient, flexible and full-featured toolkit for fine-tuning LLM (InternLM2, Llama3, Phi3, Qwen, Mistral, ...)
https://xtuner.readthedocs.io/zh-cn/latest/
Apache License 2.0
3.91k stars 305 forks source link

关于qwen1.5+deepspeed_zero3+序列并行保存模型文件的问题 #746

Closed macheng6 closed 4 months ago

macheng6 commented 4 months ago

设置每50个step保存一次模型,但是貌似只保存了优化器的状态,每个xx_optim_states.pt文件是16G,yy_model_states.pt文件只有404k,请问是什么原因?以及tokenizer.json、config.json等文件怎么设置保存?

bf16_zero_pp_rank_0_mp_rank_00_optim_states.pt bf16_zero_pp_rank_10_mp_rank_00_optim_states.pt bf16_zero_pp_rank_11_mp_rank_00_optim_states.pt bf16_zero_pp_rank_12_mp_rank_00_optim_states.pt bf16_zero_pp_rank_13_mp_rank_00_optim_states.pt bf16_zero_pp_rank_14_mp_rank_00_optim_states.pt bf16_zero_pp_rank_15_mp_rank_00_optim_states.pt bf16_zero_pp_rank_16_mp_rank_00_optim_states.pt bf16_zero_pp_rank_17_mp_rank_00_optim_states.pt bf16_zero_pp_rank_18_mp_rank_00_optim_states.pt bf16_zero_pp_rank_19_mp_rank_00_optim_states.pt bf16_zero_pp_rank_1_mp_rank_00_optim_states.pt bf16_zero_pp_rank_20_mp_rank_00_optim_states.pt bf16_zero_pp_rank_21_mp_rank_00_optim_states.pt bf16_zero_pp_rank_22_mp_rank_00_optim_states.pt bf16_zero_pp_rank_23_mp_rank_00_optim_states.pt bf16_zero_pp_rank_24_mp_rank_00_optim_states.pt bf16_zero_pp_rank_25_mp_rank_00_optim_states.pt bf16_zero_pp_rank_26_mp_rank_00_optim_states.pt bf16_zero_pp_rank_27_mp_rank_00_optim_states.pt bf16_zero_pp_rank_28_mp_rank_00_optim_states.pt bf16_zero_pp_rank_29_mp_rank_00_optim_states.pt bf16_zero_pp_rank_2_mp_rank_00_optim_states.pt bf16_zero_pp_rank_30_mp_rank_00_optim_states.pt bf16_zero_pp_rank_31_mp_rank_00_optim_states.pt bf16_zero_pp_rank_3_mp_rank_00_optim_states.pt bf16_zero_pp_rank_4_mp_rank_00_optim_states.pt bf16_zero_pp_rank_5_mp_rank_00_optim_states.pt bf16_zero_pp_rank_6_mp_rank_00_optim_states.pt bf16_zero_pp_rank_7_mp_rank_00_optim_states.pt bf16_zero_pp_rank_8_mp_rank_00_optim_states.pt bf16_zero_pp_rank_9_mp_rank_00_optim_states.pt zero_pp_rank_0_mp_rank_00_model_states.pt zero_pp_rank_10_mp_rank_00_model_states.pt zero_pp_rank_11_mp_rank_00_model_states.pt zero_pp_rank_12_mp_rank_00_model_states.pt zero_pp_rank_13_mp_rank_00_model_states.pt zero_pp_rank_14_mp_rank_00_model_states.pt zero_pp_rank_15_mp_rank_00_model_states.pt zero_pp_rank_16_mp_rank_00_model_states.pt zero_pp_rank_17_mp_rank_00_model_states.pt zero_pp_rank_18_mp_rank_00_model_states.pt zero_pp_rank_19_mp_rank_00_model_states.pt zero_pp_rank_1_mp_rank_00_model_states.pt zero_pp_rank_20_mp_rank_00_model_states.pt zero_pp_rank_21_mp_rank_00_model_states.pt zero_pp_rank_22_mp_rank_00_model_states.pt zero_pp_rank_23_mp_rank_00_model_states.pt zero_pp_rank_24_mp_rank_00_model_states.pt zero_pp_rank_25_mp_rank_00_model_states.pt zero_pp_rank_26_mp_rank_00_model_states.pt zero_pp_rank_27_mp_rank_00_model_states.pt zero_pp_rank_28_mp_rank_00_model_states.pt zero_pp_rank_29_mp_rank_00_model_states.pt zero_pp_rank_2_mp_rank_00_model_states.pt zero_pp_rank_30_mp_rank_00_model_states.pt zero_pp_rank_31_mp_rank_00_model_states.pt zero_pp_rank_3_mp_rank_00_model_states.pt zero_pp_rank_4_mp_rank_00_model_states.pt zero_pp_rank_5_mp_rank_00_model_states.pt zero_pp_rank_6_mp_rank_00_model_states.pt zero_pp_rank_7_mp_rank_00_model_states.pt zero_pp_rank_8_mp_rank_00_model_states.pt zero_pp_rank_9_mp_rank_00_model_states.pt

hhaAndroid commented 4 months ago

zero3 因为模型进行切片了,_model_states.pt 就是空的,因为 model 状态字典可以从xx_optim_states恢复出来。实际上 deepspeed 就是这么做的

HIT-cwh commented 4 months ago

@macheng6 如果想直接保存 hf 格式的权重,可以尝试使用 HFCheckpointHook 。

用法:

在 config 文件中增加

+ from xtuner.engine.hooks import HFCheckpointHook

custom_hooks = [
+    dict(type=HFCheckpointHook),
]

训练结束后,hf 格式的模型会自动保存在 work_dir/timestamp/hf_model

XTuner 中对应功能的 pr:https://github.com/InternLM/xtuner/pull/621