指令精调脚本 (original) (raw)

⚠️重要提示⚠️

训练步骤

进入项目的scripts/training目录,运行bash run_sft.sh进行指令精调,默认使用单卡。运行前用户应先修改脚本并指定相关参数,脚本中的相关参数值仅供调试参考。run_sft.sh的内容如下:

########参数部分######## lr=1e-4 lora_rank=8 lora_alpha=32 lora_trainable="q_proj,v_proj,k_proj,o_proj,gate_proj,down_proj,up_proj" modules_to_save="embed_tokens,lm_head" lora_dropout=0.05

pretrained_model=path/to/hf/llama/or/merged/llama/dir/or/model_id chinese_tokenizer_path=path/to/chinese/alpaca/tokenizer/dir dataset_dir=path/to/sft/data/dir per_device_train_batch_size=1 per_device_eval_batch_size=1 training_steps=100 gradient_accumulation_steps=1 output_dir=output_dir peft_model=path/to/peft/model/dir validation_file=validation_file_name

deepspeed_config_file=ds_zero2_no_offload.json

########启动命令######## torchrun --nnodes 1 --nproc_per_node 1 run_clm_sft_with_peft.py
--deepspeed ${deepspeed_config_file}
--model_name_or_path ${pretrained_model}
--tokenizer_name_or_path ${chinese_tokenizer_path}
--dataset_dir ${dataset_dir}
--validation_split_percentage 0.001
--per_device_train_batch_size ${per_device_train_batch_size}
--per_device_eval_batch_size ${per_device_eval_batch_size}
--do_train
--do_eval
--seed $RANDOM
--fp16
--max_steps ${training_steps}
--lr_scheduler_type cosine
--learning_rate ${lr}
--warmup_ratio 0.03
--weight_decay 0
--logging_strategy steps
--logging_steps 10
--save_strategy steps
--save_total_limit 3
--evaluation_strategy steps
--eval_steps 250
--save_steps 500
--gradient_accumulation_steps ${gradient_accumulation_steps}
--preprocessing_num_workers 8
--max_seq_length 512
--output_dir ${output_dir}
--overwrite_output_dir
--ddp_timeout 30000
--logging_first_step True
--lora_rank ${lora_rank}
--lora_alpha ${lora_alpha}
--trainable ${lora_trainable}
--modules_to_save ${modules_to_save}
--lora_dropout ${lora_dropout}
--torch_dtype float16
--validation_file ${validation_file}
--peft_path ${peft_model}
--gradient_checkpointing
--ddp_find_unused_parameters False

其中一些参数的含义不言自明。部分参数的解释如下:

所谓Stanford Alpaca格式即:

[
  {"instruction" : ...,
   "input" : ...,
   "output" : ...},
  ...
]

配置说明:

这里列出的其他训练相关超参数(尤其是学习率,以及和total batch size大小相关的参数)仅供参考。请在实际使用时根据数据情况以及硬件条件进行配置。

节省显存小提示

使用多机多卡

请参考以下启动方式:

torchrun
--nnodes ${num_nodes}
--nproc_per_node ${num_gpu_per_node} --node_rank ${node_rank}
--master_addr ${master_addr}
--master_port ${master_port}
run_clm_sft_with_peft.py
...

训练后文件整理

训练后的LoRA权重和配置存放${output_dir}/sft_lora_model,可用于后续的合并流程。

(以下文件整理步骤已被整合到训练脚本,无需执行,此处仅供留存参考,并将在之后的更新中删除)

  1. 创建一个文件夹${lora_model},用于存放LoRA模型
  2. ${output_dir}中训练好的pytorch_model.bin移动到${lora_model},并命名为adapter_model.bin
    mv outputdir/pytorchmodel.bin{output_dir}/pytorch_model.bin outputdir/pytorchmodel.bin{lora_model}/adapter_model.bin
  3. 将Chinese-Alpaca-LoRA(7B、13B、是否是Plus均可)中的tokenizer相关文件复制到${lora_model}
    cp chinese-alpaca-plus-lora-7b/token ${lora_model}/
  4. 将Chinese-Alpaca-LoRA中的adapter_config.json复制到${lora_model}

cp chinese-alpaca-plus-lora-7b/adapter_config.json ${lora_model}/

  1. 最后,编辑${lora_model}/adapter_config.json文件,修改其中的参数,确认其中的lora_alpha, r, modules_to_save, target_modules等参数与实际训练用的参数一致

完成!现在${lora_model}可以用于后续的合并流程了。