【微调大模型】使用LLaMA-Factory进行监督微调 Qwen2.5 _llamafactory微调qwen2.5
本文使用LLaMA-Factory进行监督微调 Qwen2.5。
此监督微调(SFT)脚本具有以下特点:
- 支持单GPU和多GPU训练;
- 支持全参数调优,LoRA,Q-LoRA,Dora。
下面详细介绍一下该脚本的使用方法。
目录
安装
数据准备
训练
合并 LoRA
结论
安装
开始之前,请确保已安装以下软件包:
按照LLaMA-Factory的说明 ,构建环境。安装这些软件包(可选):
pip install deepspeedpip install flash-attn --no-build-isolation
如果想使用 FlashAttention-2,请确保 CUDA 是 11.6 及以上版本。
数据准备
LLaMA-Factory 在文件夹中提供了几个训练数据集data,可以直接使用。如果使用自定义数据集,请按如下方式准备数据集。
1将数据组织到json文件中,并将数据放入data 文件夹中。LLaMA-Factory 支持alpaca或sharegpt 格式的数据集。
alpaca格式的数据集应遵循以下格式:
[ { \"instruction\": \"user instruction (required)\", \"input\": \"user input (optional)\", \"output\": \"model response (required)\", \"system\": \"system prompt (optional)\", \"history\": [ [\"user instruction in the first round (optional)\", \"model response in the first round (optional)\"], [\"user instruction in the second round (optional)\", \"model response in the second round (optional)\"] ] }]
sharegpt格式的数据集应遵循以下格式:
[ { \"conversations\": [ { \"from\": \"human\", \"value\": \"user instruction\" }, { \"from\": \"gpt\", \"value\": \"model response\" } ], \"system\": \"system prompt (optional)\", \"tools\": \"tool description (optional)\" }]
2 data/dataset_info.json按以下格式提供数据集定义。
对于alpaca格式数据集,dataset_info.json 应该是:
\"dataset_name\": { \"file_name\": \"dataset_name.json\", \"columns\": { \"prompt\": \"instruction\", \"query\": \"input\", \"response\": \"output\", \"system\": \"system\", \"history\": \"history\" }}
对于sharegpt格式数据集,dataset_info.json 应该是:
\"dataset_name\": { \"file_name\": \"dataset_name.json\", \"formatting\": \"sharegpt\", \"columns\": { \"messages\": \"conversations\", \"system\": \"system\", \"tools\": \"tools\" }, \"tags\": { \"role_tag\": \"from\", \"content_tag\": \"value\", \"user_tag\": \"user\", \"assistant_tag\": \"assistant\" } }
训练
执行以下训练命令:
DISTRIBUTED_ARGS=\" --nproc_per_node $NPROC_PER_NODE \\ --nnodes $NNODES \\ --node_rank $NODE_RANK \\ --master_addr $MASTER_ADDR \\ --master_port $MASTER_PORT \"torchrun $DISTRIBUTED_ARGS src/train.py \\ --deepspeed $DS_CONFIG_PATH \\ --stage sft \\ --do_train \\ --use_fast_tokenizer \\ --flash_attn \\ --model_name_or_path $MODEL_PATH \\ --dataset your_dataset \\ --template qwen \\ --finetuning_type lora \\ --lora_target q_proj,v_proj\\ --output_dir $OUTPUT_PATH \\ --overwrite_cache \\ --overwrite_output_dir \\ --warmup_steps 100 \\ --weight_decay 0.1 \\ --per_device_train_batch_size 4 \\ --gradient_accumulation_steps 4 \\ --ddp_timeout 9000 \\ --learning_rate 5e-6 \\ --lr_scheduler_type cosine \\ --logging_steps 1 \\ --cutoff_len 4096 \\ --save_steps 1000 \\ --plot_loss \\ --num_train_epochs 3 \\ --bf16
要更改训练,可以修改训练命令中的参数来调整超参数。需要注意的一个参数是cutoff_len,这是训练数据的最大长度。控制此参数以避免 OOM 错误。
合并 LoRA
如果使用 LoRA 训练模型,则可能需要将适配器参数合并到主分支。运行以下命令执行 LoRA 适配器的合并。
CUDA_VISIBLE_DEVICES=0 llamafactory-cli export \\ --model_name_or_path path_to_base_model \\ --adapter_name_or_path path_to_adapter \\ --template qwen \\ --finetuning_type lora \\ --export_dir path_to_export \\ --export_size 2 \\ --export_legacy_format False
结论
以上内容是使用 LLaMA-Factory 训练 Qwen 的最简单方法。
Quickstart - Qwen
至此,本文的内容就结束了。