微调技术调研
一、技术对比
(一)长文本处理、知识库与微调对比
| 对比维度 | 长文本处理 | 知识库 | 微调 |
|---|---|---|---|
| 核心目标 | 理解和生成长篇内容,适用于需要连贯叙述的任务 | 提供背景知识,增强回答能力,通过外部信息补充提升回答准确性 | 优化模型在特定任务或领域的表现,通过调整模型参数使其适应特定需求 |
| 优点 | 连贯性强,适合复杂任务,能够处理大量信息 | 灵活性高,可随时更新知识库,快速适应新信息 | 性能提升,定制化强,能够针对特定任务进行优化 |
| 缺点 | 资源消耗大,上下文限制,处理长文本时可能超出内存 | 依赖检索,实时性要求高,检索系统性能影响回答质量 | 需要标注数据,硬件要求高,训练成本大 |
| 适用场景 | 写作助手、阅读理解,需要处理大量文本信息的任务 | 智能客服、问答系统,需要基于外部知识库提供答案的任务 | 专业领域、特定任务、风格定制,需要模型具备特定能力的任务 |
| 额外数据 | 不需要,但可能需要优化上下文长度,调整模型以适应长文本 | 需要知识库数据,外部结构化或非结构化信息 | 需要特定领域的标注数据,用于模型训练的有监督数据 |
| 重新训练 | 不需要,但可能需要优化模型,调整参数以适应长文本处理 | 不需要,只需更新知识库,保持检索系统的实时性 | 需要对模型进行进一步训练,通过多轮迭代提升性能 |
| 技术实现 | 扩大上下文窗口,调整模型的注意力机制 | 检索+生成(RAG),结合检索技术和语言生成 | 调整模型参数,通过有监督微调或强化学习优化 |
| 数据依赖 | 无需额外数据,依赖模型自身的语言知识 | 依赖结构化知识库,外部信息的准确性和完整性至关重要 | 需要大量标注数据,高质量的有监督数据是性能提升的关键 |
| 实时性 | 静态(依赖输入内容),处理速度受文本长度影响 | 动态(知识库可随时更新),检索速度决定实时性 | 静态(训练后固定),模型响应速度相对稳定 |
| 资源消耗 | 高(长文本计算成本高),内存需求大 | 中(需维护检索系统),检索和生成的计算资源平衡 | 高(训练算力需求大),尤其是大规模模型的训练和部署 |
| 灵活性 | 中(适合单次长内容分析),任务适应性有限 | 高(可扩展多知识库),能够快速切换和扩展知识领域 | 低(需重新训练适应变化),模型调整成本较高 |
(二)微调与RAG选择
- 微调:
- 适合:拥有充足的数据集,能够进行大规模有监督训练的任务
- 优势:能够直接提升模型的固有能力,无需依赖外部检索,模型性能更加稳定和可靠
- 缺点:硬件成本高,训练周期长,需要大量的计算资源和时间投入
- RAG:
- 适合:非结构化数据、动态更新的数据,需要快速响应和知识更新的任务
- 缺点:每次回答问题前需耗时检索知识库,回答质量依赖于检索系统的性能,实时性要求高
- 总结:
- 少量企业私有知识:最好微调和 RAG 都做,实现模型性能和知识更新的双重保障;资源不足时优先 RAG,快速构建知识驱动的应用
- 动态、非结构化知识场景,应对复杂多变的运维知识需求(会动态更新的知识):RAG,能够实时获取最新信息,保持回答的时效性和准确性
- 高频结构化任务,适合大量重复、规律性强的知识(垂直领域知识):微调,通过深度训练提升模型在特定任务上的性能和效率
二、训练分类
(持续)预训练(CPT) +有监督微调训练(SFT)+强化学习(DPO)
(一)(持续)预训练(CPT)
- 收集大量无标签的数据,构建广泛的数据集以覆盖各种语言模式和知识领域
- 定义自监督任务,如预测被掩盖的部分或生成下一个词,通过掩码语言模型等技术让模型学习语言的内在规律
- 使用这些任务训练模型,让模型学习数据中的模式和结构,不断提升其语言理解和生成能力
(二)有监督微调训练(SFT)
- 加载预训练模型,将其作为基础模型进行进一步的定制化训练
- 准备特定任务的有标签数据集,针对具体应用场景收集和标注高质量的训练数据
- 调整模型的输出层以适应新任务,根据任务需求修改模型的结构和参数
- 使用有标签数据对模型进行训练,优化模型参数,通过反向传播和梯度下降等算法调整模型权重
(三)强化学习(DPO)
- 定义奖励函数,明确哪些行为会获得奖励,根据任务目标设计合理的评价指标
- 模型生成多个候选响应,通过采样或束搜索等方法产生多样性的输出
- 使用奖励模型对这些响应进行打分,评估每个候选响应的质量和相关性
- 根据奖励信号调整模型参数,优化策略,通过强化学习算法更新模型,提升其生成优质响应的能力
三、有监督微调(SFT)
通过提供人工标注的数据,进一步训练预训练模型,让模型能够更加精准地处理特定领域的任务,适应复杂的业务场景和专业需求
(一)微调算法分类
- 全参数微调(Full Fine-Tuning):
- 对整个预训练模型进行微调,会更新所有参数,使模型能够全面适应新任务
- 优点:因为每个参数都可以调整,通常能得到最佳的性能,能够适应不同任务和场景,充分利用训练数据进行深度优化
- 缺点:需要较大的计算资源并且容易出现过拟合,尤其是在数据量有限的情况下
- 部分参数微调(Partial Fine-Tuning):
- 只更新模型的部分参数(例如某些层或模块),选择性地调整模型的关键部分
- 优点:减少了计算成本,加快训练速度;减少过拟合风险,在数据量较小的任务中表现更稳定;能够以较小的代价获得较好的结果,平衡性能和资源消耗
- 缺点:可能无法达到最佳性能,若选择的参数调整范围不合理,可能限制模型的优化空间
- 最著名算法:LoRA(Low-Rank Adaptation),通过低秩分解高效地调整模型参数,既降低了计算复杂度,又保持了模型的性能提升潜力
四、微调基本流程
(一)选定预训练模型
根据任务需求和资源情况,选择合适的预训练模型,考虑模型的规模、性能和适用领域等因素
(二)准备数据集(训练集、验证集)
收集和标注高质量的训练数据,并合理划分训练集和验证集,确保数据的代表性和多样性
(三)设定超参数
- 修改其他训练相关参数,如学习率、训练轮数、截断长度、验证集比例等,根据任务特点和模型特性进行调整
| 超参数 | 类型 | 默认值(以7B为例) | 描述 |
|---|---|---|---|
| learning_rate | float | 5e-6 | 学习率,用于控制模型参数的调整幅度,影响模型的收敛速度和稳定性 |
| num_train_epochs | int | 6 | 训练数据量被重复使用的次数,决定了模型对训练数据的学习深度 |
| per_device_train_batch_size | int | 2 | 每个GPU在一次训练迭代中处理的样本数量,较大的批次大小可以提高效率,但会增加显存需求,需根据硬件资源合理设置 |
| gradient_accumulation_steps | int | 2 | 梯度累积步骤数,用于在有限显存下模拟更大的批次大小,增强训练效果 |
| max_length | int | 1024 | 模型在一次训练中处理的最大token长度,限制输入文本的长度以适应内存限制 |
| lora_rank | int | 8 | LoRA维度,决定了参数调整的规模和效率,影响模型的适应能力和计算成本 |
| lora_alpha | int | 16 | LoRA权重,控制参数更新的强度,调节模型对新任务的敏感度 |
| lora_dropout | float | 0 | LoRA训练的丢弃率,通过在训练过程中随机丢弃神经元防止过拟合,增强模型的泛化能力 |
| lorap_lr_ratio | float | 16 | LoRA+学习率比例(λ = ηβ/ηA),ηA、ηβ分别是adapter matrices A与B的学习率。LoRA+可为关键部分使用不同学习率以提升性能和加快收敛,且不增加计算需求。当lorap_lr_ratio设为0时,表示使用普通LoRA而非LoRA+。 |
- 学习率(Learning Rate):决定了模型每次更新时权重改变的幅度。过大可能会错过最优解;过小会学得很慢或陷入局部最优解
- 调整太小(低学习率):虽然稳定但进步缓慢,训练时间长
- 调整适中(理想学习率):快速掌握正确解法,平衡收敛速度和模型性能
- 调整太大(高学习率):容易矫枉过正,导致模型不稳定
- 训练轮数(Epochs):太少模型会欠拟合(没学好),太大会过拟合(学过头了),需根据数据量和模型复杂度合理设置
- 最大梯度范数(Max Gradient Norm):当梯度的值超过这个范围时会被截断,防止梯度爆炸现象,稳定训练过程
- 最大样本数(Max Samples):每轮训练中最多使用的样本数,控制训练的数据规模,避免内存溢出
- 计算类型(Computation Type):在训练时使用的数据类型,常见的有 float32 和 float16。在性能和精度之间找平衡,根据硬件支持和任务要求选择合适的数据格式
- 截断长度(Truncation Length):处理长文本时如果太长超过这个阈值的部分会被截断掉,避免内存溢出,同时尽量保留关键信息
- 批处理大小(Batch Size):由于内存限制,每轮训练我们要将训练集数据分批次送进去,这个批次大小就是 Batch Size,需根据显存容量合理设置
- 梯度累积(Gradient Accumulation):默认情况下模型会在每个 batch 处理完后进行一次更新一个参数,但你可以通过设置这个梯度累计,让他直到处理完多个小批次的数据后才进行一次更新,模拟更大的批次大小,提升训练效果
- 验证集比例(Validation Set Proportion):数据集分为训练集和验证集两个部分,训练集用来学习训练,验证集用来验证学习效果如何,评估模型的泛化能力
- 学习率调节器(Learning Rate Scheduler):在训练的过程中帮你自动调整优化学习率,根据训练进度和模型表现动态调节学习率,加速收敛并提升性能
(四)执行模型微调训练
- 选择微调算法 Lora,根据任务需求和模型特性确定是否使用LoRA+等变体
- 添加数据集,确保数据格式正确和路径配置无误
- 在训练过程中注意观察损失曲线,尽可能将损失降到最低,监控模型的学习进度和性能表现
- 如损失降低太慢,尝试增大学习率,但需防止模型震荡
- 如训练结束损失还呈下降趋势,增大训练轮数确保拟合,但要注意过拟合风险
(五)测试微调后模型效果
- 观察损失曲线的变化;观察最终损失,评估模型在训练集和验证集上的性能
- 在交互页面上通过预测/对话等方式测试微调好的效果,实际应用场景中验证模型的表现
- 若微调效果不理想,可以:
- 使用更强的预训练模型,提升模型的初始性能和学习能力
- 增加数据量,提供更多样化的训练样本,增强模型的泛化能力
- 优化数据质量(数据清洗、数据增强等,可学习相关论文如何实现),提高数据的准确性和代表性
- 调整训练参数,如学习率、训练轮数、优化器、批次大小等等,根据模型反馈进行参数微调
五、微调工具链
(一)微调常见实现框架/技术
- Llama-Factory:https://github.com/hiyouga/LLaMA-Factory,提供灵活的微调框架和丰富的配置选项,支持多种模型架构和任务类型
- Unsloth:https://github.com/unslothai/unsloth,专注于高效微调和模型优化,具备快速训练和部署的能力
- 阿里云ModelGallery : https://help.aliyun.com/zh/pai/use-cases/one-click-fine-tuning-of-deepseek-r1-distill-models?spm=a2c4g.11186623.0.0.27237cdciWi8uN,提供一站式微调解决方案,集成丰富的模型资源和优化工具,简化微调流程
(二)在线微调工具
- 硅基流动:https://cloud.siliconflow.cn/fine-tune,云端微调平台,具备便捷的数据管理、模型训练和效果评估功能,适合快速实验和开发
- colab:https://colab.research.google.com/,在线Jupyter笔记本环境,支持GPU加速,可灵活搭建和运行微调实验,便于代码调试和结果展示
(三)微调参数曲线图
- https://wandb.ai/2608794661-?product=models,提供详细的训练参数变化曲线和模型性能指标,辅助分析和优化微调过程
(四)模型库&&数据集库
- huggingface:https://huggingface.co/datasets,丰富的开源模型和数据集资源,涵盖多种语言和领域,为微调提供广泛的基础支持
- modelscope:https://modelscope.cn/datasets,专业的模型和数据集平台,提供高质量的预训练模型和行业数据集,助力高效微调
六、面临的难点
(一)数据集整理(数据质量高)
1. 数据标注
- 分类任务:为文本数据添加类别标签。例如,在情感分析任务中,将文本标记为“正面”、“负面”或“中性”,通过人工标注或自动化工具实现
- 序列标注:为文本中的每个词或字符添加标签。例如,在命名实体识别任务中,为每个词标注是否为人名、地名等,构建详细的标注体系
- 生成任务:为输入文本提供对应的输出文本。例如,在机器翻译任务中,为源语言句子提供目标语言的翻译,建立平行语料库
2. 数据清洗
- 去除重复数据:删除数据集中的重复样本,避免模型过拟合,提高数据的多样性和有效性
- 处理缺失值:通过删除、填充或插值等方法处理数据中的缺失值,确保数据的完整性
- 纠正错误数据:修正数据中的错误值,如错误的拼写、不合理的数值等,提升数据的准确性
- 统一数据格式:将数据转换为一致的格式,如统一日期格式、数值格式等,便于模型处理和训练
- 敏感信息:人名、服务器地址、ip、设备号等敏感信息剔除,保护用户隐私和数据安全
3. 数据去噪
- 去除无关内容:删除文本中的无关字符、符号、HTML 标签等,净化文本内容
- 拼写检查:纠正文本中的拼写错误,提高文本质量,增强模型的理解能力
- 正则表达式清理:使用正则表达式去除特定模式的噪声,如 URL、邮箱地址等,精准提取有效信息
(二)硬件要求
微调周期长,对计算资源要求高
示例:
- GPU:2X3090 (24G显存),提供强大的并行计算能力,加速模型训练
- CPU:i7-12700kf,高性能处理器,处理数据加载和预处理等任务
- 内存:128G,充足的内存空间,支持大规模数据和模型的加载
- 磁盘: 2T ,大容量存储,保存数据集、模型参数和训练日志
- 基础模型:Qwen-2.5-7b-instruct,选择合适的预训练模型作为基础
- 数据量: 6GB,足够的训练数据,确保模型学习到丰富的模式和知识
- 训练次数: 3.0轮*3(三阶段),多轮训练,逐步优化模型性能
- 耗时: 7天,较长的训练周期,需合理安排时间和资源
PAI-Model Gallery 支持六种蒸馏模型的 LoRA 监督微调训练,下表中给出了在默认参数和数据集的情况下,所推荐的最低配置:
| 蒸馏模型 | 基模型 | 支持的训练方式 | 最低配置 |
|---|---|---|---|
| DeepSeek-R1-Distill-Qwen-1.5B | Qwen2.5-Math-1.5B | LoRA 监督微调 | 1 卡 A10(24 GB 显存) |
| DeepSeek-R1-Distill-Qwen-7B | Qwen2.5-Math-7B | LoRA 监督微调 | 1 卡 A10(24 GB 显存) |
| DeepSeek-R1-Distill-Llama-8B | Llama-3.1-8B | LoRA 监督微调 | 1 卡 A10(24 GB 显存) |
| DeepSeek-R1-Distill-Qwen-14B | Qwen2.5-14B | LoRA 监督微调 | 1 卡 GU8IS(48 GB 显存) |
| DeepSeek-R1-Distill-Qwen-32B | Qwen2.5-32B | LoRA 监督微调 | 2 卡 GU8IS(48 GB 显存) |
| DeepSeek-R1-Distill-Llama-70B | Llama-3.3-70B-Instruct | LoRA 监督微调 | 8 卡 GU100(80 GB 显存) |
(三)微调效果磨合
- 微调效果评估:通过多种指标和方法全面评估微调后模型的性能,包括准确率、召回率、F1值等
- 参数调整重新微调训练:根据评估结果,针对性地调整超参数,如学习率、批次大小等,进行多轮训练以进一步提升模型效果
266

被折叠的 条评论
为什么被折叠?



