在开源大模型领域,Qwen 系列凭借强大的中文能力和友好的协议受到广泛欢迎。然而,直接使用基座模型往往无法满足特定业务场景的需求,需要通过微调来注入领域知识。微调后的模型如何高效部署?GGUF 格式是目前 llama.cpp 等推理后端广泛支持的格式,具有跨平台、内存映射等优点。本文将完整记录使用 LLaMA-Factory 微调 Qwen2.5-7B-Instruct 模型,并通过 llama.cpp 将微调后的模型转换为 GGUF 格式的全过程,并分享在转换过程中遇到的经典错误及其解决方案。
1.环境准备 我们在一台 Linux 服务器上操作,安装了 Conda 用于环境隔离。需要准备以下组件: Python 3.10 LLaMA-Factory(用于微调) llama.cpp(用于格式转换) transformers、peft、accelerate 等依赖库
1.1 创建 Conda 环境
conda create -n llama_factory python=3.10 -y
conda activate llama_factory
1.2 安装 LLaMA-Factory LLaMA-Factory 是一个高效的微调框架,支持多种模型和算法。我们通过源码安装:
git clone https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
pip install -e ".[torch,metrics]"
安装过程中如果遇到依赖冲突,可适当调整 transformers 版本,但建议保持最新。
1.3 安装 llama.cpp
git clone https://github.com/ggerganov/llama.cpp.git
cd llama.cpp
pip install -r requirements.txt
注意:转换脚本 convert_hf_to_gguf.py 依赖 transformers,需要保证其版本兼容。
2.使用 LLaMA-Factory 微调 Qwen2.5-7B-Instruct 以 Qwen2.5-7B-Instruct 为基座,使用自定义数据集进行指令微调。假设数据已准备为 JSON 格式,每条包含 instruction 和 output 字段。
2.1 准备数据 将数据集放在 LLaMA-Factory/data 目录下,并创建数据集配置文件 dataset_info.json,示例如下:
{
"my_dataset": {
"file_name": "my_dataset.json",
"columns": {
"prompt": "instruction",
"response": "output"
}
}
}
2.2 配置微调参数 LLaMA-Factory 支持通过命令行或 YAML 文件配置。这里我们使用命令行进行 LoRA 微调:
CUDA_VISIBLE_DEVICES=0 python src/train_bash.py \
--stage sft \
--model_name_or_path Qwen/Qwen2.5-7B-Instruct \
--dataset my_dataset \
--dataset_dir ./data \
--finetuning_type lora \
--lora_target q_proj,v_proj \
--output_dir ./output/qwen2.5-lora \
--overwrite_cache \
--per_device_train_batch_size 4 \
--gradient_accumulation_steps 4 \
--lr_scheduler_type cosine \
--logging_steps 10 \
--save_steps 500 \
--learning_rate 1e-4 \
--num_train_epochs 3 \
--fp16

