前言
在人工智能领域,大语言模型(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
- 需要模型学习复杂模式、特定格式输出、领域推理能力时使用微调