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
- 需要模型学习复杂模式、特定格式输出、领域推理能力时使用微调
更多推荐



所有评论(0)