LLM 持续微调:技术详解与实战

指南2025年4月17日6 分钟阅读
LLM 持续微调:技术详解与实战
Together 微调平台推出持续微调(CFT)功能,只需指定 `--from-checkpoint` 参数,就能在已有模型基础上继续训练。这篇技术文章深入探讨了 CFT 的原理、适用场景和最佳实践。

让大语言模型(LLM)持续更新业务相关的新知识和技能,一直是业界难题。Together 微调平台今天推出了一个新功能:持续微调(Continued Fine-Tuning,CFT)。简单说,你只需要在微调时指定 --from-checkpoint 参数,训练就会从之前保存的检查点(Checkpoint)开始,而不是从头开始。

这篇技术文章将深入探讨持续微调的方方面面:它是什么、什么时候该用、以及最强大的应用场景。

如果你想直接看代码,我们准备了一个详细的代码笔记本

什么是持续微调?

持续微调(CFT)指的是对一个已经经过训练的 LLM 进行顺序微调的过程。与从基础模型从头开始不同,持续微调建立在模型已经获得的知识和能力之上,能更高效地适应新任务、新领域或新语言。

持续微调在 LLM 生命周期中至关重要——如果你曾经微调过模型,很可能已经用过某种形式的 CFT。通常,人们会继续微调模型发布者放出的指令模型检查点。随着模型演进,CFT 提供了一种资源高效的方式来适应新用例,同时最大限度地减少先前学习能力的损失(也就是灾难性遗忘)——后面会详细讨论。

理解 LLM 的持续学习

LLM 的持续学习大致可分为持续预训练(CPT)和持续微调(CFT)。CPT 侧重于在特定领域的大规模文本语料上进一步训练基础预训练 LLM,用特定领域的信息增强模型的通用知识。CFT 则是在具有不同数据分布或时间偏移的连续下游任务上对 LLM 进行指令微调。这类数据集通常包含带标签的输入-输出对(比如问答对),目的是让模型的行为对齐到特定、定义明确的任务上。

CFT 包含多种方法,包括针对不同任务的微调、指令微调、模型精炼/编辑以及对齐。最近的研究也在探索用 CFT 来增强 LLM 的多语言能力。

持续微调最大的挑战之一是灾难性遗忘(Catastrophic Forgetting):当模型在新数据上微调时,其在先前任务上的性能会下降。先前的研究表明,不同微调阶段所用数据集之间的相似性,会显著影响模型保留先前能力的效果。

当阶段间的数据集编码相似任务时,模型能保持甚至提升其在先前任务上的表现。但如果数据集编码的是不同任务,模型在先前任务上的性能就可能大幅下降。这个发现对于设计有效的持续微调策略至关重要。

什么时候该用持续微调?

持续微调在以下几种场景中特别有价值:

  1. 当你已经微调过一个模型,想进一步改进它又不想从头开始:这在已经投入大量资源训练模型,又需要它适应新数据或新任务时尤其有用。
  2. 当你需要让模型适应新语言时:如果你有一个精通英语的模型,想扩展其到其他语言的能力,同时又不损害其英语表现。
  3. 当你的数据分布随时间变化时:对于部署在生产环境中的模型,查询类型或用户行为可能会演变。
  4. 当你想增量式地融入新知识或技能时:相比从头训练,持续微调能更高效地获取知识。
  5. 将 SFT 与 DPO 叠加使用——当你需要让模型与人类偏好对齐时:收集用户反馈后,你可以进一步微调模型,使其回应更符合用户预期。可以参考我们关于如何做 DPO 微调的深度笔记本

实施持续微调前,有几个关键因素需要考虑:

  • 数据集相似性:你的新数据集与模型先前训练的数据有多相似?高相似度通常能带来更好的知识保留。
  • 学习率和训练时长:这些超参数对成功的持续微调至关重要,可能需要根据你的具体模型和数据集进行调整。
  • 性能指标:明确定义成功标准,既要看新能力,也要看旧技能的保留情况。除了当前 CFT 步骤要提升的能力,还可以评估所有能力。

真实世界用例

多语言适配

持续微调最有前景的应用之一,是增强模型理解和生成多种语言文本的能力。先前的研究表明,CFT 可用于让模型适应新语言,同时不削弱其已掌握语言的表现。

传统方法常导致灾难性遗忘:模型在学习新语言时,其原始语言(通常是英语)的表现会下降。但最近的研究显示,只要用对技术——比如在不同语言间使用相似的任务数据集——模型就能在保持原始语言能力的同时,获得新语言能力。

例如,一个两阶段的 CFT 过程:先对纯英语的 LLM 进行微调,再在 multilingual 数据集上顺序微调,可以在不牺牲任务表现的前提下增强模型的语言能力,尤其是在数据集编码相似任务时。

任务特定性能提升

持续微调能显著提升模型在特定任务上的表现。这篇AWS 博客文章讨论了一个持续自指令微调框架,它用一个复合 AI 系统来驱动性能提升的微调工作流。

他们的基准测试结果显示,通过监督微调(SFT)训练的自定义 LLM 比标准 RAG 系统准确率更高,而通过偏好对齐(如 DPO)进一步精炼的模型表现提升更大。

偏好对齐与模型精炼

最后,持续微调对于让模型与人类偏好对齐非常有用。收集用户反馈后,你可以使用直接偏好优化(DPO)等技术来微调模型,使其更符合用户期望。可以阅读我们关于使用 DPO 进行偏好调优的深度文章

AWS 的实现表明,通过人类和 AI 反馈进行偏好对齐的微调模型,其表现显著优于标准 RAG 流程,即使使用的是更小的基础模型。

想了解更多如何有效叠加持续微调和 DPO 偏好调优,请阅读我们另一篇关于 DPO 的技术深度文章

在 Together 上开始使用 CFT

技术方法与最佳实践

要有效实施持续微调,你可以在我们的微调 API 中指定 --from-checkpoint 参数,如下所示:

code
together fine-tuning create \
        --training-file "file-5e32a8e6-72b3-485d-ab76-71a73d9e1f5b" \
        --from-checkpoint "ft-bb62e747-b8fc-49a3-985c-f32f7cc6bb04" \
        --wandb-api-key $WANDB_API_KEY  # 可选

你也可以使用 Python 或 TypeScript 客户端:

code
import os
from together import Together

client = Together(api_key=os.environ.get("TOGETHER_API_KEY"))

response = client.fine_tuning.create(
    training_file = 'file-5e32a8e6-72b3-485d-ab76-71a73d9e1f5b',
    from_checkpoint = 'ft-bb62e747-b8fc-49a3-985c-f32f7cc6bb04',
    wandb_api_key = '1a2b3c4d5e.......',
)

print(response)

可以通过以下方式指定检查点:

  • 先前任务的输出模型名称
  • 微调任务标识符
  • 特定检查点步骤,格式为 ft-...:{STEP_NUM}

要查看某个任务所有可用的检查点,使用 together fine-tuning list-checkpoints {FT_ID}

持续微调代表了一种随时间演进和改进 LLM 的强大方法。通过在已训练模型的基础上构建,而不是从头开始,你可以更高效地让模型适应新任务、新领域和新语言,同时保留其现有能力。

查看深度代码笔记本,了解如何应用持续微调来改进函数调用,以及我们的文档

参考资料

  1. https://www.databricks.com/blog/characterizing-datasets-and-building-better-models-continued-pre-training
  2. https://aws.amazon.com/blogs/machine-learning/llm-continuous-self-instruct-fine-tuning-framework-powered-by-a-compound-ai-system-on-amazon-sagemaker/
  3. https://arxiv.org/abs/2410.16006
本文编译自 Continued Fine-tuning of LLMs: A Technical Deep Dive,版权归原作者所有。

觉得有用?分享给更多人

获取每周 AI 工具精选

工具推荐、实战教程和生态洞察,每周更新。

相关文章

pgEdge 推出开源 MCP Server for Postgres,支持 AI 智能体通过模型上下文协议(MCP)而非传统 API 方式访问数据库。服务强调数据源无关性、完整模式自省和 token 优化,适用于 Claude Code、Cursor 等主流 AI 开发工具。

指南The New Stack·4月2日·4 分钟

Google 推出 Flex 和 Priority 两个新的推理层级,帮助开发者平衡成本与可靠性。Flex 是成本优化层级,适合后台任务,价格便宜一半;Priority 是最高保障层级,适合用户交互型应用。两者都通过同步接口调用,简化了架构管理。

指南·4月2日·3 分钟

评论