跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

使用 LLaMA-Factory 微调 Qwen2.5 模型并转换为 GGUF 格式部署

综述由AI生成使用 LLaMA-Factory 对 Qwen2.5-7B-Instruct 进行 LoRA 微调,并通过 llama.cpp 转换为 GGUF 格式的完整流程。内容包括环境搭建、数据集配置、训练参数设置及权重合并。重点解决了转换过程中因 transformers 版本不兼容导致的 tokenizer.json 解析错误,通过升级 transformers 至 4.45.0 成功导出模型。最终生成的 GGUF 模型可在 llama.cpp、Ollama 等后端高效部署。

观心发布于 2026/4/6更新于 2026/5/2133 浏览

在开源大模型领域,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

训练完成后,微调的 LoRA 权重保存在 ./output/qwen2.5-lora 目录中。

2.3 合并 LoRA 权重(如果需要导出完整模型)

如果希望得到一个完整的 HuggingFace 格式模型(而非仅 LoRA 适配器),可以使用 export_model.py 脚本合并:

python src/export_model.py \
  --model_name_or_path Qwen/Qwen2.5-7B-Instruct \
  --adapter_name_or_path ./output/qwen2.5-lora \
  --template default \
  --finetuning_type lora \
  --export_dir ./output/qwen2.5-merged

合并后的完整模型将保存在 ./output/qwen2.5-merged 中,包含所有必要的配置文件、分词器和权重文件。

3. 将微调后的模型转换为 GGUF 格式

3.1 准备转换环境

为了转换,我们需要一个独立的 conda 环境,以免与 LLaMA-Factory 的依赖冲突。创建一个新环境并安装必要工具:

conda create -n llama.cpp python=3.10 -y
conda activate llama.cpp
pip install torch transformers sentencepiece protobuf

3.2 使用 llama.cpp 的转换脚本

进入 llama.cpp 目录,执行转换命令(假设合并后的模型位于 /mnt/workspace/output/qwen2.5-merged):

cd /path/to/llama.cpp
python convert_hf_to_gguf.py /mnt/workspace/output/qwen2.5-merged \
  --outtype f16 \
  --verbose \
  --outfile /mnt/workspace/qwen2.5-7B-instruct.gguf

3.3 遇到的经典错误及解决

在执行上述命令时,遇到了以下错误:

python llama.cpp/convert_hf_to_gguf.py /mnt/workspace/.cache/modelscope/models/Qwen/Qwen2.5-7B-Instruct-lora --outtype f16 --verbose --outfile /mnt/workspace/Meta-Llama-3-8B-Instruct-gguf.gguf
INFO:hf-to-gguf:Loading model: Qwen2.5-7B-Instruct-lora
INFO:hf-to-gguf:Model architecture: Qwen2ForCausalLM
INFO:hf-to-gguf:gguf: loading model weight map from 'model.safetensors.index.json'
INFO:hf-to-gguf:gguf: indexing model part 'model-00001-of-00004.safetensors'
...
FileNotFoundError: File not found: /mnt/workspace/.cache/modelscope/models/Qwen/Qwen2.5-7B-Instruct-lora/tokenizer.model
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "/mnt/workspace/llama.cpp/convert_hf_to_gguf.py", line 3534, in set_vocab
    self._set_vocab_sentencepiece()
  ...
Exception: data did not match any variant of untagged enum ModelWrapper at line 757443 column 3 (llama.cpp)
root@dsw-1662938-774cbc5758-kd9bv:/mnt/workspace#

错误原因分析 该错误发生在转换脚本加载 tokenizer.json 文件时,提示 JSON 结构不符合预期。通常由两个原因引起:

  1. tokenizer.json 文件损坏:可能是下载不完整或微调过程中被意外修改。
  2. transformers 版本不兼容:某些较新的 tokenizer.json 格式需要特定版本的 transformers 才能正确解析。

解决方案 经过排查,发现是 transformers 版本问题。当前环境中的 transformers 为旧版(如 4.36.0),而 Qwen2.5 的 tokenizer 需要更新版本支持。我们通过强制安装 transformers==4.45.0 解决了问题:

pip install --force-reinstall transformers==4.45.0

重新运行转换命令,成功导出 GGUF 文件!

注意:如果模型目录中的 tokenizer.json 确实损坏,可以从 HuggingFace 官方仓库重新下载覆盖。

3.4 验证转换结果

转换完成后,检查输出文件:

ls -lh /mnt/workspace/qwen2.5-7B-instruct.gguf

可以使用 llama.cpp 提供的简单测试工具验证模型加载:

./main -m /mnt/workspace/qwen2.5-7B-instruct.gguf -p "你好,请介绍一下你自己。" -n 100

如果正常输出,说明转换成功。

4. 总结

通过本文的实践,完成了以下工作:

  • 使用 LLaMA-Factory 对 Qwen2.5-7B-Instruct 进行了 LoRA 微调,并合并为完整模型。
  • 利用 llama.cpp 的转换工具将微调后的模型转换为 GGUF 格式,以便高效部署。
  • 解决了转换过程中遇到的 tokenizer.json 解析错误,关键在于确保 transformers 版本与模型兼容。

关键点总结:

  • 版本兼容性:转换脚本对 transformers 版本敏感,建议使用较新稳定版(如 4.45.0)。
  • 文件完整性:微调后务必检查 tokenizer.json 是否完好,必要时从官方源补充。
  • 路径命名:转换命令中的输出文件名建议与模型对应,避免混淆(如本文示例中应避免误写成 Llama 相关名称)。
  • GGUF 格式的模型可以轻松在 llama.cpp、Ollama、LM Studio 等推理后端运行,极大地方便了本地部署。

目录

  1. 1. 环境准备
  2. 1.1 创建 Conda 环境
  3. 1.2 安装 LLaMA-Factory
  4. 1.3 安装 llama.cpp
  5. 2. 使用 LLaMA-Factory 微调 Qwen2.5-7B-Instruct
  6. 2.1 准备数据
  7. 2.2 配置微调参数
  8. 2.3 合并 LoRA 权重(如果需要导出完整模型)
  9. 3. 将微调后的模型转换为 GGUF 格式
  10. 3.1 准备转换环境
  11. 3.2 使用 llama.cpp 的转换脚本
  12. 3.3 遇到的经典错误及解决
  13. 3.4 验证转换结果
  14. 4. 总结
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • FastAPI:Python 高性能 Web 框架
  • WebAssembly 技术全景解析:核心机制与应用场景
  • SpringBoot 整合 Neo4j 图数据库实战
  • Ghostty + Yazi + Lazygit 构建现代化终端开发环境
  • Vue3 开发实战:主流 AI 代码助手选择与 VSCode 配置
  • Vivado 入门教程:工程创建、仿真与烧录流程
  • MySQL 视图定义、操作及用户权限管理
  • MCP 插件配置指南:以 browser-tools-mcp 为例
  • Android项目框架搭建与模块化设计
  • Stable Diffusion 3.5 工业设计案例:产品草图生成系统
  • 后仿真 SDF 反标常见 Warning 分析与处理指南
  • DeepSeek 系列版本演进与核心特性对比分析
  • 深度神经网络的参数初始化方法
  • 常见 AIGC 检测降重工具评测与对比分析
  • 基于 Go 语言的命令行 AI 对话客户端开发实战
  • Java String 核心方法与使用技巧
  • 基于 DeepFace 和 OpenCV 的情绪分析器实现
  • C++ 性能分析工具全景与选型指南
  • 飞算 JavaAI 实战指南:安装、配置与核心功能解析
  • Python Windows 版本下载安装与 PyCharm 配置指南

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online