本文使用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
至此,本文的内容就结束了。