sft_scripts_zh (original) (raw)
指令精调脚本
训练步骤
进入项目的scripts/training目录,运行bash run_sft.sh进行指令精调,默认使用单卡。运行前用户应先修改脚本并指定相关参数,脚本中的相关参数值仅供调试参考。run_sft.sh的内容如下:
########参数部分######## lr=1e-4 lora_rank=64 lora_alpha=128 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-3-chinese/dir/or/model_id dataset_dir=path/to/sft/data/dir per_device_train_batch_size=1 per_device_eval_batch_size=1 gradient_accumulation_steps=8 max_seq_length=1024 output_dir=output_dir validation_file=validation_file_name
torchrun --nnodes 1 --nproc_per_node 1 run_clm_sft_with_peft.py
--model_name_or_path ${pretrained_model}
--tokenizer_name_or_path ${pretrained_model}
--dataset_dir ${dataset_dir}
--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
--bf16
--num_train_epochs 3
--lr_scheduler_type cosine
--learning_rate ${lr}
--warmup_ratio 0.05
--weight_decay 0.1
--logging_strategy steps
--logging_steps 10
--save_strategy steps
--save_total_limit 3
--evaluation_strategy steps
--eval_steps 100
--save_steps 200
--gradient_accumulation_steps ${gradient_accumulation_steps}
--preprocessing_num_workers 8
--max_seq_length ${max_seq_length}
--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}
--lora_dropout ${lora_dropout}
--modules_to_save ${modules_to_save}
--torch_dtype bfloat16
--validation_file ${validation_file}
--load_in_kbits 16 \
其中一些参数的含义不言自明。部分参数的解释如下:
--dataset_dir: 指令精调数据的目录,包含一个或多个以json结尾的Stanford Alpaca格式的指令精调数据文件--validation_file: 用作验证集的单个指令精调文件,以json结尾,同样遵循Stanford Alpaca格式--use_flash_attention_2: 启用FlashAttention-2加速训练--load_in_kbits: 可选择参数为16/8/4,即使用fp16或8bit/4bit量化进行模型训练,默认fp16训练。--modules_to_save:需要额外训练的模块,注意这部分是全量精调;资源受限的情况下请设置为None(效果也会受到一些影响)
这里列出的其他训练相关超参数(尤其是学习率,以及和total batch size大小相关的参数)仅供参考。请在实际使用时根据数据情况以及硬件条件进行配置。
Stanford Alpaca格式如下:
[
{"instruction" : ...,
"input" : ...,
"output" : ...},
...
]
使用多机多卡
请参考以下启动方式:
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
...