环境安装
git clone https://gitcode.com/gh_mirrors/ll/LLaMA-Factory.git
下载模型
pip install modelscope
modelscope download --model Qwen/Qwen2.5-7B-Instruct --local_dir /root/autodl-tmp/models/Qwen/Qwen2.5-7B-Instruct
微调
llamafactory-cli train \
--stage sft \
--do_train True \
--model_name_or_path /root/autodl-tmp/models/Qwen/Qwen2.5-7B-Instruct \
--preprocessing_num_workers 16 \
--finetuning_type lora \
--template qwen \
--flash_attn auto \
--dataset_dir data \
--dataset self_SFT,alpaca_zh_demo \
--cutoff_len 1024 \
--learning_rate 0.0001 \
--num_train_epochs 5.0 \
--max_samples 1000 \
--per_device_train_batch_size 4 \
--gradient_accumulation_steps 8 \
--lr_scheduler_type cosine \
--max_grad_norm 1.0 \
--logging_steps 5 \
--save_steps 100 \
--warmup_steps 0 \
--packing False \
--report_to none \
--output_dir saves/Qwen2.5-7B-Instruct/lora/train_2024-12-20-09-43-52 \
--bf16 True \
--plot_loss True \
--ddp_timeout 180000000 \
--include_num_input_tokens_seen True \
--optim adamw_torch \
--lora_rank 8 \
--lora_alpha 16 \
--lora_dropout 0 \
--lora_target all \
--deepspeed cache/ds_z3_config.json
笔者测试3080*2,1108条数据需要1个小时,bitch_size只能设为2,而且只能Zero3
但是也可以微调Qwen2.5-7B-Instruct了
Zero将模型参数分成三个部分:
状态 | 作用 |
---|---|
Optimizer States | 优化器在进行梯度更新的时候需要用到的数据 |
Gradient | 在反向转播过程中产生的数据,其决定参数的更新方向 |
Model Parameter | 模型参数,在模型训练过程中通过数据"学习"的信息 |
Zero的级别如下:
总结
DeepSpeed方便了我们在机器有限的情况下来训练、微调大模型,同时它也有很多优秀的性能来使用,后期可以继续挖掘。
目前主流的达模型训练方式:GPU + PyTorch + Megatron-LM + DeepSpeed
优势
存储效率:DeepSpeed提供了一种Zero的新型解决方案来减少训练显存的占用,它与传统的数据并行不同,它将模型状态和梯度进行分区来节省大量的显存;
可扩展性:DeepSpeed支持高效的数据并行、模型并行、pipeline并行以及它们的组合,这里也称3D并行;
易用性: 在训练阶段,只需要修改几行代码就可以使pytorch模型使用DeepSpeed和Zero。