当前位置:   article > 正文

Llama2 指令精调脚本_run_clm_sft_with_peft.py: error: argument --seed:

run_clm_sft_with_peft.py: error: argument --seed: expected one argument

指令精调脚本

⚠️重要提示⚠️

  • 该代码仅适用于特定PEFT版本,运行脚本前请从源码安装commit id为13e53fc的Peft

  • 如果使用其他版本的PEFT或修改部分训练参数设置(如不使用deepspeed),不能保证模型可以正常训练。

  • 运行前确保拉取仓库最新版代码:git pull

训练步骤

进入项目的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-2/or/merged/llama-2/dir/or/model_id
chinese_tokenizer_path=path/to/chinese/llama-2/tokenizer/dir
dataset_dir=path/to/sft/data/dir
per_device_train_batch_size=1
per_device_eval_batch_size=1
gradient_accumulation_steps=1
output_dir=output_dir
peft_model=path/to/peft/model/dir
validation_file=validation_file_name
max_seq_length=1024

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 \
    --num_train_epochs 2 \
    --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 ${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} \
    --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

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

  • --tokenizer_name_or_path: Chinese-LLaMA-2 tokenizer所在的目录。⚠️ 本项目中LLaMA-2模型与Alpaca-2模型使用相同的tokenizer,不再进行区分。
  • --dataset_dir: 指令精调数据的目录,包含一个或多个以json结尾的Stanford Alpaca格式的指令精调数据文件
  • --validation_file: 用作验证集的单个指令精调文件,以json结尾,同样遵循Stanford Alpaca格式
  • --flash_attn: 启用FlashAttention-2加速训练

Stanford Alpaca格式如下:

  1. [
  2. {"instruction" : ...,
  3. "input" : ...,
  4. "output" : ...},
  5. ...
  6. ]

该脚本支持以下训练模式。不支持未在表格中的模式,如要修改请自行debug。

模型model_name_or_pathpeft_pathlora params
基于Chinese-LLaMA-2 LoRA进行指令精调原版HF格式的LLaMA-2Chinese-LLaMA-2 LoRA无需指定
基于Chinese-Alpaca-2 LoRA进行指令精调原版HF格式的LLaMA-2Chinese-Alpaca-2 LoRA无需指定
基于Chinese-LLaMA-2训练全新的指令精调LoRA权重完整(合并Chinese-LLaMA-2-LoRA后)的HF格式Chinese-LLaMA-2模型勿提供此参数,并且从脚本中删除 --peft_path需设置--lora_rank--lora_alpha--lora_dropout--trainable--modules_to_save参数
基于Chinese-Alpaca-2训练全新的指令精调LoRA权重完整(合并Chinese-Alapca-2-LoRA后)的HF格式Chinese-Alpaca-2模型勿提供此参数,并且从脚本中删除 --peft_path需设置--lora_rank--lora_alpha--lora_dropout--trainable--modules_to_save参数

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

节省显存小提示

  • 如果机器的显存比较紧张,可以删去脚本中的--modules_to_save ${modules_to_save} \, 即不训练embed_tokens和lm_head(这两部分参数量较大),只训练LoRA参数。
    • 如果是在已有LoRA基础上继续微调,需要修改peft_path下的adapter_config.json文件,改为"modules_to_save": null
    • 如果执行修改后程序报错,请删除--gradient_checkpointing \再尝试
  • 减小max_seq_length也可降低训练时显存占用,如可将block_size设置为512。

使用多机多卡

请参考以下启动方式:

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,可用于后续的合并流程。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/298408
推荐阅读
相关标签
  

闽ICP备14008679号