跳转到内容

模型微调

更新: 2026/9/2 字数: 0 字 时长: 0 分钟

为什么需要微调?

大语言模型(LLM)虽然具备强大的通用能力,但往往无法完美契合特定领域或个性化需求。微调(Fine-tuning) 是在预训练模型基础上,使用特定任务数据进行再次训练,以提升模型在目标任务上的表现。

微调的核心价值:

  • 领域适配:让模型掌握医疗、法律、金融等垂直领域的专业知识和术语。
  • 风格定制:调整模型的回答语气、格式、结构,使其更符合您的产品调性。
  • 指令遵循:增强模型对复杂指令的理解和执行能力,提高交互体验。
  • 行为与任务适配:通过特定领域数据训练模型,使其更熟悉领域术语、任务模式和回答方式。对于频繁变化或需要精确引用最新信息的知识,更推荐结合 RAG(检索增强生成) 或知识库方案,而非单纯依赖微调。

意义

对于资源有限、希望降低训练成本的场景,LoRA/QLoRA 微调通常是较具性价比的微调方案——仅需少量显卡内存,即可在消费级硬件上完成定制。

微调的应用场景

微调技术已在多个领域得到验证,以下是一些典型应用:

场景描述微调方法建议
客服机器人使用企业历史工单、FAQ 数据微调,让模型准确回答产品相关问题QLoRA(低资源)
医疗辅助基于经过审核的专业数据进行领域/任务适配;高风险场景需结合人工审核与 RAGLoRA / QLoRA + RAG
教育辅导针对特定教材、习题数据微调,实现个性化教学问答LoRA
代码生成使用公司内部代码库微调,生成符合规范的业务代码QLoRA
数据分析微调模型以理解企业内部数据表结构,自动生成 SQL 或报表LoRA
多语言增强强化小语种能力,或调整翻译风格QLoRA

注意事项

医疗、法律、金融等高风险场景应进行严格的数据审核、模型评测和人工验证,微调不能替代专业人员判断。

常用微调工具:LLaMA-Factory

LLaMA-Factory 是一个开源的大语言模型微调框架,它统一了多种高效微调方法(LoRA、QLoRA、PiSSA 等),并提供 Web UI 和命令行两种操作方式,极大降低了微调门槛。

LLaMA-Factory 的优势:

  • 支持众多主流模型:LLaMA、Qwen、Mistral、Gemma、Yi 等。
  • 多种微调方法:LoRA、QLoRA、全参微调、PiSSA、DoRA 等。
  • 多模态支持:可微调 LLaVA、Qwen-VL 等多模态模型。
  • 内置数据集处理:支持 Alpaca、ShareGPT 等多种格式,方便接入自定义数据。
  • 高效的训练优化:支持 SFT(监督微调)、RM(奖励建模)、PPO 等多种训练范式,并可结合 Flash Attention、梯度检查点等技术显著降低训练资源消耗。

微调流程概览

微调是一个多阶段的过程,基本流程如下:

原始模型 → 准备数据集 → (可选) 配置训练参数 → 执行微调 → 导出微调模型 → 合并/转换 → 部署验证

准备数据集

将您的业务数据整理为模型微调所需格式。常用格式包括:

  • Alpaca 格式(指令-输入-输出):
    json
    {
      "instruction": "计算以下表达式的值",
      "input": "3 + 5 * 2",
      "output": "13"
    }
  • ShareGPT 格式(多轮对话):
    json
    {
      "conversations": [
        {"from": "human", "value": "你好"},
        {"from": "gpt", "value": "你好!有什么可以帮您?"}
      ]
    }

实际使用 LLaMA-Factory 时,还需要在 dataset_info.json 中注册数据集并指定字段映射。具体格式请参考 LLaMA-Factory 官方文档

配置微调参数

根据硬件和模型规模,选择适当的微调方法(LoRA/QLoRA)并设置超参数(学习率、批次大小、轮数等)。LLaMA-Factory 提供了 Web UI 和 YAML 配置文件两种方式。

执行微调

启动训练任务,监控损失下降情况,并根据验证集表现适时停止。

导出与合并

如果采用 LoRA/QLoRA 等参数高效微调方法,训练输出通常是 LoRA Adapter;如果采用全参数微调,则输出的是完整模型权重或相应 checkpoint。

导出的 LoRA Adapter 可以通过 LLaMA-Factory 提供的工具与基座模型合并,得到完整的模型文件。

转换为 GGUF 格式

合并后的模型为 PyTorch 或 SafeTensors 格式,需按照 模型下载与转换 中的步骤将其转换为 GGUF 格式,以便在 Bot.js Pro 中加载使用。

验证与部署

在本地使用 llama-clillama-server 对微调后的模型进行推理测试,确认效果达标后即可投入生产。

建议

详细微调步骤(数据集准备、参数配置、命令行示例等)正在编写中,敬请期待。 您也可以参考 LLaMA-Factory 官方文档 获取即时指导。

微调后模型处理

微调完成后,您需要将生成的模型文件整合并转换,才能用于 Bot.js Pro 的 $ai 模块。

LoRA 权重合并(如使用 LoRA/QLoRA)

推荐使用 YAML 配置文件的方式进行合并,稳定性更好。

示例 merge_config.yaml

yaml
model_name_or_path: <基座模型路径>
adapter_name_or_path: <LoRA适配器路径>
template: <与模型匹配的模板,如 qwen>
finetuning_type: lora
export_dir: <导出完整模型路径>
export_size: 4
export_device: cpu
export_legacy_format: false

执行合并命令:

bash
llamafactory-cli export merge_config.yaml

⚠️ 特别注意:如果使用 QLoRA 训练(即训练时基座模型加载了 4-bit 量化),进行 LoRA 合并时,model_name_or_path 应指定为对应的未量化基座模型(如 FP16 版本),而不是训练时使用的 4-bit 模型。

📌 export_size 参数用于控制导出模型的分片大小(单位 GB),而非量化位数。

转换为 GGUF

按照 自行转换模型 章节的指引,使用 convert_hf_to_gguf.py 将合并后的模型转为 GGUF 格式。

常见问题

Q:微调和提示工程(Prompt Engineering)有什么区别?

  • 提示工程:通过设计输入文本(如 few-shot 示例)引导模型行为,无需训练,灵活但效果有限。
  • 微调:通过训练修改模型权重,使模型从根本上适应该任务,效果更稳定,但需要数据和算力。

两者可结合使用:微调 + 精心设计的提示通常能获得最佳效果。

Q:微调需要多少数据?

这取决于任务复杂度和模型规模。对于格式、风格或特定任务类微调,几百到几千条高质量样本有时即可产生明显效果;实际需求取决于任务复杂度、模型规模和数据质量。

Q:消费级 GPU(如 RTX 3060 12GB)能微调吗?

可以尝试。使用 QLoRA 方法,配合 4-bit 量化,结合梯度检查点和 Flash Attention,12GB 显存有潜力微调 7B 参数级别的模型。实际显存需求取决于模型规模、序列长度、批次大小以及训练配置,建议根据具体模型和硬件进行测试。

Q:微调后的模型会不会忘记原有的通用能力?

LoRA/QLoRA 只训练部分新增参数,相比全参数微调通常更容易保留基座模型能力,但实际效果仍取决于训练数据、训练轮数、学习率等因素,需注意避免过拟合。

Q:微调后必须合并 LoRA 才能转 GGUF 吗?

这取决于您的部署方式。llama.cpp 本身已支持通过 convert_lora_to_gguf.py 将 LoRA 适配器转换为 GGUF 格式,并在推理时使用 --lora 参数与基座模型一同加载。

但对于 Bot.js Pro 的安卓端部署场景,建议采用合并方式。

原因如下:

  • 安卓端 llama.cpp 的集成接口对独立加载外部 LoRA 文件的支持不够完善,加载策略在不同设备上可能存在兼容性差异。
  • 合并后的单文件模型部署更简单,无需额外管理适配器文件,也避免了路径和加载顺序带来的潜在问题。

因此,对于 Bot.js Pro 用户,推荐的操作路径是:

LoRA 适配器 → 与未量化基座模型合并 → 完整 HF 模型 → 转换为 GGUF → 部署到安卓端

合并后的 GGUF 文件同样支持分片加载,不影响大模型在移动端的部署灵活性。

参考资料