Java 程序员第 29 阶段-01:大模型微调入门:小样本业务适配方案

前言

在人工智能领域,大语言模型(Large Language Model,LLM)已经成为了推动技术进步的核心力量。从 GPT 系列到 LLaMA,从 ChatGPT 到国内的通义千问、文心一言,通用大模型展现了令人惊叹的语言理解、逻辑推理和内容生成能力。然而,通用大模型虽然强大,但在处理特定垂直领域的专业问题时,往往表现不如预期------回答泛泛而谈、缺乏行业深度认知、无法精准遵循企业业务规则等问题屡见不鲜。

这就引出了一个关键问题:如何在保持大模型通用能力的同时,让其更好地适应特定业务场景? 答案就是模型微调(Fine-tuning)。

本文将系统讲解大模型微调的完整知识体系,从为什么需要微调讲起,全面解析 Full Fine-tuning、LoRA、QLoRA、Adapter Tuning、Prefix Tuning、P-tuning v2 等主流微调方法的原理与差异,深入探讨训练数据准备、主流微调框架使用、Java 工程师视角的 Python 微调与 Spring Boot 调用集成,并通过实战案例帮助读者快速上手大模型微调。

一、为什么需要微调:通用模型 vs 垂直领域

1.1 通用大模型的能力与局限

以 GPT-4、LLaMA-2、通义千问为代表的通用大模型,通过在海量互联网数据上进行预训练,获得了强大的语言理解和生成能力。它们能够:

  • 流畅对话:进行自然语言交互,回答各类问题
  • 知识推理:完成逻辑推理、数学计算、代码编写等复杂任务
  • 多任务适应:无需额外训练即可处理翻译、摘要、问答等多种任务
  • 零样本学习:通过提示词(Prompt)即可完成未见过的任务

然而,通用大模型的局限性同样明显:

|-----------------------------------|--------------------------------|--------------------------------------------------|-----------|--------|-------------|
| 问题类型 | 具体表现 | | | | |
| --------- | --------- | | | | |
| **领域知识不足** | 在医疗、法律、金融等专业领域,可能给出不够准确甚至错误的答案 | | | | |
| **企业认知缺失** | 不了解特定企业的产品、服务、内部流程 | | | | |
| **输出格式不稳定** | 难以严格遵循业务要求的输出格式(如 JSON、XML) | | | | |
| **幻觉问题** | 对不确定的问题可能编造看似合理但实际错误的答案 | | | | |
| **推理成本高** | 通用模型参数量巨大,部署和推理成本高昂 | | | | |
| 维度 | 提示工程 | RAG | 微调 | | |
| ------ | --------- | ----- | ------ | | |
| **实现难度** | 低 | 中 | 高 | | |
| **成本** | 低 | 中 | 高 | | |
| **训练时间** | 无 | 无 | 数小时到数天 | | |
| **知识更新** | 实时 | 实时 | 需重新训练 | | |
| **任务适配** | 通用任务 | 知识问答 | 复杂推理/格式 | | |
| **依赖数据量** | 少量示例 | 文档库 | 百条到数千条 | | |
| **控制力** | 弱 | 中 | 强 | | |
| **适用场景** | 通用对话、格式控制 | 知识库问答 | 领域适应、行为模式 | | |
| 参数 | 说明 | 常用值 | | | |
| ------ | ------ | -------- | | | |
| `r` | 低秩分解的秩,决定可训练参数量 | 4, 8, 16, 32 | | | |
| `lora_alpha` | 缩放因子,通常设为 r 的 2 倍 | 8, 16, 32, 64 | | | |
| `lora_dropout` | LoRA 层的 dropout 概率 | 0.0, 0.1 | | | |
| `target_modules` | 应用 LoRA 的模块 | q_proj, v_proj, k_proj, o_proj | | | |
| 维度 | LoRA | QLoRA | | | |
| ------ | ------ | ------- | | | |
| **模型精度** | 保持 FP16/BF16 | 量化到 INT4/INT8 | | | |
| **显存占用** | 7B: ~10GB | 7B: ~5GB | | | |
| **推理速度** | 正常 | 略慢(需反量化) | | | |
| **微调效果** | 接近全量微调 | 略低于 LoRA | | | |
| **硬件要求** | RTX 3090+ | RTX 2080+ | | | |
| 维度 | Adapter | LoRA | | | |
| ------ | --------- | ------ | | | |
| **结构** | 并联在 FFN 层 | 低秩分解替代 | | | |
| **位置** | 需指定插入位置 | 任意位置 | | | |
| **参数量** | ~3-5% | ~0.1-1% | | | |
| **推理延迟** | 略高(串行计算) | 无(可合并) | | | |
| **多任务** | 多适配器切换 | 多 LoRA 动态加载 | | | |
| 维度 | Prefix Tuning | Prompt Tuning | | | |
| ------ | --------------- | --------------- | | | |
| **提示位置** | 每层 | 仅输入层 | | | |
| **参数量** | 较大(k × layers) | 较小(k) | | | |
| **效果** | 更好 | 略逊 | | | |
| **适用场景** | 复杂任务 | 简单任务 | | | |

方法 可训练参数 GPU 显存 推理延迟 效果 实现复杂度
Full FT 100% ≥24GB 最优
LoRA 0.1-1% ≥10GB 接近全量
QLoRA 0.1-1% ≥6GB 略高 良好
Adapter 1-5% ≥12GB 略高 良好
Prefix 0.1-3% ≥10GB 中等
P-tuning v2 0.1-3% ≥10GB 良好
数据集 说明 适用场景
-------- ------ ---------
**Alpaca** Stanford Alpaca 团队生成 通用指令微调
**ShareGPT** 用户对话数据 对话系统
**FLAN** 谷歌指令数据集集合 指令遵循
** Dolly** Databricks 员工生成 领域适应
**OpenAssistant** 开源对话数据 对话系统
检查项 方法 处理方式
-------- ------ ---------
**重复数据** 哈希比对、相似度计算 去重
**噪声数据** 关键词过滤、长度分布分析 过滤
**格式错误** JSON 解析、schema 验证 修正或过滤
**隐私信息** 正则匹配、NER 检测 脱敏或过滤
**标注一致性** 多人标注、交叉验证 重新标注
类型 说明
------ ------
ROUGE-N N-gram 召回率(ROUGE-1, ROUGE-2)
ROUGE-L 最长公共子序列
ROUGE-S Skip-gram 召回率
维度 评估标准
------ ---------
**相关性** 回答是否切题
**准确性** 信息是否正确无误
**完整性** 是否完整回答问题
**专业性** 术语使用是否恰当
**流畅性** 表达是否通顺
方案 特点 适用场景
------ ------ ---------
**vLLM** PagedAttention,吞吐量高 高并发推理
**TGI** HuggingFace 官方,支持推理优化 通用部署
**Text Generation Inference** Rust 实现,高效 生产环境
**Ollama** 本地部署,简单易用 本地开发
**llama.cpp** 纯 C/C++,CPU 友好 边缘部署
问题 原因 解决方案
------ ------ ---------
过拟合 数据量太少或训练轮次过多 增加数据、使用正则、增加 dropout
灾难性遗忘 全量微调破坏预训练知识 使用 LoRA/QLoRA 或保留预训练数据
分布偏移 微调数据与预训练数据差异大 混合预训练数据一起训练
质量不稳定 数据标注不一致 重新标注、数据清洗
问题 原因 解决方案
------ ------ ---------
OOM(显存溢出) batch size 过大或序列太长 减小 batch size、启用 gradient checkpointing、使用 QLoRA
Loss 不下降 学习率不合适或模型问题 调整学习率、检查数据格式
Loss 爆炸 学习率过高或梯度问题 减小学习率、启用梯度裁剪
NaN 损失 数值不稳定 使用混合精度训练、检查数据
问题 原因 解决方案
------ ------ ---------
重复生成 解码策略问题 调整 temperature、启用 repetition_penalty
生成截断 最大长度限制 增加 max_new_tokens
回答格式错误 Prompt 不够清晰 优化 Prompt,添加示例
推理速度慢 模型过大或硬件不足 量化、使用更小模型
趋势 说明
------ ------
**更高效的方法** 如 LoRA+、DoRA 等新方法不断涌现
**多模态微调** 图像、语音、文本联合微调
**增量微调** 高效利用新数据,不遗忘旧知识
**自动化微调** AutoML + 微调,自动搜索最佳配置
**端侧微调** 在手机、IoT 设备上进行微调

|-----------------------------------|--------------------------------|--------------------------------------------------|-----------|--------|-------------|
| 问题类型 | 具体表现 | | | | |
| --------- | --------- | | | | |
| **领域知识不足** | 在医疗、法律、金融等专业领域,可能给出不够准确甚至错误的答案 | | | | |
| **企业认知缺失** | 不了解特定企业的产品、服务、内部流程 | | | | |
| **输出格式不稳定** | 难以严格遵循业务要求的输出格式(如 JSON、XML) | | | | |
| **幻觉问题** | 对不确定的问题可能编造看似合理但实际错误的答案 | | | | |
| **推理成本高** | 通用模型参数量巨大,部署和推理成本高昂 | | | | |
| 维度 | 提示工程 | RAG | 微调 | | |
| ------ | --------- | ----- | ------ | | |
| **实现难度** | 低 | 中 | 高 | | |
| **成本** | 低 | 中 | 高 | | |
| **训练时间** | 无 | 无 | 数小时到数天 | | |
| **知识更新** | 实时 | 实时 | 需重新训练 | | |
| **任务适配** | 通用任务 | 知识问答 | 复杂推理/格式 | | |
| **依赖数据量** | 少量示例 | 文档库 | 百条到数千条 | | |
| **控制力** | 弱 | 中 | 强 | | |
| **适用场景** | 通用对话、格式控制 | 知识库问答 | 领域适应、行为模式 | | |
| 参数 | 说明 | 常用值 | | | |
| ------ | ------ | -------- | | | |
| `r` | 低秩分解的秩,决定可训练参数量 | 4, 8, 16, 32 | | | |
| `lora_alpha` | 缩放因子,通常设为 r 的 2 倍 | 8, 16, 32, 64 | | | |
| `lora_dropout` | LoRA 层的 dropout 概率 | 0.0, 0.1 | | | |
| `target_modules` | 应用 LoRA 的模块 | q_proj, v_proj, k_proj, o_proj | | | |
| 维度 | LoRA | QLoRA | | | |
| ------ | ------ | ------- | | | |
| **模型精度** | 保持 FP16/BF16 | 量化到 INT4/INT8 | | | |
| **显存占用** | 7B: ~10GB | 7B: ~5GB | | | |
| **推理速度** | 正常 | 略慢(需反量化) | | | |
| **微调效果** | 接近全量微调 | 略低于 LoRA | | | |
| **硬件要求** | RTX 3090+ | RTX 2080+ | | | |
| 维度 | Adapter | LoRA | | | |
| ------ | --------- | ------ | | | |
| **结构** | 并联在 FFN 层 | 低秩分解替代 | | | |
| **位置** | 需指定插入位置 | 任意位置 | | | |
| **参数量** | ~3-5% | ~0.1-1% | | | |
| **推理延迟** | 略高(串行计算) | 无(可合并) | | | |
| **多任务** | 多适配器切换 | 多 LoRA 动态加载 | | | |
| 维度 | Prefix Tuning | Prompt Tuning | | | |
| ------ | --------------- | --------------- | | | |
| **提示位置** | 每层 | 仅输入层 | | | |
| **参数量** | 较大(k × layers) | 较小(k) | | | |
| **效果** | 更好 | 略逊 | | | |
| **适用场景** | 复杂任务 | 简单任务 | | | |

方法 可训练参数 GPU 显存 推理延迟 效果 实现复杂度
Full FT 100% ≥24GB 最优
LoRA 0.1-1% ≥10GB 接近全量
QLoRA 0.1-1% ≥6GB 略高 良好
Adapter 1-5% ≥12GB 略高 良好
Prefix 0.1-3% ≥10GB 中等
P-tuning v2 0.1-3% ≥10GB 良好
数据集 说明 适用场景
-------- ------ ---------
**Alpaca** Stanford Alpaca 团队生成 通用指令微调
**ShareGPT** 用户对话数据 对话系统
**FLAN** 谷歌指令数据集集合 指令遵循
** Dolly** Databricks 员工生成 领域适应
**OpenAssistant** 开源对话数据 对话系统
检查项 方法 处理方式
-------- ------ ---------
**重复数据** 哈希比对、相似度计算 去重
**噪声数据** 关键词过滤、长度分布分析 过滤
**格式错误** JSON 解析、schema 验证 修正或过滤
**隐私信息** 正则匹配、NER 检测 脱敏或过滤
**标注一致性** 多人标注、交叉验证 重新标注
类型 说明
------ ------
ROUGE-N N-gram 召回率(ROUGE-1, ROUGE-2)
ROUGE-L 最长公共子序列
ROUGE-S Skip-gram 召回率
维度 评估标准
------ ---------
**相关性** 回答是否切题
**准确性** 信息是否正确无误
**完整性** 是否完整回答问题
**专业性** 术语使用是否恰当
**流畅性** 表达是否通顺
方案 特点 适用场景
------ ------ ---------
**vLLM** PagedAttention,吞吐量高 高并发推理
**TGI** HuggingFace 官方,支持推理优化 通用部署
**Text Generation Inference** Rust 实现,高效 生产环境
**Ollama** 本地部署,简单易用 本地开发
**llama.cpp** 纯 C/C++,CPU 友好 边缘部署
问题 原因 解决方案
------ ------ ---------
过拟合 数据量太少或训练轮次过多 增加数据、使用正则、增加 dropout
灾难性遗忘 全量微调破坏预训练知识 使用 LoRA/QLoRA 或保留预训练数据
分布偏移 微调数据与预训练数据差异大 混合预训练数据一起训练
质量不稳定 数据标注不一致 重新标注、数据清洗
问题 原因 解决方案
------ ------ ---------
OOM(显存溢出) batch size 过大或序列太长 减小 batch size、启用 gradient checkpointing、使用 QLoRA
Loss 不下降 学习率不合适或模型问题 调整学习率、检查数据格式
Loss 爆炸 学习率过高或梯度问题 减小学习率、启用梯度裁剪
NaN 损失 数值不稳定 使用混合精度训练、检查数据
问题 原因 解决方案
------ ------ ---------
重复生成 解码策略问题 调整 temperature、启用 repetition_penalty
生成截断 最大长度限制 增加 max_new_tokens
回答格式错误 Prompt 不够清晰 优化 Prompt,添加示例
推理速度慢 模型过大或硬件不足 量化、使用更小模型
趋势 说明
------ ------
**更高效的方法** 如 LoRA+、DoRA 等新方法不断涌现
**多模态微调** 图像、语音、文本联合微调
**增量微调** 高效利用新数据,不遗忘旧知识
**自动化微调** AutoML + 微调,自动搜索最佳配置
**端侧微调** 在手机、IoT 设备上进行微调

|-----------------------------------|--------------------------------|--------------------------------------------------|-----------|--------|-------------|
| 问题类型 | 具体表现 | | | | |
| --------- | --------- | | | | |
| **领域知识不足** | 在医疗、法律、金融等专业领域,可能给出不够准确甚至错误的答案 | | | | |
| **企业认知缺失** | 不了解特定企业的产品、服务、内部流程 | | | | |
| **输出格式不稳定** | 难以严格遵循业务要求的输出格式(如 JSON、XML) | | | | |
| **幻觉问题** | 对不确定的问题可能编造看似合理但实际错误的答案 | | | | |
| **推理成本高** | 通用模型参数量巨大,部署和推理成本高昂 | | | | |
| 维度 | 提示工程 | RAG | 微调 | | |
| ------ | --------- | ----- | ------ | | |
| **实现难度** | 低 | 中 | 高 | | |
| **成本** | 低 | 中 | 高 | | |
| **训练时间** | 无 | 无 | 数小时到数天 | | |
| **知识更新** | 实时 | 实时 | 需重新训练 | | |
| **任务适配** | 通用任务 | 知识问答 | 复杂推理/格式 | | |
| **依赖数据量** | 少量示例 | 文档库 | 百条到数千条 | | |
| **控制力** | 弱 | 中 | 强 | | |
| **适用场景** | 通用对话、格式控制 | 知识库问答 | 领域适应、行为模式 | | |
| 参数 | 说明 | 常用值 | | | |
| ------ | ------ | -------- | | | |
| `r` | 低秩分解的秩,决定可训练参数量 | 4, 8, 16, 32 | | | |
| `lora_alpha` | 缩放因子,通常设为 r 的 2 倍 | 8, 16, 32, 64 | | | |
| `lora_dropout` | LoRA 层的 dropout 概率 | 0.0, 0.1 | | | |
| `target_modules` | 应用 LoRA 的模块 | q_proj, v_proj, k_proj, o_proj | | | |
| 维度 | LoRA | QLoRA | | | |
| ------ | ------ | ------- | | | |
| **模型精度** | 保持 FP16/BF16 | 量化到 INT4/INT8 | | | |
| **显存占用** | 7B: ~10GB | 7B: ~5GB | | | |
| **推理速度** | 正常 | 略慢(需反量化) | | | |
| **微调效果** | 接近全量微调 | 略低于 LoRA | | | |
| **硬件要求** | RTX 3090+ | RTX 2080+ | | | |
| 维度 | Adapter | LoRA | | | |
| ------ | --------- | ------ | | | |
| **结构** | 并联在 FFN 层 | 低秩分解替代 | | | |
| **位置** | 需指定插入位置 | 任意位置 | | | |
| **参数量** | ~3-5% | ~0.1-1% | | | |
| **推理延迟** | 略高(串行计算) | 无(可合并) | | | |
| **多任务** | 多适配器切换 | 多 LoRA 动态加载 | | | |
| 维度 | Prefix Tuning | Prompt Tuning | | | |
| ------ | --------------- | --------------- | | | |
| **提示位置** | 每层 | 仅输入层 | | | |
| **参数量** | 较大(k × layers) | 较小(k) | | | |
| **效果** | 更好 | 略逊 | | | |
| **适用场景** | 复杂任务 | 简单任务 | | | |

方法 可训练参数 GPU 显存 推理延迟 效果 实现复杂度
Full FT 100% ≥24GB 最优
LoRA 0.1-1% ≥10GB 接近全量
QLoRA 0.1-1% ≥6GB 略高 良好
Adapter 1-5% ≥12GB 略高 良好
Prefix 0.1-3% ≥10GB 中等
P-tuning v2 0.1-3% ≥10GB 良好
数据集 说明 适用场景
-------- ------ ---------
**Alpaca** Stanford Alpaca 团队生成 通用指令微调
**ShareGPT** 用户对话数据 对话系统
**FLAN** 谷歌指令数据集集合 指令遵循
** Dolly** Databricks 员工生成 领域适应
**OpenAssistant** 开源对话数据 对话系统
检查项 方法 处理方式
-------- ------ ---------
**重复数据** 哈希比对、相似度计算 去重
**噪声数据** 关键词过滤、长度分布分析 过滤
**格式错误** JSON 解析、schema 验证 修正或过滤
**隐私信息** 正则匹配、NER 检测 脱敏或过滤
**标注一致性** 多人标注、交叉验证 重新标注
类型 说明
------ ------
ROUGE-N N-gram 召回率(ROUGE-1, ROUGE-2)
ROUGE-L 最长公共子序列
ROUGE-S Skip-gram 召回率
维度 评估标准
------ ---------
**相关性** 回答是否切题
**准确性** 信息是否正确无误
**完整性** 是否完整回答问题
**专业性** 术语使用是否恰当
**流畅性** 表达是否通顺
方案 特点 适用场景
------ ------ ---------
**vLLM** PagedAttention,吞吐量高 高并发推理
**TGI** HuggingFace 官方,支持推理优化 通用部署
**Text Generation Inference** Rust 实现,高效 生产环境
**Ollama** 本地部署,简单易用 本地开发
**llama.cpp** 纯 C/C++,CPU 友好 边缘部署
问题 原因 解决方案
------ ------ ---------
过拟合 数据量太少或训练轮次过多 增加数据、使用正则、增加 dropout
灾难性遗忘 全量微调破坏预训练知识 使用 LoRA/QLoRA 或保留预训练数据
分布偏移 微调数据与预训练数据差异大 混合预训练数据一起训练
质量不稳定 数据标注不一致 重新标注、数据清洗
问题 原因 解决方案
------ ------ ---------
OOM(显存溢出) batch size 过大或序列太长 减小 batch size、启用 gradient checkpointing、使用 QLoRA
Loss 不下降 学习率不合适或模型问题 调整学习率、检查数据格式
Loss 爆炸 学习率过高或梯度问题 减小学习率、启用梯度裁剪
NaN 损失 数值不稳定 使用混合精度训练、检查数据
问题 原因 解决方案
------ ------ ---------
重复生成 解码策略问题 调整 temperature、启用 repetition_penalty
生成截断 最大长度限制 增加 max_new_tokens
回答格式错误 Prompt 不够清晰 优化 Prompt,添加示例
推理速度慢 模型过大或硬件不足 量化、使用更小模型
趋势 说明
------ ------
**更高效的方法** 如 LoRA+、DoRA 等新方法不断涌现
**多模态微调** 图像、语音、文本联合微调
**增量微调** 高效利用新数据,不遗忘旧知识
**自动化微调** AutoML + 微调,自动搜索最佳配置
**端侧微调** 在手机、IoT 设备上进行微调

|-----------------------------------|--------------------------------|--------------------------------------------------|-----------|--------|-------------|
| 问题类型 | 具体表现 | | | | |
| --------- | --------- | | | | |
| **领域知识不足** | 在医疗、法律、金融等专业领域,可能给出不够准确甚至错误的答案 | | | | |
| **企业认知缺失** | 不了解特定企业的产品、服务、内部流程 | | | | |
| **输出格式不稳定** | 难以严格遵循业务要求的输出格式(如 JSON、XML) | | | | |
| **幻觉问题** | 对不确定的问题可能编造看似合理但实际错误的答案 | | | | |
| **推理成本高** | 通用模型参数量巨大,部署和推理成本高昂 | | | | |
| 维度 | 提示工程 | RAG | 微调 | | |
| ------ | --------- | ----- | ------ | | |
| **实现难度** | 低 | 中 | 高 | | |
| **成本** | 低 | 中 | 高 | | |
| **训练时间** | 无 | 无 | 数小时到数天 | | |
| **知识更新** | 实时 | 实时 | 需重新训练 | | |
| **任务适配** | 通用任务 | 知识问答 | 复杂推理/格式 | | |
| **依赖数据量** | 少量示例 | 文档库 | 百条到数千条 | | |
| **控制力** | 弱 | 中 | 强 | | |
| **适用场景** | 通用对话、格式控制 | 知识库问答 | 领域适应、行为模式 | | |
| 参数 | 说明 | 常用值 | | | |
| ------ | ------ | -------- | | | |
| `r` | 低秩分解的秩,决定可训练参数量 | 4, 8, 16, 32 | | | |
| `lora_alpha` | 缩放因子,通常设为 r 的 2 倍 | 8, 16, 32, 64 | | | |
| `lora_dropout` | LoRA 层的 dropout 概率 | 0.0, 0.1 | | | |
| `target_modules` | 应用 LoRA 的模块 | q_proj, v_proj, k_proj, o_proj | | | |
| 维度 | LoRA | QLoRA | | | |
| ------ | ------ | ------- | | | |
| **模型精度** | 保持 FP16/BF16 | 量化到 INT4/INT8 | | | |
| **显存占用** | 7B: ~10GB | 7B: ~5GB | | | |
| **推理速度** | 正常 | 略慢(需反量化) | | | |
| **微调效果** | 接近全量微调 | 略低于 LoRA | | | |
| **硬件要求** | RTX 3090+ | RTX 2080+ | | | |
| 维度 | Adapter | LoRA | | | |
| ------ | --------- | ------ | | | |
| **结构** | 并联在 FFN 层 | 低秩分解替代 | | | |
| **位置** | 需指定插入位置 | 任意位置 | | | |
| **参数量** | ~3-5% | ~0.1-1% | | | |
| **推理延迟** | 略高(串行计算) | 无(可合并) | | | |
| **多任务** | 多适配器切换 | 多 LoRA 动态加载 | | | |
| 维度 | Prefix Tuning | Prompt Tuning | | | |
| ------ | --------------- | --------------- | | | |
| **提示位置** | 每层 | 仅输入层 | | | |
| **参数量** | 较大(k × layers) | 较小(k) | | | |
| **效果** | 更好 | 略逊 | | | |
| **适用场景** | 复杂任务 | 简单任务 | | | |

方法 可训练参数 GPU 显存 推理延迟 效果 实现复杂度
Full FT 100% ≥24GB 最优
LoRA 0.1-1% ≥10GB 接近全量
QLoRA 0.1-1% ≥6GB 略高 良好
Adapter 1-5% ≥12GB 略高 良好
Prefix 0.1-3% ≥10GB 中等
P-tuning v2 0.1-3% ≥10GB 良好
数据集 说明 适用场景
-------- ------ ---------
**Alpaca** Stanford Alpaca 团队生成 通用指令微调
**ShareGPT** 用户对话数据 对话系统
**FLAN** 谷歌指令数据集集合 指令遵循
** Dolly** Databricks 员工生成 领域适应
**OpenAssistant** 开源对话数据 对话系统
检查项 方法 处理方式
-------- ------ ---------
**重复数据** 哈希比对、相似度计算 去重
**噪声数据** 关键词过滤、长度分布分析 过滤
**格式错误** JSON 解析、schema 验证 修正或过滤
**隐私信息** 正则匹配、NER 检测 脱敏或过滤
**标注一致性** 多人标注、交叉验证 重新标注
类型 说明
------ ------
ROUGE-N N-gram 召回率(ROUGE-1, ROUGE-2)
ROUGE-L 最长公共子序列
ROUGE-S Skip-gram 召回率
维度 评估标准
------ ---------
**相关性** 回答是否切题
**准确性** 信息是否正确无误
**完整性** 是否完整回答问题
**专业性** 术语使用是否恰当
**流畅性** 表达是否通顺
方案 特点 适用场景
------ ------ ---------
**vLLM** PagedAttention,吞吐量高 高并发推理
**TGI** HuggingFace 官方,支持推理优化 通用部署
**Text Generation Inference** Rust 实现,高效 生产环境
**Ollama** 本地部署,简单易用 本地开发
**llama.cpp** 纯 C/C++,CPU 友好 边缘部署
问题 原因 解决方案
------ ------ ---------
过拟合 数据量太少或训练轮次过多 增加数据、使用正则、增加 dropout
灾难性遗忘 全量微调破坏预训练知识 使用 LoRA/QLoRA 或保留预训练数据
分布偏移 微调数据与预训练数据差异大 混合预训练数据一起训练
质量不稳定 数据标注不一致 重新标注、数据清洗
问题 原因 解决方案
------ ------ ---------
OOM(显存溢出) batch size 过大或序列太长 减小 batch size、启用 gradient checkpointing、使用 QLoRA
Loss 不下降 学习率不合适或模型问题 调整学习率、检查数据格式
Loss 爆炸 学习率过高或梯度问题 减小学习率、启用梯度裁剪
NaN 损失 数值不稳定 使用混合精度训练、检查数据
问题 原因 解决方案
------ ------ ---------
重复生成 解码策略问题 调整 temperature、启用 repetition_penalty
生成截断 最大长度限制 增加 max_new_tokens
回答格式错误 Prompt 不够清晰 优化 Prompt,添加示例
推理速度慢 模型过大或硬件不足 量化、使用更小模型
趋势 说明
------ ------
**更高效的方法** 如 LoRA+、DoRA 等新方法不断涌现
**多模态微调** 图像、语音、文本联合微调
**增量微调** 高效利用新数据,不遗忘旧知识
**自动化微调** AutoML + 微调,自动搜索最佳配置
**端侧微调** 在手机、IoT 设备上进行微调

|-----------------------------------|--------------------------------|--------------------------------------------------|-----------|--------|-------------|
| 问题类型 | 具体表现 | | | | |
| --------- | --------- | | | | |
| **领域知识不足** | 在医疗、法律、金融等专业领域,可能给出不够准确甚至错误的答案 | | | | |
| **企业认知缺失** | 不了解特定企业的产品、服务、内部流程 | | | | |
| **输出格式不稳定** | 难以严格遵循业务要求的输出格式(如 JSON、XML) | | | | |
| **幻觉问题** | 对不确定的问题可能编造看似合理但实际错误的答案 | | | | |
| **推理成本高** | 通用模型参数量巨大,部署和推理成本高昂 | | | | |
| 维度 | 提示工程 | RAG | 微调 | | |
| ------ | --------- | ----- | ------ | | |
| **实现难度** | 低 | 中 | 高 | | |
| **成本** | 低 | 中 | 高 | | |
| **训练时间** | 无 | 无 | 数小时到数天 | | |
| **知识更新** | 实时 | 实时 | 需重新训练 | | |
| **任务适配** | 通用任务 | 知识问答 | 复杂推理/格式 | | |
| **依赖数据量** | 少量示例 | 文档库 | 百条到数千条 | | |
| **控制力** | 弱 | 中 | 强 | | |
| **适用场景** | 通用对话、格式控制 | 知识库问答 | 领域适应、行为模式 | | |
| 参数 | 说明 | 常用值 | | | |
| ------ | ------ | -------- | | | |
| `r` | 低秩分解的秩,决定可训练参数量 | 4, 8, 16, 32 | | | |
| `lora_alpha` | 缩放因子,通常设为 r 的 2 倍 | 8, 16, 32, 64 | | | |
| `lora_dropout` | LoRA 层的 dropout 概率 | 0.0, 0.1 | | | |
| `target_modules` | 应用 LoRA 的模块 | q_proj, v_proj, k_proj, o_proj | | | |
| 维度 | LoRA | QLoRA | | | |
| ------ | ------ | ------- | | | |
| **模型精度** | 保持 FP16/BF16 | 量化到 INT4/INT8 | | | |
| **显存占用** | 7B: ~10GB | 7B: ~5GB | | | |
| **推理速度** | 正常 | 略慢(需反量化) | | | |
| **微调效果** | 接近全量微调 | 略低于 LoRA | | | |
| **硬件要求** | RTX 3090+ | RTX 2080+ | | | |
| 维度 | Adapter | LoRA | | | |
| ------ | --------- | ------ | | | |
| **结构** | 并联在 FFN 层 | 低秩分解替代 | | | |
| **位置** | 需指定插入位置 | 任意位置 | | | |
| **参数量** | ~3-5% | ~0.1-1% | | | |
| **推理延迟** | 略高(串行计算) | 无(可合并) | | | |
| **多任务** | 多适配器切换 | 多 LoRA 动态加载 | | | |
| 维度 | Prefix Tuning | Prompt Tuning | | | |
| ------ | --------------- | --------------- | | | |
| **提示位置** | 每层 | 仅输入层 | | | |
| **参数量** | 较大(k × layers) | 较小(k) | | | |
| **效果** | 更好 | 略逊 | | | |
| **适用场景** | 复杂任务 | 简单任务 | | | |

方法 可训练参数 GPU 显存 推理延迟 效果 实现复杂度
Full FT 100% ≥24GB 最优
LoRA 0.1-1% ≥10GB 接近全量
QLoRA 0.1-1% ≥6GB 略高 良好
Adapter 1-5% ≥12GB 略高 良好
Prefix 0.1-3% ≥10GB 中等
P-tuning v2 0.1-3% ≥10GB 良好
数据集 说明 适用场景
-------- ------ ---------
**Alpaca** Stanford Alpaca 团队生成 通用指令微调
**ShareGPT** 用户对话数据 对话系统
**FLAN** 谷歌指令数据集集合 指令遵循
** Dolly** Databricks 员工生成 领域适应
**OpenAssistant** 开源对话数据 对话系统
检查项 方法 处理方式
-------- ------ ---------
**重复数据** 哈希比对、相似度计算 去重
**噪声数据** 关键词过滤、长度分布分析 过滤
**格式错误** JSON 解析、schema 验证 修正或过滤
**隐私信息** 正则匹配、NER 检测 脱敏或过滤
**标注一致性** 多人标注、交叉验证 重新标注
类型 说明
------ ------
ROUGE-N N-gram 召回率(ROUGE-1, ROUGE-2)
ROUGE-L 最长公共子序列
ROUGE-S Skip-gram 召回率
维度 评估标准
------ ---------
**相关性** 回答是否切题
**准确性** 信息是否正确无误
**完整性** 是否完整回答问题
**专业性** 术语使用是否恰当
**流畅性** 表达是否通顺
方案 特点 适用场景
------ ------ ---------
**vLLM** PagedAttention,吞吐量高 高并发推理
**TGI** HuggingFace 官方,支持推理优化 通用部署
**Text Generation Inference** Rust 实现,高效 生产环境
**Ollama** 本地部署,简单易用 本地开发
**llama.cpp** 纯 C/C++,CPU 友好 边缘部署
问题 原因 解决方案
------ ------ ---------
过拟合 数据量太少或训练轮次过多 增加数据、使用正则、增加 dropout
灾难性遗忘 全量微调破坏预训练知识 使用 LoRA/QLoRA 或保留预训练数据
分布偏移 微调数据与预训练数据差异大 混合预训练数据一起训练
质量不稳定 数据标注不一致 重新标注、数据清洗
问题 原因 解决方案
------ ------ ---------
OOM(显存溢出) batch size 过大或序列太长 减小 batch size、启用 gradient checkpointing、使用 QLoRA
Loss 不下降 学习率不合适或模型问题 调整学习率、检查数据格式
Loss 爆炸 学习率过高或梯度问题 减小学习率、启用梯度裁剪
NaN 损失 数值不稳定 使用混合精度训练、检查数据
问题 原因 解决方案
------ ------ ---------
重复生成 解码策略问题 调整 temperature、启用 repetition_penalty
生成截断 最大长度限制 增加 max_new_tokens
回答格式错误 Prompt 不够清晰 优化 Prompt,添加示例
推理速度慢 模型过大或硬件不足 量化、使用更小模型
趋势 说明
------ ------
**更高效的方法** 如 LoRA+、DoRA 等新方法不断涌现
**多模态微调** 图像、语音、文本联合微调
**增量微调** 高效利用新数据,不遗忘旧知识
**自动化微调** AutoML + 微调,自动搜索最佳配置
**端侧微调** 在手机、IoT 设备上进行微调

|-----------------------------------|--------------------------------|--------------------------------------------------|-----------|--------|-------------|
| 问题类型 | 具体表现 | | | | |
| --------- | --------- | | | | |
| **领域知识不足** | 在医疗、法律、金融等专业领域,可能给出不够准确甚至错误的答案 | | | | |
| **企业认知缺失** | 不了解特定企业的产品、服务、内部流程 | | | | |
| **输出格式不稳定** | 难以严格遵循业务要求的输出格式(如 JSON、XML) | | | | |
| **幻觉问题** | 对不确定的问题可能编造看似合理但实际错误的答案 | | | | |
| **推理成本高** | 通用模型参数量巨大,部署和推理成本高昂 | | | | |
| 维度 | 提示工程 | RAG | 微调 | | |
| ------ | --------- | ----- | ------ | | |
| **实现难度** | 低 | 中 | 高 | | |
| **成本** | 低 | 中 | 高 | | |
| **训练时间** | 无 | 无 | 数小时到数天 | | |
| **知识更新** | 实时 | 实时 | 需重新训练 | | |
| **任务适配** | 通用任务 | 知识问答 | 复杂推理/格式 | | |
| **依赖数据量** | 少量示例 | 文档库 | 百条到数千条 | | |
| **控制力** | 弱 | 中 | 强 | | |
| **适用场景** | 通用对话、格式控制 | 知识库问答 | 领域适应、行为模式 | | |
| 参数 | 说明 | 常用值 | | | |
| ------ | ------ | -------- | | | |
| `r` | 低秩分解的秩,决定可训练参数量 | 4, 8, 16, 32 | | | |
| `lora_alpha` | 缩放因子,通常设为 r 的 2 倍 | 8, 16, 32, 64 | | | |
| `lora_dropout` | LoRA 层的 dropout 概率 | 0.0, 0.1 | | | |
| `target_modules` | 应用 LoRA 的模块 | q_proj, v_proj, k_proj, o_proj | | | |
| 维度 | LoRA | QLoRA | | | |
| ------ | ------ | ------- | | | |
| **模型精度** | 保持 FP16/BF16 | 量化到 INT4/INT8 | | | |
| **显存占用** | 7B: ~10GB | 7B: ~5GB | | | |
| **推理速度** | 正常 | 略慢(需反量化) | | | |
| **微调效果** | 接近全量微调 | 略低于 LoRA | | | |
| **硬件要求** | RTX 3090+ | RTX 2080+ | | | |
| 维度 | Adapter | LoRA | | | |
| ------ | --------- | ------ | | | |
| **结构** | 并联在 FFN 层 | 低秩分解替代 | | | |
| **位置** | 需指定插入位置 | 任意位置 | | | |
| **参数量** | ~3-5% | ~0.1-1% | | | |
| **推理延迟** | 略高(串行计算) | 无(可合并) | | | |
| **多任务** | 多适配器切换 | 多 LoRA 动态加载 | | | |
| 维度 | Prefix Tuning | Prompt Tuning | | | |
| ------ | --------------- | --------------- | | | |
| **提示位置** | 每层 | 仅输入层 | | | |
| **参数量** | 较大(k × layers) | 较小(k) | | | |
| **效果** | 更好 | 略逊 | | | |
| **适用场景** | 复杂任务 | 简单任务 | | | |

方法 可训练参数 GPU 显存 推理延迟 效果 实现复杂度
Full FT 100% ≥24GB 最优
LoRA 0.1-1% ≥10GB 接近全量
QLoRA 0.1-1% ≥6GB 略高 良好
Adapter 1-5% ≥12GB 略高 良好
Prefix 0.1-3% ≥10GB 中等
P-tuning v2 0.1-3% ≥10GB 良好
数据集 说明 适用场景
-------- ------ ---------
**Alpaca** Stanford Alpaca 团队生成 通用指令微调
**ShareGPT** 用户对话数据 对话系统
**FLAN** 谷歌指令数据集集合 指令遵循
** Dolly** Databricks 员工生成 领域适应
**OpenAssistant** 开源对话数据 对话系统
检查项 方法 处理方式
-------- ------ ---------
**重复数据** 哈希比对、相似度计算 去重
**噪声数据** 关键词过滤、长度分布分析 过滤
**格式错误** JSON 解析、schema 验证 修正或过滤
**隐私信息** 正则匹配、NER 检测 脱敏或过滤
**标注一致性** 多人标注、交叉验证 重新标注
类型 说明
------ ------
ROUGE-N N-gram 召回率(ROUGE-1, ROUGE-2)
ROUGE-L 最长公共子序列
ROUGE-S Skip-gram 召回率
维度 评估标准
------ ---------
**相关性** 回答是否切题
**准确性** 信息是否正确无误
**完整性** 是否完整回答问题
**专业性** 术语使用是否恰当
**流畅性** 表达是否通顺
方案 特点 适用场景
------ ------ ---------
**vLLM** PagedAttention,吞吐量高 高并发推理
**TGI** HuggingFace 官方,支持推理优化 通用部署
**Text Generation Inference** Rust 实现,高效 生产环境
**Ollama** 本地部署,简单易用 本地开发
**llama.cpp** 纯 C/C++,CPU 友好 边缘部署
问题 原因 解决方案
------ ------ ---------
过拟合 数据量太少或训练轮次过多 增加数据、使用正则、增加 dropout
灾难性遗忘 全量微调破坏预训练知识 使用 LoRA/QLoRA 或保留预训练数据
分布偏移 微调数据与预训练数据差异大 混合预训练数据一起训练
质量不稳定 数据标注不一致 重新标注、数据清洗
问题 原因 解决方案
------ ------ ---------
OOM(显存溢出) batch size 过大或序列太长 减小 batch size、启用 gradient checkpointing、使用 QLoRA
Loss 不下降 学习率不合适或模型问题 调整学习率、检查数据格式
Loss 爆炸 学习率过高或梯度问题 减小学习率、启用梯度裁剪
NaN 损失 数值不稳定 使用混合精度训练、检查数据
问题 原因 解决方案
------ ------ ---------
重复生成 解码策略问题 调整 temperature、启用 repetition_penalty
生成截断 最大长度限制 增加 max_new_tokens
回答格式错误 Prompt 不够清晰 优化 Prompt,添加示例
推理速度慢 模型过大或硬件不足 量化、使用更小模型
趋势 说明
------ ------
**更高效的方法** 如 LoRA+、DoRA 等新方法不断涌现
**多模态微调** 图像、语音、文本联合微调
**增量微调** 高效利用新数据,不遗忘旧知识
**自动化微调** AutoML + 微调,自动搜索最佳配置
**端侧微调** 在手机、IoT 设备上进行微调

|-----------------------------------|--------------------------------|--------------------------------------------------|-----------|--------|-------------|
| 问题类型 | 具体表现 | | | | |
| --------- | --------- | | | | |
| **领域知识不足** | 在医疗、法律、金融等专业领域,可能给出不够准确甚至错误的答案 | | | | |
| **企业认知缺失** | 不了解特定企业的产品、服务、内部流程 | | | | |
| **输出格式不稳定** | 难以严格遵循业务要求的输出格式(如 JSON、XML) | | | | |
| **幻觉问题** | 对不确定的问题可能编造看似合理但实际错误的答案 | | | | |
| **推理成本高** | 通用模型参数量巨大,部署和推理成本高昂 | | | | |
| 维度 | 提示工程 | RAG | 微调 | | |
| ------ | --------- | ----- | ------ | | |
| **实现难度** | 低 | 中 | 高 | | |
| **成本** | 低 | 中 | 高 | | |
| **训练时间** | 无 | 无 | 数小时到数天 | | |
| **知识更新** | 实时 | 实时 | 需重新训练 | | |
| **任务适配** | 通用任务 | 知识问答 | 复杂推理/格式 | | |
| **依赖数据量** | 少量示例 | 文档库 | 百条到数千条 | | |
| **控制力** | 弱 | 中 | 强 | | |
| **适用场景** | 通用对话、格式控制 | 知识库问答 | 领域适应、行为模式 | | |
| 参数 | 说明 | 常用值 | | | |
| ------ | ------ | -------- | | | |
| `r` | 低秩分解的秩,决定可训练参数量 | 4, 8, 16, 32 | | | |
| `lora_alpha` | 缩放因子,通常设为 r 的 2 倍 | 8, 16, 32, 64 | | | |
| `lora_dropout` | LoRA 层的 dropout 概率 | 0.0, 0.1 | | | |
| `target_modules` | 应用 LoRA 的模块 | q_proj, v_proj, k_proj, o_proj | | | |
| 维度 | LoRA | QLoRA | | | |
| ------ | ------ | ------- | | | |
| **模型精度** | 保持 FP16/BF16 | 量化到 INT4/INT8 | | | |
| **显存占用** | 7B: ~10GB | 7B: ~5GB | | | |
| **推理速度** | 正常 | 略慢(需反量化) | | | |
| **微调效果** | 接近全量微调 | 略低于 LoRA | | | |
| **硬件要求** | RTX 3090+ | RTX 2080+ | | | |
| 维度 | Adapter | LoRA | | | |
| ------ | --------- | ------ | | | |
| **结构** | 并联在 FFN 层 | 低秩分解替代 | | | |
| **位置** | 需指定插入位置 | 任意位置 | | | |
| **参数量** | ~3-5% | ~0.1-1% | | | |
| **推理延迟** | 略高(串行计算) | 无(可合并) | | | |
| **多任务** | 多适配器切换 | 多 LoRA 动态加载 | | | |
| 维度 | Prefix Tuning | Prompt Tuning | | | |
| ------ | --------------- | --------------- | | | |
| **提示位置** | 每层 | 仅输入层 | | | |
| **参数量** | 较大(k × layers) | 较小(k) | | | |
| **效果** | 更好 | 略逊 | | | |
| **适用场景** | 复杂任务 | 简单任务 | | | |

方法 可训练参数 GPU 显存 推理延迟 效果 实现复杂度
Full FT 100% ≥24GB 最优
LoRA 0.1-1% ≥10GB 接近全量
QLoRA 0.1-1% ≥6GB 略高 良好
Adapter 1-5% ≥12GB 略高 良好
Prefix 0.1-3% ≥10GB 中等
P-tuning v2 0.1-3% ≥10GB 良好
数据集 说明 适用场景
-------- ------ ---------
**Alpaca** Stanford Alpaca 团队生成 通用指令微调
**ShareGPT** 用户对话数据 对话系统
**FLAN** 谷歌指令数据集集合 指令遵循
** Dolly** Databricks 员工生成 领域适应
**OpenAssistant** 开源对话数据 对话系统
检查项 方法 处理方式
-------- ------ ---------
**重复数据** 哈希比对、相似度计算 去重
**噪声数据** 关键词过滤、长度分布分析 过滤
**格式错误** JSON 解析、schema 验证 修正或过滤
**隐私信息** 正则匹配、NER 检测 脱敏或过滤
**标注一致性** 多人标注、交叉验证 重新标注
类型 说明
------ ------
ROUGE-N N-gram 召回率(ROUGE-1, ROUGE-2)
ROUGE-L 最长公共子序列
ROUGE-S Skip-gram 召回率
维度 评估标准
------ ---------
**相关性** 回答是否切题
**准确性** 信息是否正确无误
**完整性** 是否完整回答问题
**专业性** 术语使用是否恰当
**流畅性** 表达是否通顺
方案 特点 适用场景
------ ------ ---------
**vLLM** PagedAttention,吞吐量高 高并发推理
**TGI** HuggingFace 官方,支持推理优化 通用部署
**Text Generation Inference** Rust 实现,高效 生产环境
**Ollama** 本地部署,简单易用 本地开发
**llama.cpp** 纯 C/C++,CPU 友好 边缘部署
问题 原因 解决方案
------ ------ ---------
过拟合 数据量太少或训练轮次过多 增加数据、使用正则、增加 dropout
灾难性遗忘 全量微调破坏预训练知识 使用 LoRA/QLoRA 或保留预训练数据
分布偏移 微调数据与预训练数据差异大 混合预训练数据一起训练
质量不稳定 数据标注不一致 重新标注、数据清洗
问题 原因 解决方案
------ ------ ---------
OOM(显存溢出) batch size 过大或序列太长 减小 batch size、启用 gradient checkpointing、使用 QLoRA
Loss 不下降 学习率不合适或模型问题 调整学习率、检查数据格式
Loss 爆炸 学习率过高或梯度问题 减小学习率、启用梯度裁剪
NaN 损失 数值不稳定 使用混合精度训练、检查数据
问题 原因 解决方案
------ ------ ---------
重复生成 解码策略问题 调整 temperature、启用 repetition_penalty
生成截断 最大长度限制 增加 max_new_tokens
回答格式错误 Prompt 不够清晰 优化 Prompt,添加示例
推理速度慢 模型过大或硬件不足 量化、使用更小模型
趋势 说明
------ ------
**更高效的方法** 如 LoRA+、DoRA 等新方法不断涌现
**多模态微调** 图像、语音、文本联合微调
**增量微调** 高效利用新数据,不遗忘旧知识
**自动化微调** AutoML + 微调,自动搜索最佳配置
**端侧微调** 在手机、IoT 设备上进行微调

1.2 什么是模型微调

模型微调是在预训练模型的基础上,使用特定领域或业务场景的数据进行额外训练,使模型学习该领域的知识、术语、推理模式,从而提升在目标任务上的表现。

┌─────────────────────────────────────────────────────────────┐
│ 模型微调核心原理 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 预训练阶段 │
│ ┌─────────────┐ │
│ │ 海量通用数据 │ → 通用语言能力 + 广泛知识 │
│ │ (Web, Books) │ │
│ └─────────────┘ │
│ ↓ │
│ 微调阶段 │
│ ┌─────────────┐ │
│ │ 领域/业务数据│ → 领域专业能力 + 业务适配 │
│ │ (Domain Data) │ │
│ └─────────────┘ │
│ ↓ │
│ ┌─────────────┐ │
│ │ 微调后模型 │ → 通用能力 + 领域专业能力 │
│ └─────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────────┐

│ 模型微调核心原理 │

├─────────────────────────────────────────────────────────────┤

│ │

│ 预训练阶段 │

│ ┌─────────────┐ │

│ │ 海量通用数据 │ → 通用语言能力 + 广泛知识 │

│ │ (Web, Books) │ │

│ └─────────────┘ │

│ ↓ │

│ 微调阶段 │

│ ┌─────────────┐ │

│ │ 领域/业务数据│ → 领域专业能力 + 业务适配 │

│ │ (Domain Data) │ │

│ └─────────────┘ │

│ ↓ │

│ ┌─────────────┐ │

│ │ 微调后模型 │ → 通用能力 + 领域专业能力 │

│ └─────────────┘ │

│ │

└─────────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────────┐
│ 模型微调核心原理 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 预训练阶段 │
│ ┌─────────────┐ │
│ │ 海量通用数据 │ → 通用语言能力 + 广泛知识 │
│ │ (Web, Books) │ │
│ └─────────────┘ │
│ ↓ │
│ 微调阶段 │
│ ┌─────────────┐ │
│ │ 领域/业务数据│ → 领域专业能力 + 业务适配 │
│ │ (Domain Data) │ │
│ └─────────────┘ │
│ ↓ │
│ ┌─────────────┐ │
│ │ 微调后模型 │ → 通用能力 + 领域专业能力 │
│ └─────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘

1.3 微调的典型应用场景

医疗健康领域:

  • 病历结构化提取
  • 医学文献检索与摘要
  • 智能问诊与健康咨询
  • 药物相互作用查询

法律领域:

  • 合同条款分析与风险识别
  • 法律文书智能生成
  • 案例检索与相似判决推荐
  • 法律咨询问答

金融领域:

  • 金融报告自动生成
  • 风险评估与信用分析
  • 智能投顾建议
  • 监管合规检查

企业专属场景:

  • 客服机器人定制
  • 产品文档智能问答
  • 内部知识库问答
  • 业务流程自动化

1.4 微调 vs 提示工程 vs RAG

在实际应用中,提升大模型效果有三条主要路径:提示工程(Prompt Engineering)、检索增强生成(RAG)和模型微调(Fine-tuning)。它们各有优劣,适用于不同场景:

|-----------------------------------|--------------------------------|--------------------------------------------------|-----------|--------|-------------|
| 问题类型 | 具体表现 | | | | |
| --------- | --------- | | | | |
| **领域知识不足** | 在医疗、法律、金融等专业领域,可能给出不够准确甚至错误的答案 | | | | |
| **企业认知缺失** | 不了解特定企业的产品、服务、内部流程 | | | | |
| **输出格式不稳定** | 难以严格遵循业务要求的输出格式(如 JSON、XML) | | | | |
| **幻觉问题** | 对不确定的问题可能编造看似合理但实际错误的答案 | | | | |
| **推理成本高** | 通用模型参数量巨大,部署和推理成本高昂 | | | | |
| 维度 | 提示工程 | RAG | 微调 | | |
| ------ | --------- | ----- | ------ | | |
| **实现难度** | 低 | 中 | 高 | | |
| **成本** | 低 | 中 | 高 | | |
| **训练时间** | 无 | 无 | 数小时到数天 | | |
| **知识更新** | 实时 | 实时 | 需重新训练 | | |
| **任务适配** | 通用任务 | 知识问答 | 复杂推理/格式 | | |
| **依赖数据量** | 少量示例 | 文档库 | 百条到数千条 | | |
| **控制力** | 弱 | 中 | 强 | | |
| **适用场景** | 通用对话、格式控制 | 知识库问答 | 领域适应、行为模式 | | |
| 参数 | 说明 | 常用值 | | | |
| ------ | ------ | -------- | | | |
| `r` | 低秩分解的秩,决定可训练参数量 | 4, 8, 16, 32 | | | |
| `lora_alpha` | 缩放因子,通常设为 r 的 2 倍 | 8, 16, 32, 64 | | | |
| `lora_dropout` | LoRA 层的 dropout 概率 | 0.0, 0.1 | | | |
| `target_modules` | 应用 LoRA 的模块 | q_proj, v_proj, k_proj, o_proj | | | |
| 维度 | LoRA | QLoRA | | | |
| ------ | ------ | ------- | | | |
| **模型精度** | 保持 FP16/BF16 | 量化到 INT4/INT8 | | | |
| **显存占用** | 7B: ~10GB | 7B: ~5GB | | | |
| **推理速度** | 正常 | 略慢(需反量化) | | | |
| **微调效果** | 接近全量微调 | 略低于 LoRA | | | |
| **硬件要求** | RTX 3090+ | RTX 2080+ | | | |
| 维度 | Adapter | LoRA | | | |
| ------ | --------- | ------ | | | |
| **结构** | 并联在 FFN 层 | 低秩分解替代 | | | |
| **位置** | 需指定插入位置 | 任意位置 | | | |
| **参数量** | ~3-5% | ~0.1-1% | | | |
| **推理延迟** | 略高(串行计算) | 无(可合并) | | | |
| **多任务** | 多适配器切换 | 多 LoRA 动态加载 | | | |
| 维度 | Prefix Tuning | Prompt Tuning | | | |
| ------ | --------------- | --------------- | | | |
| **提示位置** | 每层 | 仅输入层 | | | |
| **参数量** | 较大(k × layers) | 较小(k) | | | |
| **效果** | 更好 | 略逊 | | | |
| **适用场景** | 复杂任务 | 简单任务 | | | |

方法 可训练参数 GPU 显存 推理延迟 效果 实现复杂度
Full FT 100% ≥24GB 最优
LoRA 0.1-1% ≥10GB 接近全量
QLoRA 0.1-1% ≥6GB 略高 良好
Adapter 1-5% ≥12GB 略高 良好
Prefix 0.1-3% ≥10GB 中等
P-tuning v2 0.1-3% ≥10GB 良好
数据集 说明 适用场景
-------- ------ ---------
**Alpaca** Stanford Alpaca 团队生成 通用指令微调
**ShareGPT** 用户对话数据 对话系统
**FLAN** 谷歌指令数据集集合 指令遵循
** Dolly** Databricks 员工生成 领域适应
**OpenAssistant** 开源对话数据 对话系统
检查项 方法 处理方式
-------- ------ ---------
**重复数据** 哈希比对、相似度计算 去重
**噪声数据** 关键词过滤、长度分布分析 过滤
**格式错误** JSON 解析、schema 验证 修正或过滤
**隐私信息** 正则匹配、NER 检测 脱敏或过滤
**标注一致性** 多人标注、交叉验证 重新标注
类型 说明
------ ------
ROUGE-N N-gram 召回率(ROUGE-1, ROUGE-2)
ROUGE-L 最长公共子序列
ROUGE-S Skip-gram 召回率
维度 评估标准
------ ---------
**相关性** 回答是否切题
**准确性** 信息是否正确无误
**完整性** 是否完整回答问题
**专业性** 术语使用是否恰当
**流畅性** 表达是否通顺
方案 特点 适用场景
------ ------ ---------
**vLLM** PagedAttention,吞吐量高 高并发推理
**TGI** HuggingFace 官方,支持推理优化 通用部署
**Text Generation Inference** Rust 实现,高效 生产环境
**Ollama** 本地部署,简单易用 本地开发
**llama.cpp** 纯 C/C++,CPU 友好 边缘部署
问题 原因 解决方案
------ ------ ---------
过拟合 数据量太少或训练轮次过多 增加数据、使用正则、增加 dropout
灾难性遗忘 全量微调破坏预训练知识 使用 LoRA/QLoRA 或保留预训练数据
分布偏移 微调数据与预训练数据差异大 混合预训练数据一起训练
质量不稳定 数据标注不一致 重新标注、数据清洗
问题 原因 解决方案
------ ------ ---------
OOM(显存溢出) batch size 过大或序列太长 减小 batch size、启用 gradient checkpointing、使用 QLoRA
Loss 不下降 学习率不合适或模型问题 调整学习率、检查数据格式
Loss 爆炸 学习率过高或梯度问题 减小学习率、启用梯度裁剪
NaN 损失 数值不稳定 使用混合精度训练、检查数据
问题 原因 解决方案
------ ------ ---------
重复生成 解码策略问题 调整 temperature、启用 repetition_penalty
生成截断 最大长度限制 增加 max_new_tokens
回答格式错误 Prompt 不够清晰 优化 Prompt,添加示例
推理速度慢 模型过大或硬件不足 量化、使用更小模型
趋势 说明
------ ------
**更高效的方法** 如 LoRA+、DoRA 等新方法不断涌现
**多模态微调** 图像、语音、文本联合微调
**增量微调** 高效利用新数据,不遗忘旧知识
**自动化微调** AutoML + 微调,自动搜索最佳配置
**端侧微调** 在手机、IoT 设备上进行微调

|-----------------------------------|--------------------------------|--------------------------------------------------|-----------|--------|-------------|
| 问题类型 | 具体表现 | | | | |
| --------- | --------- | | | | |
| **领域知识不足** | 在医疗、法律、金融等专业领域,可能给出不够准确甚至错误的答案 | | | | |
| **企业认知缺失** | 不了解特定企业的产品、服务、内部流程 | | | | |
| **输出格式不稳定** | 难以严格遵循业务要求的输出格式(如 JSON、XML) | | | | |
| **幻觉问题** | 对不确定的问题可能编造看似合理但实际错误的答案 | | | | |
| **推理成本高** | 通用模型参数量巨大,部署和推理成本高昂 | | | | |
| 维度 | 提示工程 | RAG | 微调 | | |
| ------ | --------- | ----- | ------ | | |
| **实现难度** | 低 | 中 | 高 | | |
| **成本** | 低 | 中 | 高 | | |
| **训练时间** | 无 | 无 | 数小时到数天 | | |
| **知识更新** | 实时 | 实时 | 需重新训练 | | |
| **任务适配** | 通用任务 | 知识问答 | 复杂推理/格式 | | |
| **依赖数据量** | 少量示例 | 文档库 | 百条到数千条 | | |
| **控制力** | 弱 | 中 | 强 | | |
| **适用场景** | 通用对话、格式控制 | 知识库问答 | 领域适应、行为模式 | | |
| 参数 | 说明 | 常用值 | | | |
| ------ | ------ | -------- | | | |
| `r` | 低秩分解的秩,决定可训练参数量 | 4, 8, 16, 32 | | | |
| `lora_alpha` | 缩放因子,通常设为 r 的 2 倍 | 8, 16, 32, 64 | | | |
| `lora_dropout` | LoRA 层的 dropout 概率 | 0.0, 0.1 | | | |
| `target_modules` | 应用 LoRA 的模块 | q_proj, v_proj, k_proj, o_proj | | | |
| 维度 | LoRA | QLoRA | | | |
| ------ | ------ | ------- | | | |
| **模型精度** | 保持 FP16/BF16 | 量化到 INT4/INT8 | | | |
| **显存占用** | 7B: ~10GB | 7B: ~5GB | | | |
| **推理速度** | 正常 | 略慢(需反量化) | | | |
| **微调效果** | 接近全量微调 | 略低于 LoRA | | | |
| **硬件要求** | RTX 3090+ | RTX 2080+ | | | |
| 维度 | Adapter | LoRA | | | |
| ------ | --------- | ------ | | | |
| **结构** | 并联在 FFN 层 | 低秩分解替代 | | | |
| **位置** | 需指定插入位置 | 任意位置 | | | |
| **参数量** | ~3-5% | ~0.1-1% | | | |
| **推理延迟** | 略高(串行计算) | 无(可合并) | | | |
| **多任务** | 多适配器切换 | 多 LoRA 动态加载 | | | |
| 维度 | Prefix Tuning | Prompt Tuning | | | |
| ------ | --------------- | --------------- | | | |
| **提示位置** | 每层 | 仅输入层 | | | |
| **参数量** | 较大(k × layers) | 较小(k) | | | |
| **效果** | 更好 | 略逊 | | | |
| **适用场景** | 复杂任务 | 简单任务 | | | |

方法 可训练参数 GPU 显存 推理延迟 效果 实现复杂度
Full FT 100% ≥24GB 最优
LoRA 0.1-1% ≥10GB 接近全量
QLoRA 0.1-1% ≥6GB 略高 良好
Adapter 1-5% ≥12GB 略高 良好
Prefix 0.1-3% ≥10GB 中等
P-tuning v2 0.1-3% ≥10GB 良好
数据集 说明 适用场景
-------- ------ ---------
**Alpaca** Stanford Alpaca 团队生成 通用指令微调
**ShareGPT** 用户对话数据 对话系统
**FLAN** 谷歌指令数据集集合 指令遵循
** Dolly** Databricks 员工生成 领域适应
**OpenAssistant** 开源对话数据 对话系统
检查项 方法 处理方式
-------- ------ ---------
**重复数据** 哈希比对、相似度计算 去重
**噪声数据** 关键词过滤、长度分布分析 过滤
**格式错误** JSON 解析、schema 验证 修正或过滤
**隐私信息** 正则匹配、NER 检测 脱敏或过滤
**标注一致性** 多人标注、交叉验证 重新标注
类型 说明
------ ------
ROUGE-N N-gram 召回率(ROUGE-1, ROUGE-2)
ROUGE-L 最长公共子序列
ROUGE-S Skip-gram 召回率
维度 评估标准
------ ---------
**相关性** 回答是否切题
**准确性** 信息是否正确无误
**完整性** 是否完整回答问题
**专业性** 术语使用是否恰当
**流畅性** 表达是否通顺
方案 特点 适用场景
------ ------ ---------
**vLLM** PagedAttention,吞吐量高 高并发推理
**TGI** HuggingFace 官方,支持推理优化 通用部署
**Text Generation Inference** Rust 实现,高效 生产环境
**Ollama** 本地部署,简单易用 本地开发
**llama.cpp** 纯 C/C++,CPU 友好 边缘部署
问题 原因 解决方案
------ ------ ---------
过拟合 数据量太少或训练轮次过多 增加数据、使用正则、增加 dropout
灾难性遗忘 全量微调破坏预训练知识 使用 LoRA/QLoRA 或保留预训练数据
分布偏移 微调数据与预训练数据差异大 混合预训练数据一起训练
质量不稳定 数据标注不一致 重新标注、数据清洗
问题 原因 解决方案
------ ------ ---------
OOM(显存溢出) batch size 过大或序列太长 减小 batch size、启用 gradient checkpointing、使用 QLoRA
Loss 不下降 学习率不合适或模型问题 调整学习率、检查数据格式
Loss 爆炸 学习率过高或梯度问题 减小学习率、启用梯度裁剪
NaN 损失 数值不稳定 使用混合精度训练、检查数据
问题 原因 解决方案
------ ------ ---------
重复生成 解码策略问题 调整 temperature、启用 repetition_penalty
生成截断 最大长度限制 增加 max_new_tokens
回答格式错误 Prompt 不够清晰 优化 Prompt,添加示例
推理速度慢 模型过大或硬件不足 量化、使用更小模型
趋势 说明
------ ------
**更高效的方法** 如 LoRA+、DoRA 等新方法不断涌现
**多模态微调** 图像、语音、文本联合微调
**增量微调** 高效利用新数据,不遗忘旧知识
**自动化微调** AutoML + 微调,自动搜索最佳配置
**端侧微调** 在手机、IoT 设备上进行微调

|-----------------------------------|--------------------------------|--------------------------------------------------|-----------|--------|-------------|
| 问题类型 | 具体表现 | | | | |
| --------- | --------- | | | | |
| **领域知识不足** | 在医疗、法律、金融等专业领域,可能给出不够准确甚至错误的答案 | | | | |
| **企业认知缺失** | 不了解特定企业的产品、服务、内部流程 | | | | |
| **输出格式不稳定** | 难以严格遵循业务要求的输出格式(如 JSON、XML) | | | | |
| **幻觉问题** | 对不确定的问题可能编造看似合理但实际错误的答案 | | | | |
| **推理成本高** | 通用模型参数量巨大,部署和推理成本高昂 | | | | |
| 维度 | 提示工程 | RAG | 微调 | | |
| ------ | --------- | ----- | ------ | | |
| **实现难度** | 低 | 中 | 高 | | |
| **成本** | 低 | 中 | 高 | | |
| **训练时间** | 无 | 无 | 数小时到数天 | | |
| **知识更新** | 实时 | 实时 | 需重新训练 | | |
| **任务适配** | 通用任务 | 知识问答 | 复杂推理/格式 | | |
| **依赖数据量** | 少量示例 | 文档库 | 百条到数千条 | | |
| **控制力** | 弱 | 中 | 强 | | |
| **适用场景** | 通用对话、格式控制 | 知识库问答 | 领域适应、行为模式 | | |
| 参数 | 说明 | 常用值 | | | |
| ------ | ------ | -------- | | | |
| `r` | 低秩分解的秩,决定可训练参数量 | 4, 8, 16, 32 | | | |
| `lora_alpha` | 缩放因子,通常设为 r 的 2 倍 | 8, 16, 32, 64 | | | |
| `lora_dropout` | LoRA 层的 dropout 概率 | 0.0, 0.1 | | | |
| `target_modules` | 应用 LoRA 的模块 | q_proj, v_proj, k_proj, o_proj | | | |
| 维度 | LoRA | QLoRA | | | |
| ------ | ------ | ------- | | | |
| **模型精度** | 保持 FP16/BF16 | 量化到 INT4/INT8 | | | |
| **显存占用** | 7B: ~10GB | 7B: ~5GB | | | |
| **推理速度** | 正常 | 略慢(需反量化) | | | |
| **微调效果** | 接近全量微调 | 略低于 LoRA | | | |
| **硬件要求** | RTX 3090+ | RTX 2080+ | | | |
| 维度 | Adapter | LoRA | | | |
| ------ | --------- | ------ | | | |
| **结构** | 并联在 FFN 层 | 低秩分解替代 | | | |
| **位置** | 需指定插入位置 | 任意位置 | | | |
| **参数量** | ~3-5% | ~0.1-1% | | | |
| **推理延迟** | 略高(串行计算) | 无(可合并) | | | |
| **多任务** | 多适配器切换 | 多 LoRA 动态加载 | | | |
| 维度 | Prefix Tuning | Prompt Tuning | | | |
| ------ | --------------- | --------------- | | | |
| **提示位置** | 每层 | 仅输入层 | | | |
| **参数量** | 较大(k × layers) | 较小(k) | | | |
| **效果** | 更好 | 略逊 | | | |
| **适用场景** | 复杂任务 | 简单任务 | | | |

方法 可训练参数 GPU 显存 推理延迟 效果 实现复杂度
Full FT 100% ≥24GB 最优
LoRA 0.1-1% ≥10GB 接近全量
QLoRA 0.1-1% ≥6GB 略高 良好
Adapter 1-5% ≥12GB 略高 良好
Prefix 0.1-3% ≥10GB 中等
P-tuning v2 0.1-3% ≥10GB 良好
数据集 说明 适用场景
-------- ------ ---------
**Alpaca** Stanford Alpaca 团队生成 通用指令微调
**ShareGPT** 用户对话数据 对话系统
**FLAN** 谷歌指令数据集集合 指令遵循
** Dolly** Databricks 员工生成 领域适应
**OpenAssistant** 开源对话数据 对话系统
检查项 方法 处理方式
-------- ------ ---------
**重复数据** 哈希比对、相似度计算 去重
**噪声数据** 关键词过滤、长度分布分析 过滤
**格式错误** JSON 解析、schema 验证 修正或过滤
**隐私信息** 正则匹配、NER 检测 脱敏或过滤
**标注一致性** 多人标注、交叉验证 重新标注
类型 说明
------ ------
ROUGE-N N-gram 召回率(ROUGE-1, ROUGE-2)
ROUGE-L 最长公共子序列
ROUGE-S Skip-gram 召回率
维度 评估标准
------ ---------
**相关性** 回答是否切题
**准确性** 信息是否正确无误
**完整性** 是否完整回答问题
**专业性** 术语使用是否恰当
**流畅性** 表达是否通顺
方案 特点 适用场景
------ ------ ---------
**vLLM** PagedAttention,吞吐量高 高并发推理
**TGI** HuggingFace 官方,支持推理优化 通用部署
**Text Generation Inference** Rust 实现,高效 生产环境
**Ollama** 本地部署,简单易用 本地开发
**llama.cpp** 纯 C/C++,CPU 友好 边缘部署
问题 原因 解决方案
------ ------ ---------
过拟合 数据量太少或训练轮次过多 增加数据、使用正则、增加 dropout
灾难性遗忘 全量微调破坏预训练知识 使用 LoRA/QLoRA 或保留预训练数据
分布偏移 微调数据与预训练数据差异大 混合预训练数据一起训练
质量不稳定 数据标注不一致 重新标注、数据清洗
问题 原因 解决方案
------ ------ ---------
OOM(显存溢出) batch size 过大或序列太长 减小 batch size、启用 gradient checkpointing、使用 QLoRA
Loss 不下降 学习率不合适或模型问题 调整学习率、检查数据格式
Loss 爆炸 学习率过高或梯度问题 减小学习率、启用梯度裁剪
NaN 损失 数值不稳定 使用混合精度训练、检查数据
问题 原因 解决方案
------ ------ ---------
重复生成 解码策略问题 调整 temperature、启用 repetition_penalty
生成截断 最大长度限制 增加 max_new_tokens
回答格式错误 Prompt 不够清晰 优化 Prompt,添加示例
推理速度慢 模型过大或硬件不足 量化、使用更小模型
趋势 说明
------ ------
**更高效的方法** 如 LoRA+、DoRA 等新方法不断涌现
**多模态微调** 图像、语音、文本联合微调
**增量微调** 高效利用新数据,不遗忘旧知识
**自动化微调** AutoML + 微调,自动搜索最佳配置
**端侧微调** 在手机、IoT 设备上进行微调

|-----------------------------------|--------------------------------|--------------------------------------------------|-----------|--------|-------------|
| 问题类型 | 具体表现 | | | | |
| --------- | --------- | | | | |
| **领域知识不足** | 在医疗、法律、金融等专业领域,可能给出不够准确甚至错误的答案 | | | | |
| **企业认知缺失** | 不了解特定企业的产品、服务、内部流程 | | | | |
| **输出格式不稳定** | 难以严格遵循业务要求的输出格式(如 JSON、XML) | | | | |
| **幻觉问题** | 对不确定的问题可能编造看似合理但实际错误的答案 | | | | |
| **推理成本高** | 通用模型参数量巨大,部署和推理成本高昂 | | | | |
| 维度 | 提示工程 | RAG | 微调 | | |
| ------ | --------- | ----- | ------ | | |
| **实现难度** | 低 | 中 | 高 | | |
| **成本** | 低 | 中 | 高 | | |
| **训练时间** | 无 | 无 | 数小时到数天 | | |
| **知识更新** | 实时 | 实时 | 需重新训练 | | |
| **任务适配** | 通用任务 | 知识问答 | 复杂推理/格式 | | |
| **依赖数据量** | 少量示例 | 文档库 | 百条到数千条 | | |
| **控制力** | 弱 | 中 | 强 | | |
| **适用场景** | 通用对话、格式控制 | 知识库问答 | 领域适应、行为模式 | | |
| 参数 | 说明 | 常用值 | | | |
| ------ | ------ | -------- | | | |
| `r` | 低秩分解的秩,决定可训练参数量 | 4, 8, 16, 32 | | | |
| `lora_alpha` | 缩放因子,通常设为 r 的 2 倍 | 8, 16, 32, 64 | | | |
| `lora_dropout` | LoRA 层的 dropout 概率 | 0.0, 0.1 | | | |
| `target_modules` | 应用 LoRA 的模块 | q_proj, v_proj, k_proj, o_proj | | | |
| 维度 | LoRA | QLoRA | | | |
| ------ | ------ | ------- | | | |
| **模型精度** | 保持 FP16/BF16 | 量化到 INT4/INT8 | | | |
| **显存占用** | 7B: ~10GB | 7B: ~5GB | | | |
| **推理速度** | 正常 | 略慢(需反量化) | | | |
| **微调效果** | 接近全量微调 | 略低于 LoRA | | | |
| **硬件要求** | RTX 3090+ | RTX 2080+ | | | |
| 维度 | Adapter | LoRA | | | |
| ------ | --------- | ------ | | | |
| **结构** | 并联在 FFN 层 | 低秩分解替代 | | | |
| **位置** | 需指定插入位置 | 任意位置 | | | |
| **参数量** | ~3-5% | ~0.1-1% | | | |
| **推理延迟** | 略高(串行计算) | 无(可合并) | | | |
| **多任务** | 多适配器切换 | 多 LoRA 动态加载 | | | |
| 维度 | Prefix Tuning | Prompt Tuning | | | |
| ------ | --------------- | --------------- | | | |
| **提示位置** | 每层 | 仅输入层 | | | |
| **参数量** | 较大(k × layers) | 较小(k) | | | |
| **效果** | 更好 | 略逊 | | | |
| **适用场景** | 复杂任务 | 简单任务 | | | |

方法 可训练参数 GPU 显存 推理延迟 效果 实现复杂度
Full FT 100% ≥24GB 最优
LoRA 0.1-1% ≥10GB 接近全量
QLoRA 0.1-1% ≥6GB 略高 良好
Adapter 1-5% ≥12GB 略高 良好
Prefix 0.1-3% ≥10GB 中等
P-tuning v2 0.1-3% ≥10GB 良好
数据集 说明 适用场景
-------- ------ ---------
**Alpaca** Stanford Alpaca 团队生成 通用指令微调
**ShareGPT** 用户对话数据 对话系统
**FLAN** 谷歌指令数据集集合 指令遵循
** Dolly** Databricks 员工生成 领域适应
**OpenAssistant** 开源对话数据 对话系统
检查项 方法 处理方式
-------- ------ ---------
**重复数据** 哈希比对、相似度计算 去重
**噪声数据** 关键词过滤、长度分布分析 过滤
**格式错误** JSON 解析、schema 验证 修正或过滤
**隐私信息** 正则匹配、NER 检测 脱敏或过滤
**标注一致性** 多人标注、交叉验证 重新标注
类型 说明
------ ------
ROUGE-N N-gram 召回率(ROUGE-1, ROUGE-2)
ROUGE-L 最长公共子序列
ROUGE-S Skip-gram 召回率
维度 评估标准
------ ---------
**相关性** 回答是否切题
**准确性** 信息是否正确无误
**完整性** 是否完整回答问题
**专业性** 术语使用是否恰当
**流畅性** 表达是否通顺
方案 特点 适用场景
------ ------ ---------
**vLLM** PagedAttention,吞吐量高 高并发推理
**TGI** HuggingFace 官方,支持推理优化 通用部署
**Text Generation Inference** Rust 实现,高效 生产环境
**Ollama** 本地部署,简单易用 本地开发
**llama.cpp** 纯 C/C++,CPU 友好 边缘部署
问题 原因 解决方案
------ ------ ---------
过拟合 数据量太少或训练轮次过多 增加数据、使用正则、增加 dropout
灾难性遗忘 全量微调破坏预训练知识 使用 LoRA/QLoRA 或保留预训练数据
分布偏移 微调数据与预训练数据差异大 混合预训练数据一起训练
质量不稳定 数据标注不一致 重新标注、数据清洗
问题 原因 解决方案
------ ------ ---------
OOM(显存溢出) batch size 过大或序列太长 减小 batch size、启用 gradient checkpointing、使用 QLoRA
Loss 不下降 学习率不合适或模型问题 调整学习率、检查数据格式
Loss 爆炸 学习率过高或梯度问题 减小学习率、启用梯度裁剪
NaN 损失 数值不稳定 使用混合精度训练、检查数据
问题 原因 解决方案
------ ------ ---------
重复生成 解码策略问题 调整 temperature、启用 repetition_penalty
生成截断 最大长度限制 增加 max_new_tokens
回答格式错误 Prompt 不够清晰 优化 Prompt,添加示例
推理速度慢 模型过大或硬件不足 量化、使用更小模型
趋势 说明
------ ------
**更高效的方法** 如 LoRA+、DoRA 等新方法不断涌现
**多模态微调** 图像、语音、文本联合微调
**增量微调** 高效利用新数据,不遗忘旧知识
**自动化微调** AutoML + 微调,自动搜索最佳配置
**端侧微调** 在手机、IoT 设备上进行微调

|-----------------------------------|--------------------------------|--------------------------------------------------|-----------|--------|-------------|
| 问题类型 | 具体表现 | | | | |
| --------- | --------- | | | | |
| **领域知识不足** | 在医疗、法律、金融等专业领域,可能给出不够准确甚至错误的答案 | | | | |
| **企业认知缺失** | 不了解特定企业的产品、服务、内部流程 | | | | |
| **输出格式不稳定** | 难以严格遵循业务要求的输出格式(如 JSON、XML) | | | | |
| **幻觉问题** | 对不确定的问题可能编造看似合理但实际错误的答案 | | | | |
| **推理成本高** | 通用模型参数量巨大,部署和推理成本高昂 | | | | |
| 维度 | 提示工程 | RAG | 微调 | | |
| ------ | --------- | ----- | ------ | | |
| **实现难度** | 低 | 中 | 高 | | |
| **成本** | 低 | 中 | 高 | | |
| **训练时间** | 无 | 无 | 数小时到数天 | | |
| **知识更新** | 实时 | 实时 | 需重新训练 | | |
| **任务适配** | 通用任务 | 知识问答 | 复杂推理/格式 | | |
| **依赖数据量** | 少量示例 | 文档库 | 百条到数千条 | | |
| **控制力** | 弱 | 中 | 强 | | |
| **适用场景** | 通用对话、格式控制 | 知识库问答 | 领域适应、行为模式 | | |
| 参数 | 说明 | 常用值 | | | |
| ------ | ------ | -------- | | | |
| `r` | 低秩分解的秩,决定可训练参数量 | 4, 8, 16, 32 | | | |
| `lora_alpha` | 缩放因子,通常设为 r 的 2 倍 | 8, 16, 32, 64 | | | |
| `lora_dropout` | LoRA 层的 dropout 概率 | 0.0, 0.1 | | | |
| `target_modules` | 应用 LoRA 的模块 | q_proj, v_proj, k_proj, o_proj | | | |
| 维度 | LoRA | QLoRA | | | |
| ------ | ------ | ------- | | | |
| **模型精度** | 保持 FP16/BF16 | 量化到 INT4/INT8 | | | |
| **显存占用** | 7B: ~10GB | 7B: ~5GB | | | |
| **推理速度** | 正常 | 略慢(需反量化) | | | |
| **微调效果** | 接近全量微调 | 略低于 LoRA | | | |
| **硬件要求** | RTX 3090+ | RTX 2080+ | | | |
| 维度 | Adapter | LoRA | | | |
| ------ | --------- | ------ | | | |
| **结构** | 并联在 FFN 层 | 低秩分解替代 | | | |
| **位置** | 需指定插入位置 | 任意位置 | | | |
| **参数量** | ~3-5% | ~0.1-1% | | | |
| **推理延迟** | 略高(串行计算) | 无(可合并) | | | |
| **多任务** | 多适配器切换 | 多 LoRA 动态加载 | | | |
| 维度 | Prefix Tuning | Prompt Tuning | | | |
| ------ | --------------- | --------------- | | | |
| **提示位置** | 每层 | 仅输入层 | | | |
| **参数量** | 较大(k × layers) | 较小(k) | | | |
| **效果** | 更好 | 略逊 | | | |
| **适用场景** | 复杂任务 | 简单任务 | | | |

方法 可训练参数 GPU 显存 推理延迟 效果 实现复杂度
Full FT 100% ≥24GB 最优
LoRA 0.1-1% ≥10GB 接近全量
QLoRA 0.1-1% ≥6GB 略高 良好
Adapter 1-5% ≥12GB 略高 良好
Prefix 0.1-3% ≥10GB 中等
P-tuning v2 0.1-3% ≥10GB 良好
数据集 说明 适用场景
-------- ------ ---------
**Alpaca** Stanford Alpaca 团队生成 通用指令微调
**ShareGPT** 用户对话数据 对话系统
**FLAN** 谷歌指令数据集集合 指令遵循
** Dolly** Databricks 员工生成 领域适应
**OpenAssistant** 开源对话数据 对话系统
检查项 方法 处理方式
-------- ------ ---------
**重复数据** 哈希比对、相似度计算 去重
**噪声数据** 关键词过滤、长度分布分析 过滤
**格式错误** JSON 解析、schema 验证 修正或过滤
**隐私信息** 正则匹配、NER 检测 脱敏或过滤
**标注一致性** 多人标注、交叉验证 重新标注
类型 说明
------ ------
ROUGE-N N-gram 召回率(ROUGE-1, ROUGE-2)
ROUGE-L 最长公共子序列
ROUGE-S Skip-gram 召回率
维度 评估标准
------ ---------
**相关性** 回答是否切题
**准确性** 信息是否正确无误
**完整性** 是否完整回答问题
**专业性** 术语使用是否恰当
**流畅性** 表达是否通顺
方案 特点 适用场景
------ ------ ---------
**vLLM** PagedAttention,吞吐量高 高并发推理
**TGI** HuggingFace 官方,支持推理优化 通用部署
**Text Generation Inference** Rust 实现,高效 生产环境
**Ollama** 本地部署,简单易用 本地开发
**llama.cpp** 纯 C/C++,CPU 友好 边缘部署
问题 原因 解决方案
------ ------ ---------
过拟合 数据量太少或训练轮次过多 增加数据、使用正则、增加 dropout
灾难性遗忘 全量微调破坏预训练知识 使用 LoRA/QLoRA 或保留预训练数据
分布偏移 微调数据与预训练数据差异大 混合预训练数据一起训练
质量不稳定 数据标注不一致 重新标注、数据清洗
问题 原因 解决方案
------ ------ ---------
OOM(显存溢出) batch size 过大或序列太长 减小 batch size、启用 gradient checkpointing、使用 QLoRA
Loss 不下降 学习率不合适或模型问题 调整学习率、检查数据格式
Loss 爆炸 学习率过高或梯度问题 减小学习率、启用梯度裁剪
NaN 损失 数值不稳定 使用混合精度训练、检查数据
问题 原因 解决方案
------ ------ ---------
重复生成 解码策略问题 调整 temperature、启用 repetition_penalty
生成截断 最大长度限制 增加 max_new_tokens
回答格式错误 Prompt 不够清晰 优化 Prompt,添加示例
推理速度慢 模型过大或硬件不足 量化、使用更小模型
趋势 说明
------ ------
**更高效的方法** 如 LoRA+、DoRA 等新方法不断涌现
**多模态微调** 图像、语音、文本联合微调
**增量微调** 高效利用新数据,不遗忘旧知识
**自动化微调** AutoML + 微调,自动搜索最佳配置
**端侧微调** 在手机、IoT 设备上进行微调

|-----------------------------------|--------------------------------|--------------------------------------------------|-----------|--------|-------------|
| 问题类型 | 具体表现 | | | | |
| --------- | --------- | | | | |
| **领域知识不足** | 在医疗、法律、金融等专业领域,可能给出不够准确甚至错误的答案 | | | | |
| **企业认知缺失** | 不了解特定企业的产品、服务、内部流程 | | | | |
| **输出格式不稳定** | 难以严格遵循业务要求的输出格式(如 JSON、XML) | | | | |
| **幻觉问题** | 对不确定的问题可能编造看似合理但实际错误的答案 | | | | |
| **推理成本高** | 通用模型参数量巨大,部署和推理成本高昂 | | | | |
| 维度 | 提示工程 | RAG | 微调 | | |
| ------ | --------- | ----- | ------ | | |
| **实现难度** | 低 | 中 | 高 | | |
| **成本** | 低 | 中 | 高 | | |
| **训练时间** | 无 | 无 | 数小时到数天 | | |
| **知识更新** | 实时 | 实时 | 需重新训练 | | |
| **任务适配** | 通用任务 | 知识问答 | 复杂推理/格式 | | |
| **依赖数据量** | 少量示例 | 文档库 | 百条到数千条 | | |
| **控制力** | 弱 | 中 | 强 | | |
| **适用场景** | 通用对话、格式控制 | 知识库问答 | 领域适应、行为模式 | | |
| 参数 | 说明 | 常用值 | | | |
| ------ | ------ | -------- | | | |
| `r` | 低秩分解的秩,决定可训练参数量 | 4, 8, 16, 32 | | | |
| `lora_alpha` | 缩放因子,通常设为 r 的 2 倍 | 8, 16, 32, 64 | | | |
| `lora_dropout` | LoRA 层的 dropout 概率 | 0.0, 0.1 | | | |
| `target_modules` | 应用 LoRA 的模块 | q_proj, v_proj, k_proj, o_proj | | | |
| 维度 | LoRA | QLoRA | | | |
| ------ | ------ | ------- | | | |
| **模型精度** | 保持 FP16/BF16 | 量化到 INT4/INT8 | | | |
| **显存占用** | 7B: ~10GB | 7B: ~5GB | | | |
| **推理速度** | 正常 | 略慢(需反量化) | | | |
| **微调效果** | 接近全量微调 | 略低于 LoRA | | | |
| **硬件要求** | RTX 3090+ | RTX 2080+ | | | |
| 维度 | Adapter | LoRA | | | |
| ------ | --------- | ------ | | | |
| **结构** | 并联在 FFN 层 | 低秩分解替代 | | | |
| **位置** | 需指定插入位置 | 任意位置 | | | |
| **参数量** | ~3-5% | ~0.1-1% | | | |
| **推理延迟** | 略高(串行计算) | 无(可合并) | | | |
| **多任务** | 多适配器切换 | 多 LoRA 动态加载 | | | |
| 维度 | Prefix Tuning | Prompt Tuning | | | |
| ------ | --------------- | --------------- | | | |
| **提示位置** | 每层 | 仅输入层 | | | |
| **参数量** | 较大(k × layers) | 较小(k) | | | |
| **效果** | 更好 | 略逊 | | | |
| **适用场景** | 复杂任务 | 简单任务 | | | |

方法 可训练参数 GPU 显存 推理延迟 效果 实现复杂度
Full FT 100% ≥24GB 最优
LoRA 0.1-1% ≥10GB 接近全量
QLoRA 0.1-1% ≥6GB 略高 良好
Adapter 1-5% ≥12GB 略高 良好
Prefix 0.1-3% ≥10GB 中等
P-tuning v2 0.1-3% ≥10GB 良好
数据集 说明 适用场景
-------- ------ ---------
**Alpaca** Stanford Alpaca 团队生成 通用指令微调
**ShareGPT** 用户对话数据 对话系统
**FLAN** 谷歌指令数据集集合 指令遵循
** Dolly** Databricks 员工生成 领域适应
**OpenAssistant** 开源对话数据 对话系统
检查项 方法 处理方式
-------- ------ ---------
**重复数据** 哈希比对、相似度计算 去重
**噪声数据** 关键词过滤、长度分布分析 过滤
**格式错误** JSON 解析、schema 验证 修正或过滤
**隐私信息** 正则匹配、NER 检测 脱敏或过滤
**标注一致性** 多人标注、交叉验证 重新标注
类型 说明
------ ------
ROUGE-N N-gram 召回率(ROUGE-1, ROUGE-2)
ROUGE-L 最长公共子序列
ROUGE-S Skip-gram 召回率
维度 评估标准
------ ---------
**相关性** 回答是否切题
**准确性** 信息是否正确无误
**完整性** 是否完整回答问题
**专业性** 术语使用是否恰当
**流畅性** 表达是否通顺
方案 特点 适用场景
------ ------ ---------
**vLLM** PagedAttention,吞吐量高 高并发推理
**TGI** HuggingFace 官方,支持推理优化 通用部署
**Text Generation Inference** Rust 实现,高效 生产环境
**Ollama** 本地部署,简单易用 本地开发
**llama.cpp** 纯 C/C++,CPU 友好 边缘部署
问题 原因 解决方案
------ ------ ---------
过拟合 数据量太少或训练轮次过多 增加数据、使用正则、增加 dropout
灾难性遗忘 全量微调破坏预训练知识 使用 LoRA/QLoRA 或保留预训练数据
分布偏移 微调数据与预训练数据差异大 混合预训练数据一起训练
质量不稳定 数据标注不一致 重新标注、数据清洗
问题 原因 解决方案
------ ------ ---------
OOM(显存溢出) batch size 过大或序列太长 减小 batch size、启用 gradient checkpointing、使用 QLoRA
Loss 不下降 学习率不合适或模型问题 调整学习率、检查数据格式
Loss 爆炸 学习率过高或梯度问题 减小学习率、启用梯度裁剪
NaN 损失 数值不稳定 使用混合精度训练、检查数据
问题 原因 解决方案
------ ------ ---------
重复生成 解码策略问题 调整 temperature、启用 repetition_penalty
生成截断 最大长度限制 增加 max_new_tokens
回答格式错误 Prompt 不够清晰 优化 Prompt,添加示例
推理速度慢 模型过大或硬件不足 量化、使用更小模型
趋势 说明
------ ------
**更高效的方法** 如 LoRA+、DoRA 等新方法不断涌现
**多模态微调** 图像、语音、文本联合微调
**增量微调** 高效利用新数据,不遗忘旧知识
**自动化微调** AutoML + 微调,自动搜索最佳配置
**端侧微调** 在手机、IoT 设备上进行微调

|-----------------------------------|--------------------------------|--------------------------------------------------|-----------|--------|-------------|
| 问题类型 | 具体表现 | | | | |
| --------- | --------- | | | | |
| **领域知识不足** | 在医疗、法律、金融等专业领域,可能给出不够准确甚至错误的答案 | | | | |
| **企业认知缺失** | 不了解特定企业的产品、服务、内部流程 | | | | |
| **输出格式不稳定** | 难以严格遵循业务要求的输出格式(如 JSON、XML) | | | | |
| **幻觉问题** | 对不确定的问题可能编造看似合理但实际错误的答案 | | | | |
| **推理成本高** | 通用模型参数量巨大,部署和推理成本高昂 | | | | |
| 维度 | 提示工程 | RAG | 微调 | | |
| ------ | --------- | ----- | ------ | | |
| **实现难度** | 低 | 中 | 高 | | |
| **成本** | 低 | 中 | 高 | | |
| **训练时间** | 无 | 无 | 数小时到数天 | | |
| **知识更新** | 实时 | 实时 | 需重新训练 | | |
| **任务适配** | 通用任务 | 知识问答 | 复杂推理/格式 | | |
| **依赖数据量** | 少量示例 | 文档库 | 百条到数千条 | | |
| **控制力** | 弱 | 中 | 强 | | |
| **适用场景** | 通用对话、格式控制 | 知识库问答 | 领域适应、行为模式 | | |
| 参数 | 说明 | 常用值 | | | |
| ------ | ------ | -------- | | | |
| `r` | 低秩分解的秩,决定可训练参数量 | 4, 8, 16, 32 | | | |
| `lora_alpha` | 缩放因子,通常设为 r 的 2 倍 | 8, 16, 32, 64 | | | |
| `lora_dropout` | LoRA 层的 dropout 概率 | 0.0, 0.1 | | | |
| `target_modules` | 应用 LoRA 的模块 | q_proj, v_proj, k_proj, o_proj | | | |
| 维度 | LoRA | QLoRA | | | |
| ------ | ------ | ------- | | | |
| **模型精度** | 保持 FP16/BF16 | 量化到 INT4/INT8 | | | |
| **显存占用** | 7B: ~10GB | 7B: ~5GB | | | |
| **推理速度** | 正常 | 略慢(需反量化) | | | |
| **微调效果** | 接近全量微调 | 略低于 LoRA | | | |
| **硬件要求** | RTX 3090+ | RTX 2080+ | | | |
| 维度 | Adapter | LoRA | | | |
| ------ | --------- | ------ | | | |
| **结构** | 并联在 FFN 层 | 低秩分解替代 | | | |
| **位置** | 需指定插入位置 | 任意位置 | | | |
| **参数量** | ~3-5% | ~0.1-1% | | | |
| **推理延迟** | 略高(串行计算) | 无(可合并) | | | |
| **多任务** | 多适配器切换 | 多 LoRA 动态加载 | | | |
| 维度 | Prefix Tuning | Prompt Tuning | | | |
| ------ | --------------- | --------------- | | | |
| **提示位置** | 每层 | 仅输入层 | | | |
| **参数量** | 较大(k × layers) | 较小(k) | | | |
| **效果** | 更好 | 略逊 | | | |
| **适用场景** | 复杂任务 | 简单任务 | | | |

方法 可训练参数 GPU 显存 推理延迟 效果 实现复杂度
Full FT 100% ≥24GB 最优
LoRA 0.1-1% ≥10GB 接近全量
QLoRA 0.1-1% ≥6GB 略高 良好
Adapter 1-5% ≥12GB 略高 良好
Prefix 0.1-3% ≥10GB 中等
P-tuning v2 0.1-3% ≥10GB 良好
数据集 说明 适用场景
-------- ------ ---------
**Alpaca** Stanford Alpaca 团队生成 通用指令微调
**ShareGPT** 用户对话数据 对话系统
**FLAN** 谷歌指令数据集集合 指令遵循
** Dolly** Databricks 员工生成 领域适应
**OpenAssistant** 开源对话数据 对话系统
检查项 方法 处理方式
-------- ------ ---------
**重复数据** 哈希比对、相似度计算 去重
**噪声数据** 关键词过滤、长度分布分析 过滤
**格式错误** JSON 解析、schema 验证 修正或过滤
**隐私信息** 正则匹配、NER 检测 脱敏或过滤
**标注一致性** 多人标注、交叉验证 重新标注
类型 说明
------ ------
ROUGE-N N-gram 召回率(ROUGE-1, ROUGE-2)
ROUGE-L 最长公共子序列
ROUGE-S Skip-gram 召回率
维度 评估标准
------ ---------
**相关性** 回答是否切题
**准确性** 信息是否正确无误
**完整性** 是否完整回答问题
**专业性** 术语使用是否恰当
**流畅性** 表达是否通顺
方案 特点 适用场景
------ ------ ---------
**vLLM** PagedAttention,吞吐量高 高并发推理
**TGI** HuggingFace 官方,支持推理优化 通用部署
**Text Generation Inference** Rust 实现,高效 生产环境
**Ollama** 本地部署,简单易用 本地开发
**llama.cpp** 纯 C/C++,CPU 友好 边缘部署
问题 原因 解决方案
------ ------ ---------
过拟合 数据量太少或训练轮次过多 增加数据、使用正则、增加 dropout
灾难性遗忘 全量微调破坏预训练知识 使用 LoRA/QLoRA 或保留预训练数据
分布偏移 微调数据与预训练数据差异大 混合预训练数据一起训练
质量不稳定 数据标注不一致 重新标注、数据清洗
问题 原因 解决方案
------ ------ ---------
OOM(显存溢出) batch size 过大或序列太长 减小 batch size、启用 gradient checkpointing、使用 QLoRA
Loss 不下降 学习率不合适或模型问题 调整学习率、检查数据格式
Loss 爆炸 学习率过高或梯度问题 减小学习率、启用梯度裁剪
NaN 损失 数值不稳定 使用混合精度训练、检查数据
问题 原因 解决方案
------ ------ ---------
重复生成 解码策略问题 调整 temperature、启用 repetition_penalty
生成截断 最大长度限制 增加 max_new_tokens
回答格式错误 Prompt 不够清晰 优化 Prompt,添加示例
推理速度慢 模型过大或硬件不足 量化、使用更小模型
趋势 说明
------ ------
**更高效的方法** 如 LoRA+、DoRA 等新方法不断涌现
**多模态微调** 图像、语音、文本联合微调
**增量微调** 高效利用新数据,不遗忘旧知识
**自动化微调** AutoML + 微调,自动搜索最佳配置
**端侧微调** 在手机、IoT 设备上进行微调

|-----------------------------------|--------------------------------|--------------------------------------------------|-----------|--------|-------------|
| 问题类型 | 具体表现 | | | | |
| --------- | --------- | | | | |
| **领域知识不足** | 在医疗、法律、金融等专业领域,可能给出不够准确甚至错误的答案 | | | | |
| **企业认知缺失** | 不了解特定企业的产品、服务、内部流程 | | | | |
| **输出格式不稳定** | 难以严格遵循业务要求的输出格式(如 JSON、XML) | | | | |
| **幻觉问题** | 对不确定的问题可能编造看似合理但实际错误的答案 | | | | |
| **推理成本高** | 通用模型参数量巨大,部署和推理成本高昂 | | | | |
| 维度 | 提示工程 | RAG | 微调 | | |
| ------ | --------- | ----- | ------ | | |
| **实现难度** | 低 | 中 | 高 | | |
| **成本** | 低 | 中 | 高 | | |
| **训练时间** | 无 | 无 | 数小时到数天 | | |
| **知识更新** | 实时 | 实时 | 需重新训练 | | |
| **任务适配** | 通用任务 | 知识问答 | 复杂推理/格式 | | |
| **依赖数据量** | 少量示例 | 文档库 | 百条到数千条 | | |
| **控制力** | 弱 | 中 | 强 | | |
| **适用场景** | 通用对话、格式控制 | 知识库问答 | 领域适应、行为模式 | | |
| 参数 | 说明 | 常用值 | | | |
| ------ | ------ | -------- | | | |
| `r` | 低秩分解的秩,决定可训练参数量 | 4, 8, 16, 32 | | | |
| `lora_alpha` | 缩放因子,通常设为 r 的 2 倍 | 8, 16, 32, 64 | | | |
| `lora_dropout` | LoRA 层的 dropout 概率 | 0.0, 0.1 | | | |
| `target_modules` | 应用 LoRA 的模块 | q_proj, v_proj, k_proj, o_proj | | | |
| 维度 | LoRA | QLoRA | | | |
| ------ | ------ | ------- | | | |
| **模型精度** | 保持 FP16/BF16 | 量化到 INT4/INT8 | | | |
| **显存占用** | 7B: ~10GB | 7B: ~5GB | | | |
| **推理速度** | 正常 | 略慢(需反量化) | | | |
| **微调效果** | 接近全量微调 | 略低于 LoRA | | | |
| **硬件要求** | RTX 3090+ | RTX 2080+ | | | |
| 维度 | Adapter | LoRA | | | |
| ------ | --------- | ------ | | | |
| **结构** | 并联在 FFN 层 | 低秩分解替代 | | | |
| **位置** | 需指定插入位置 | 任意位置 | | | |
| **参数量** | ~3-5% | ~0.1-1% | | | |
| **推理延迟** | 略高(串行计算) | 无(可合并) | | | |
| **多任务** | 多适配器切换 | 多 LoRA 动态加载 | | | |
| 维度 | Prefix Tuning | Prompt Tuning | | | |
| ------ | --------------- | --------------- | | | |
| **提示位置** | 每层 | 仅输入层 | | | |
| **参数量** | 较大(k × layers) | 较小(k) | | | |
| **效果** | 更好 | 略逊 | | | |
| **适用场景** | 复杂任务 | 简单任务 | | | |

方法 可训练参数 GPU 显存 推理延迟 效果 实现复杂度
Full FT 100% ≥24GB 最优
LoRA 0.1-1% ≥10GB 接近全量
QLoRA 0.1-1% ≥6GB 略高 良好
Adapter 1-5% ≥12GB 略高 良好
Prefix 0.1-3% ≥10GB 中等
P-tuning v2 0.1-3% ≥10GB 良好
数据集 说明 适用场景
-------- ------ ---------
**Alpaca** Stanford Alpaca 团队生成 通用指令微调
**ShareGPT** 用户对话数据 对话系统
**FLAN** 谷歌指令数据集集合 指令遵循
** Dolly** Databricks 员工生成 领域适应
**OpenAssistant** 开源对话数据 对话系统
检查项 方法 处理方式
-------- ------ ---------
**重复数据** 哈希比对、相似度计算 去重
**噪声数据** 关键词过滤、长度分布分析 过滤
**格式错误** JSON 解析、schema 验证 修正或过滤
**隐私信息** 正则匹配、NER 检测 脱敏或过滤
**标注一致性** 多人标注、交叉验证 重新标注
类型 说明
------ ------
ROUGE-N N-gram 召回率(ROUGE-1, ROUGE-2)
ROUGE-L 最长公共子序列
ROUGE-S Skip-gram 召回率
维度 评估标准
------ ---------
**相关性** 回答是否切题
**准确性** 信息是否正确无误
**完整性** 是否完整回答问题
**专业性** 术语使用是否恰当
**流畅性** 表达是否通顺
方案 特点 适用场景
------ ------ ---------
**vLLM** PagedAttention,吞吐量高 高并发推理
**TGI** HuggingFace 官方,支持推理优化 通用部署
**Text Generation Inference** Rust 实现,高效 生产环境
**Ollama** 本地部署,简单易用 本地开发
**llama.cpp** 纯 C/C++,CPU 友好 边缘部署
问题 原因 解决方案
------ ------ ---------
过拟合 数据量太少或训练轮次过多 增加数据、使用正则、增加 dropout
灾难性遗忘 全量微调破坏预训练知识 使用 LoRA/QLoRA 或保留预训练数据
分布偏移 微调数据与预训练数据差异大 混合预训练数据一起训练
质量不稳定 数据标注不一致 重新标注、数据清洗
问题 原因 解决方案
------ ------ ---------
OOM(显存溢出) batch size 过大或序列太长 减小 batch size、启用 gradient checkpointing、使用 QLoRA
Loss 不下降 学习率不合适或模型问题 调整学习率、检查数据格式
Loss 爆炸 学习率过高或梯度问题 减小学习率、启用梯度裁剪
NaN 损失 数值不稳定 使用混合精度训练、检查数据
问题 原因 解决方案
------ ------ ---------
重复生成 解码策略问题 调整 temperature、启用 repetition_penalty
生成截断 最大长度限制 增加 max_new_tokens
回答格式错误 Prompt 不够清晰 优化 Prompt,添加示例
推理速度慢 模型过大或硬件不足 量化、使用更小模型
趋势 说明
------ ------
**更高效的方法** 如 LoRA+、DoRA 等新方法不断涌现
**多模态微调** 图像、语音、文本联合微调
**增量微调** 高效利用新数据,不遗忘旧知识
**自动化微调** AutoML + 微调,自动搜索最佳配置
**端侧微调** 在手机、IoT 设备上进行微调

|-----------------------------------|--------------------------------|--------------------------------------------------|-----------|--------|-------------|
| 问题类型 | 具体表现 | | | | |
| --------- | --------- | | | | |
| **领域知识不足** | 在医疗、法律、金融等专业领域,可能给出不够准确甚至错误的答案 | | | | |
| **企业认知缺失** | 不了解特定企业的产品、服务、内部流程 | | | | |
| **输出格式不稳定** | 难以严格遵循业务要求的输出格式(如 JSON、XML) | | | | |
| **幻觉问题** | 对不确定的问题可能编造看似合理但实际错误的答案 | | | | |
| **推理成本高** | 通用模型参数量巨大,部署和推理成本高昂 | | | | |
| 维度 | 提示工程 | RAG | 微调 | | |
| ------ | --------- | ----- | ------ | | |
| **实现难度** | 低 | 中 | 高 | | |
| **成本** | 低 | 中 | 高 | | |
| **训练时间** | 无 | 无 | 数小时到数天 | | |
| **知识更新** | 实时 | 实时 | 需重新训练 | | |
| **任务适配** | 通用任务 | 知识问答 | 复杂推理/格式 | | |
| **依赖数据量** | 少量示例 | 文档库 | 百条到数千条 | | |
| **控制力** | 弱 | 中 | 强 | | |
| **适用场景** | 通用对话、格式控制 | 知识库问答 | 领域适应、行为模式 | | |
| 参数 | 说明 | 常用值 | | | |
| ------ | ------ | -------- | | | |
| `r` | 低秩分解的秩,决定可训练参数量 | 4, 8, 16, 32 | | | |
| `lora_alpha` | 缩放因子,通常设为 r 的 2 倍 | 8, 16, 32, 64 | | | |
| `lora_dropout` | LoRA 层的 dropout 概率 | 0.0, 0.1 | | | |
| `target_modules` | 应用 LoRA 的模块 | q_proj, v_proj, k_proj, o_proj | | | |
| 维度 | LoRA | QLoRA | | | |
| ------ | ------ | ------- | | | |
| **模型精度** | 保持 FP16/BF16 | 量化到 INT4/INT8 | | | |
| **显存占用** | 7B: ~10GB | 7B: ~5GB | | | |
| **推理速度** | 正常 | 略慢(需反量化) | | | |
| **微调效果** | 接近全量微调 | 略低于 LoRA | | | |
| **硬件要求** | RTX 3090+ | RTX 2080+ | | | |
| 维度 | Adapter | LoRA | | | |
| ------ | --------- | ------ | | | |
| **结构** | 并联在 FFN 层 | 低秩分解替代 | | | |
| **位置** | 需指定插入位置 | 任意位置 | | | |
| **参数量** | ~3-5% | ~0.1-1% | | | |
| **推理延迟** | 略高(串行计算) | 无(可合并) | | | |
| **多任务** | 多适配器切换 | 多 LoRA 动态加载 | | | |
| 维度 | Prefix Tuning | Prompt Tuning | | | |
| ------ | --------------- | --------------- | | | |
| **提示位置** | 每层 | 仅输入层 | | | |
| **参数量** | 较大(k × layers) | 较小(k) | | | |
| **效果** | 更好 | 略逊 | | | |
| **适用场景** | 复杂任务 | 简单任务 | | | |

方法 可训练参数 GPU 显存 推理延迟 效果 实现复杂度
Full FT 100% ≥24GB 最优
LoRA 0.1-1% ≥10GB 接近全量
QLoRA 0.1-1% ≥6GB 略高 良好
Adapter 1-5% ≥12GB 略高 良好
Prefix 0.1-3% ≥10GB 中等
P-tuning v2 0.1-3% ≥10GB 良好
数据集 说明 适用场景
-------- ------ ---------
**Alpaca** Stanford Alpaca 团队生成 通用指令微调
**ShareGPT** 用户对话数据 对话系统
**FLAN** 谷歌指令数据集集合 指令遵循
** Dolly** Databricks 员工生成 领域适应
**OpenAssistant** 开源对话数据 对话系统
检查项 方法 处理方式
-------- ------ ---------
**重复数据** 哈希比对、相似度计算 去重
**噪声数据** 关键词过滤、长度分布分析 过滤
**格式错误** JSON 解析、schema 验证 修正或过滤
**隐私信息** 正则匹配、NER 检测 脱敏或过滤
**标注一致性** 多人标注、交叉验证 重新标注
类型 说明
------ ------
ROUGE-N N-gram 召回率(ROUGE-1, ROUGE-2)
ROUGE-L 最长公共子序列
ROUGE-S Skip-gram 召回率
维度 评估标准
------ ---------
**相关性** 回答是否切题
**准确性** 信息是否正确无误
**完整性** 是否完整回答问题
**专业性** 术语使用是否恰当
**流畅性** 表达是否通顺
方案 特点 适用场景
------ ------ ---------
**vLLM** PagedAttention,吞吐量高 高并发推理
**TGI** HuggingFace 官方,支持推理优化 通用部署
**Text Generation Inference** Rust 实现,高效 生产环境
**Ollama** 本地部署,简单易用 本地开发
**llama.cpp** 纯 C/C++,CPU 友好 边缘部署
问题 原因 解决方案
------ ------ ---------
过拟合 数据量太少或训练轮次过多 增加数据、使用正则、增加 dropout
灾难性遗忘 全量微调破坏预训练知识 使用 LoRA/QLoRA 或保留预训练数据
分布偏移 微调数据与预训练数据差异大 混合预训练数据一起训练
质量不稳定 数据标注不一致 重新标注、数据清洗
问题 原因 解决方案
------ ------ ---------
OOM(显存溢出) batch size 过大或序列太长 减小 batch size、启用 gradient checkpointing、使用 QLoRA
Loss 不下降 学习率不合适或模型问题 调整学习率、检查数据格式
Loss 爆炸 学习率过高或梯度问题 减小学习率、启用梯度裁剪
NaN 损失 数值不稳定 使用混合精度训练、检查数据
问题 原因 解决方案
------ ------ ---------
重复生成 解码策略问题 调整 temperature、启用 repetition_penalty
生成截断 最大长度限制 增加 max_new_tokens
回答格式错误 Prompt 不够清晰 优化 Prompt,添加示例
推理速度慢 模型过大或硬件不足 量化、使用更小模型
趋势 说明
------ ------
**更高效的方法** 如 LoRA+、DoRA 等新方法不断涌现
**多模态微调** 图像、语音、文本联合微调
**增量微调** 高效利用新数据,不遗忘旧知识
**自动化微调** AutoML + 微调,自动搜索最佳配置
**端侧微调** 在手机、IoT 设备上进行微调

|-----------------------------------|--------------------------------|--------------------------------------------------|-----------|--------|-------------|
| 问题类型 | 具体表现 | | | | |
| --------- | --------- | | | | |
| **领域知识不足** | 在医疗、法律、金融等专业领域,可能给出不够准确甚至错误的答案 | | | | |
| **企业认知缺失** | 不了解特定企业的产品、服务、内部流程 | | | | |
| **输出格式不稳定** | 难以严格遵循业务要求的输出格式(如 JSON、XML) | | | | |
| **幻觉问题** | 对不确定的问题可能编造看似合理但实际错误的答案 | | | | |
| **推理成本高** | 通用模型参数量巨大,部署和推理成本高昂 | | | | |
| 维度 | 提示工程 | RAG | 微调 | | |
| ------ | --------- | ----- | ------ | | |
| **实现难度** | 低 | 中 | 高 | | |
| **成本** | 低 | 中 | 高 | | |
| **训练时间** | 无 | 无 | 数小时到数天 | | |
| **知识更新** | 实时 | 实时 | 需重新训练 | | |
| **任务适配** | 通用任务 | 知识问答 | 复杂推理/格式 | | |
| **依赖数据量** | 少量示例 | 文档库 | 百条到数千条 | | |
| **控制力** | 弱 | 中 | 强 | | |
| **适用场景** | 通用对话、格式控制 | 知识库问答 | 领域适应、行为模式 | | |
| 参数 | 说明 | 常用值 | | | |
| ------ | ------ | -------- | | | |
| `r` | 低秩分解的秩,决定可训练参数量 | 4, 8, 16, 32 | | | |
| `lora_alpha` | 缩放因子,通常设为 r 的 2 倍 | 8, 16, 32, 64 | | | |
| `lora_dropout` | LoRA 层的 dropout 概率 | 0.0, 0.1 | | | |
| `target_modules` | 应用 LoRA 的模块 | q_proj, v_proj, k_proj, o_proj | | | |
| 维度 | LoRA | QLoRA | | | |
| ------ | ------ | ------- | | | |
| **模型精度** | 保持 FP16/BF16 | 量化到 INT4/INT8 | | | |
| **显存占用** | 7B: ~10GB | 7B: ~5GB | | | |
| **推理速度** | 正常 | 略慢(需反量化) | | | |
| **微调效果** | 接近全量微调 | 略低于 LoRA | | | |
| **硬件要求** | RTX 3090+ | RTX 2080+ | | | |
| 维度 | Adapter | LoRA | | | |
| ------ | --------- | ------ | | | |
| **结构** | 并联在 FFN 层 | 低秩分解替代 | | | |
| **位置** | 需指定插入位置 | 任意位置 | | | |
| **参数量** | ~3-5% | ~0.1-1% | | | |
| **推理延迟** | 略高(串行计算) | 无(可合并) | | | |
| **多任务** | 多适配器切换 | 多 LoRA 动态加载 | | | |
| 维度 | Prefix Tuning | Prompt Tuning | | | |
| ------ | --------------- | --------------- | | | |
| **提示位置** | 每层 | 仅输入层 | | | |
| **参数量** | 较大(k × layers) | 较小(k) | | | |
| **效果** | 更好 | 略逊 | | | |
| **适用场景** | 复杂任务 | 简单任务 | | | |

方法 可训练参数 GPU 显存 推理延迟 效果 实现复杂度
Full FT 100% ≥24GB 最优
LoRA 0.1-1% ≥10GB 接近全量
QLoRA 0.1-1% ≥6GB 略高 良好
Adapter 1-5% ≥12GB 略高 良好
Prefix 0.1-3% ≥10GB 中等
P-tuning v2 0.1-3% ≥10GB 良好
数据集 说明 适用场景
-------- ------ ---------
**Alpaca** Stanford Alpaca 团队生成 通用指令微调
**ShareGPT** 用户对话数据 对话系统
**FLAN** 谷歌指令数据集集合 指令遵循
** Dolly** Databricks 员工生成 领域适应
**OpenAssistant** 开源对话数据 对话系统
检查项 方法 处理方式
-------- ------ ---------
**重复数据** 哈希比对、相似度计算 去重
**噪声数据** 关键词过滤、长度分布分析 过滤
**格式错误** JSON 解析、schema 验证 修正或过滤
**隐私信息** 正则匹配、NER 检测 脱敏或过滤
**标注一致性** 多人标注、交叉验证 重新标注
类型 说明
------ ------
ROUGE-N N-gram 召回率(ROUGE-1, ROUGE-2)
ROUGE-L 最长公共子序列
ROUGE-S Skip-gram 召回率
维度 评估标准
------ ---------
**相关性** 回答是否切题
**准确性** 信息是否正确无误
**完整性** 是否完整回答问题
**专业性** 术语使用是否恰当
**流畅性** 表达是否通顺
方案 特点 适用场景
------ ------ ---------
**vLLM** PagedAttention,吞吐量高 高并发推理
**TGI** HuggingFace 官方,支持推理优化 通用部署
**Text Generation Inference** Rust 实现,高效 生产环境
**Ollama** 本地部署,简单易用 本地开发
**llama.cpp** 纯 C/C++,CPU 友好 边缘部署
问题 原因 解决方案
------ ------ ---------
过拟合 数据量太少或训练轮次过多 增加数据、使用正则、增加 dropout
灾难性遗忘 全量微调破坏预训练知识 使用 LoRA/QLoRA 或保留预训练数据
分布偏移 微调数据与预训练数据差异大 混合预训练数据一起训练
质量不稳定 数据标注不一致 重新标注、数据清洗
问题 原因 解决方案
------ ------ ---------
OOM(显存溢出) batch size 过大或序列太长 减小 batch size、启用 gradient checkpointing、使用 QLoRA
Loss 不下降 学习率不合适或模型问题 调整学习率、检查数据格式
Loss 爆炸 学习率过高或梯度问题 减小学习率、启用梯度裁剪
NaN 损失 数值不稳定 使用混合精度训练、检查数据
问题 原因 解决方案
------ ------ ---------
重复生成 解码策略问题 调整 temperature、启用 repetition_penalty
生成截断 最大长度限制 增加 max_new_tokens
回答格式错误 Prompt 不够清晰 优化 Prompt,添加示例
推理速度慢 模型过大或硬件不足 量化、使用更小模型
趋势 说明
------ ------
**更高效的方法** 如 LoRA+、DoRA 等新方法不断涌现
**多模态微调** 图像、语音、文本联合微调
**增量微调** 高效利用新数据,不遗忘旧知识
**自动化微调** AutoML + 微调,自动搜索最佳配置
**端侧微调** 在手机、IoT 设备上进行微调

选择建议:

  • 优先尝试提示工程,成本最低
  • 需要引入最新/私有知识时使用 RAG
  • 需要模型学习复杂模式、特定格式输出、领域推理能力时使用微调
相关推荐
小白|9 小时前
cann-learning-hub:昇腾CANN社区学习中心完全指南
java·c++·算法
什么半岛铁盒9 小时前
LangChain 入门与架构:快速搭建你的第一个 AI 应用
人工智能·架构·langchain
松☆9 小时前
torchair:昇腾PyTorch适配层生态协作深度解读
人工智能·pytorch·python
高林雨露9 小时前
Java 转 Kotlin 对照开发指南
java·开发语言·kotlin
科技那些事儿9 小时前
一眸科技 | 情感认知智能,让AI更懂人心
人工智能·科技
java1234_小锋9 小时前
Spring AI 2.0 开发Java Agent智能体 - 多模态支持
java·人工智能·spring
无心水9 小时前
【Harness:全局认知】3、Harness 如何改写软件交付规则?从 52.8% 到 66.5% 的跨越背后
人工智能·性能优化·openclaw·养龙虾·harness·hermes·honcho
放下华子我只抽RuiKe59 小时前
React 从入门到生产(五):状态管理选型
前端·javascript·人工智能·深度学习·react.js·前端框架·ecmascript
前端若水9 小时前
使用 IndexedDB 在客户端存储对话记录
java·前端·人工智能·python·机器学习