本文使用LLaMA-Factory进行监督微调 Qwen2.5。
此监督微调(SFT)脚本具有以下特点:
- 支持单GPU和多GPU训练;
- 支持全参数调优,LoRA,Q-LoRA,Dora。
下面详细介绍一下该脚本的使用方法。
目录
安装
开始之前,请确保已安装以下软件包:
扫描二维码关注公众号,回复:
17597928 查看本文章

按照LLaMA-Factory的说明 ,构建环境。安装这些软件包(可选):
pip install deepspeed
pip 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 的最简单方法。
至此,本文的内容就结束了。