llm_distillation_playbook

GitHub
618 55 简单 1 次阅读 2天前语言模型开发框架
AI 解读 由 AI 自动生成,仅供参考

llm_distillation_playbook 是一份专注于大语言模型(LLM)知识蒸馏的实战指南,旨在帮助开发者将庞大、昂贵的教师模型高效转化为轻量、快速且低成本的学生模型。当前,虽然大模型能力强大,但其高昂的算力成本和推理延迟阻碍了大规模生产应用;同时,社区中关于如何成功实施蒸馏的建议往往零散且充满试错成本。这份手册系统性地解决了这一痛点,将来自 Google 和 Predibase 等团队的工业界经验与学术研究成果相结合,提供了一套可落地的最佳实践。

它特别适合具备深度学习基础、致力于将 LLM 应用于生产环境的工程师和机器学习从业者。内容涵盖了从理解小模型局限性、构建日志基础设施、定义评估标准,到优化师生模型质量、数据多样性平衡及生产部署监控等全流程建议。其独特亮点在于不仅关注算法本身,更强调了“数据工程”与“生产运维”的重要性,例如利用真实日志或合成数据引导训练、逐项参数实验以及上线后的错误分析策略。通过遵循 llm_distillation_playbook,团队可以减少盲目猜测,以更科学的方法打造出既保留大模型智能又具备高效推理能力的定制化模型。

使用场景

某电商初创团队希望将昂贵的云端大模型替换为低成本本地小模型,以支撑其 7x24 小时智能客服系统。

没有 llm_distillation_playbook 时

  • 团队盲目尝试各种蒸馏参数,缺乏系统指导,导致多次实验失败且无法定位原因。
  • 训练数据仅靠少量人工标注,未利用真实日志或合成数据扩充,致使小模型在长尾问题上表现极差。
  • 缺乏清晰的评估标准,仅凭感觉判断模型好坏,上线后频繁出现答非所问的情况。
  • 忽视小模型的能力边界,强行让其处理复杂推理任务,导致响应延迟高且准确率低下。
  • 部署前未进行充分的错误案例分析,生产环境中突发大量客诉,运维压力剧增。

使用 llm_distillation_playbook 后

  • 遵循“从简单开始”和“单变量实验”原则,快速锁定最优蒸馏配置,研发效率提升 3 倍。
  • 依据指南构建日志基础设施,通过真实对话日志与合成数据混合训练,显著覆盖边缘场景。
  • 建立了明确的量化评估体系,确保小模型在特定客服场景下的表现可衡量、可追踪。
  • 深入理解小模型局限性,重新设计任务拆解流程,使轻量级模型也能稳定处理复杂咨询。
  • 在部署前系统性分析个体错误并建立监控机制,上线首周零重大事故,客户满意度稳步上升。

llm_distillation_playbook 将原本充满试错的蒸馏过程转化为标准化的工程实践,帮助团队以最低成本实现了大模型能力的平滑迁移。

运行环境要求

操作系统
  • 未说明
GPU

未说明

内存

未说明

依赖
notes该文档主要是一份关于大语言模型(LLM)蒸馏的最佳实践指南和策略手册,而非一个可直接运行的软件工具包。文中提到的代码示例(如日志记录脚本)仅用于演示特定流程。文档内容侧重于方法论(如数据构建、评估标准、教师/学生模型选择),未提供具体的运行环境配置、硬件需求或依赖库版本列表。
python未说明
未说明
llm_distillation_playbook hero image

快速开始

LLM蒸馏操作手册

Justin Zhao, Wael Abid

† Predibase, MLX团队

幻灯片(2024年2月1日)

目录

本文档面向哪些读者?

本文档面向对LLM蒸馏及其在生产应用中感兴趣的技术工程师和机器学习从业者。我们假定读者已掌握深度学习基础以及大型语言模型(LLMs)的相关知识。尽管本指南中的建议也可适用于学术研究等其他场景,但我们的重点在于如何更高效地将LLMs蒸馏为适合生产环境的轻量级模型。

为何需要蒸馏操作手册?

我们合作过的几乎所有组织都至少开发过一款基于LLMs的内部应用;其中一家大型企业甚至在一周内就完成了70个原型开发。

如今,几乎每个人都在利用大型语言模型构建自己的原型系统。然而,随着LLMs的能力不断增强,并逐渐成为各类应用的核心组件,对更高效、更小型替代方案的需求也愈发迫切。

这种需求的产生源于LLMs卓越的性能表现,同时也与其高昂的成本、巨大的资源消耗以及较慢的运行速度形成了鲜明对比。因此,通过蒸馏技术将这些大型模型压缩为更高效、更轻量的版本,能够在保证性能的同时显著降低计算成本并提升运行效率。

尽管模型蒸馏备受关注,但我们发现,在实际操作中,要让蒸馏后的模型真正发挥良好效果,仍然需要大量的试错与经验积累。关于蒸馏的零散经验和建议散布于arXiv、Hugging Face、Discord、Substack以及社交媒体等多个平台,但目前尚未形成系统化、集中化的指导文档。

本文档中的建议源自我们在Google和Predibase公司进行语言模型蒸馏的经验,同时结合了我们所能找到的所有关于SLM/LLM蒸馏的研究成果。我们希望这些高效优化LLMs的方法能够为从业者和爱好者提供切实可行、基于学术研究且具有实用价值的思路,从而助力开源语言模型的持续发展与广泛应用。

本文档是一个持续更新的活文档。我们计划定期对其进行小幅或大幅改进。如果您希望及时获取更新通知,请关注我们的仓库(详见说明)。

对开源的承诺

在Predibase,我们坚信未来的方向是经过微调、高度专业化且开源的LLMs。开源理念深深植根于公司的基因之中。作为一家公司,我们维护着以下项目:

  • Ludwig:用于构建自定义LLMs、神经网络及其他AI模型的低代码框架。
  • LoRAX:可扩展至数千个微调后LLMs的多LoRA推理服务器。
[关于Predibase的更多信息]

Predibase是一个基于开源技术构建的托管平台。如果您对微调和部署LLMs的托管解决方案感兴趣,可以在此处注册免费试用这里

关键概念

在深入探讨大型语言模型(LLMs)蒸馏的最佳实践之前,让我们先明确一些用于模型蒸馏及其相关应用的常用术语。

img

模型蒸馏示意图。图片来源

模型蒸馏是指在不显著降低性能的前提下,将大型语言模型精简并压缩为更易于管理、更具成本效益的版本的技术。

大型语言模型(LLMs):经过海量文本数据训练的先进AI模型(参见完整列表)。它们对语言具有深刻的理解能力,并可通过训练完成指令遵循或其他文本相关任务。

教师模型:功能强大、规模较大的原始模型,我们将从中提取知识并迁移到较小的学生模型中。

学生模型:被蒸馏后的较小模型,其性能接近但低于教师模型。

最佳实践

1. 理解小型模型的局限性。

摘要:模型蒸馏是一门经验科学,并非在所有情况下都能取得良好效果。模型蒸馏的有效性取决于具体任务和数据。

有大量且不断增加的证据表明,经过金标准标签微调后,小型模型的表现优于零样本和少样本的GPT-4(12)。然而,由于其规模有限,小型模型可能无法像大型模型那样有效地捕捉语言的全部深度和细微差别。

在经典的模型蒸馏设置中,学生模型基于教师模型的原始输出进行训练(也称为模仿学习),通常情况下,学生模型最多只能达到与教师模型相当的水平。

在论文《模仿专有大模型的虚假承诺》(The False Promise of Imitating Proprietary LLMs)中,研究人员发现,对于某些任务,小型学生模型会欺骗性地学会模仿教师模型的风格,但在事实准确性上却表现不佳。

NLP任务的谱系。领域越广泛、精度要求越高,问题就越复杂,蒸馏方法“直接奏效”的可能性也就越小。

事实上,模型蒸馏的效果在很大程度上取决于具体的任务和数据。当任务涉及更广泛的领域或需要较强的推理能力时,学生模型往往不如其大型预训练教师模型。相反,对于那些简单且定义明确的任务,开箱即用的模仿学习就足以训练出具有竞争力的学生模型。

[案例研究:Jigsaw有毒评论分类]

为了展示并 contextualize 我们将在本文后续章节中探讨的大模型蒸馏最佳实践,我们使用了 Jigsaw有毒评论分类数据集

Jigsaw数据集旨在训练模型对攻击性评论进行分类。它包含来自互联网的16万条真实评论,既有攻击性的也有非攻击性的例子。

原始数据集为每条评论提供了细粒度的标签:toxicsevere_toxicobscenethreatinsultidentity_hate。我们将所有这些列合并为一个名为 is_bad 的列,从而得到一个二分类数据集。[^1]

[^1]: 尽管已经存在针对 Jigsaw 数据集专门设计的先进文本分类模型(SOTA 模型),但我们在此的目的并不是超越这些基准。相反,我们利用该数据集作为示例工具,以展示和 contextualize 大模型蒸馏的最佳实践。

img

在平衡测试集上,比较 GPT-* 模型的零样本性能与使用随机抽取的1万条样本微调后的开源大模型的准确率。

2. 构建良好的日志记录基础设施。

摘要:在生产环境中为您的大模型配备基本的日志记录基础设施。如果由于流量低、PII 或其他限制导致日志数据不足,合成数据生成可能是用于微调的数据集构建的一种可行方案。

如果您尚未在应用中实现日志记录,那么现在确实应该开始实施了。Token 成本高昂,而“数据就是石油”(data is oil)。

基于模型即服务(MaaS)无服务器教师模型的基本日志记录基础设施示例。将来自 MaaS 端点的请求和响应流式传输到 Amazon S3 或 Snowflake 等存储解决方案中。

使用真实日志构建数据集。

从发送至教师模型的生产流量中收集日志,是为微调构建数据集的一个极佳且轻量级的选择。[^2]

[^2]: 在记录大模型的输出时,请务必仔细阅读大模型提供商的服务条款和使用政策。虽然 OpenAI 允许将其模型用于学术或探索性工作,但对于特定的使用场景和生产环境,建议进一步确认。

您可以在 这里 查看一个在 Streamlit 应用中异步将请求和响应记录到 S3 的轻量级示例。

使用合成数据构建数据集。

对于因流量低、PII 或其他限制而导致数据不足的应用程序,合成数据生成可能是用于微调数据集的一种可行方案。

使用合成数据构建您的数据集。合成数据的最大挑战在于确保生成的示例多样化且不重复。

诸如 Self-InstructAlpacare 以及微软的 phi-1/phi-1.5/phi-2 等论文都展示了如何通过向 GPT 模型输入种子查询并进行创造性变体,生成合成数据集,进而用于微调出令人信服的小型模型。

“我们推测,在不久的将来,合成数据的生成将成为一项重要的技术技能,也是人工智能研究的核心议题。” ~ phi 1.5 技术报告

3. 定义清晰的评估标准。

摘要: 对蒸馏模型的有效评估,需要制定与具体应用场景需求相一致的明确标准。评估指标的选择应反映问题的本质以及对模型期望达到的效果。

这是一项广为人知的机器学习最佳实践,但由于其重要性,仍需再次强调。

根据应用量身定制评估:有效的评估必须有清晰定义的标准,且这些标准要与特定的应用需求相契合。例如,用于生成 JSON 数据的大型语言模型可能会侧重于检查是否符合数据模式;信息抽取任务则可能关注准确率或召回率;而其他语言生成任务则可采用 BLEURT、ROUGE 或困惑度等指标。关键在于选择最能体现模型在其预期使用环境中表现成功的指标。

LLM 作为评估者的新趋势:目前有一种日益增长的趋势,即利用大型语言模型本身来评估模型输出,尤其是在传统指标难以全面衡量,或由人工标注员进行手动评估成本过高的场景下。这种方法颇具吸引力,但同时也需要审慎考虑,以避免 LLM 可能存在的偏见影响评估结果。

测试集的一致性与多样性:建立清晰的测试集至关重要。这些测试集应当足够多样化,能够覆盖模型性能的各个方面;同时也要保持一致性,以便长期可靠地跟踪模型表现。切勿频繁更换测试集,因为在比较不同模型及不同迭代版本的表现时,一致性是核心要素。

[案例研究:Jigsaw 恶意评论分类]

Jigsaw 数据集 中随机采样得到的测试集,其分布为:90% 非恶意评论,10% 恶意评论。

这一分布或许符合我们假设的应用场景中实际接收到的数据分布(大部分为非恶意评论)。然而,我们希望确保投入生产环境的任何模型,都能同样出色地识别出恶意和非恶意评论。

img

接下来,我们正式定义两个不同的测试集:

  1. test-indist:一个属于原分布的测试集,包含 90% 的非恶意样本和 10% 的恶意样本,直接取自原始测试集。
  2. test-balanced:一个显式平衡的测试集,包含 50% 非恶意样本和 50% 恶意样本,同样取自原始测试集。

通过同时在这两个测试集上评估模型,我们可以追踪候选模型的整体分类效果,以及在更贴近真实流量环境下的分类表现如何。

4. 尽可能提升教师模型的质量。

总结: 教师模型输出的质量是你蒸馏得到的学生模型性能的上限。请尽最大努力提升教师模型的性能。

在将教师模型的输出用于学生模型模仿之前,务必使教师模型达到尽可能好的水平。

选择优秀的教师模型: 教师模型的选择是至关重要的第一步。应选择在你的任务上表现出最高准确率和理解能力的模型。GPT-4通常表现优异,但你也应该评估是否存在更适合你特定应用场景的基础模型,这些模型可能在你的任务上更具针对性。

指标 zephyr-7b-alpha Mixtral-8x7B-Instruct-v0.1 Llama-2-70b-hf Yi-34B-200K CodeLlama-34b-Instruct-hf GPT-3.5 GPT-4 Gemini
总体平均 59.5 72.6 67.9 70.8 57.3 70.9 88.3 90.7
ARC 61.0 70.2 67.3 65.4 54.3 82.9 94.9 未报告
HellaSwag 84.0 87.6 87.3 85.6 76.9 79.4 92.4 87.8
MMLU 61.4 71.2 69.8 76.1 55.5 67.4 83.7 90.0
TruthfulQA 57.9 64.6 44.9 53.6 44.4 61.4 79.7 未报告
Winogrande 78.6 81.4 83.7 82.6 74.6 65.8 87.1 未报告
GSM8K 14.0 60.7 54.1 61.6 38.0 68.2 92.1 94.4

资料来源: 开放LLM排行榜, HELM排行榜 根据新的基准测试套件,GPT-4“碾压”其他大语言模型, Gemini:一系列功能强大的多模态模型

选择优质的提示词: 不断优化提示词及其参数,可以显著提升教师模型输出的质量。精心设计的提示词通常能生成更准确、更符合上下文的响应,从而为学生模型提供更好的训练素材。

[案例研究:Jigsaw有毒评论分类]

调整大语言模型、提示词以及温度设置,会对教师模型的准确率产生显著影响。

img

对于该数据集而言,最佳温度似乎是0.0。这是合理的,因为较高的温度会增强大语言模型输出的创造性,而这在二分类任务中往往并不适用。

我们以两种不同的提示词为例,展示其在test-balanced数据集上的准确率:

简单提示词:

给定以下输入文本,请判断其是否具有毒性。请以JSON格式给出分类结果,键名为'is_bad'。如果评论确实具有毒性,则设置is_bad=1;否则,设置is_bad=0。

输入文本:%s

输出:

思维链提示词:

对于一款旨在维护良好网络环境的内容审核应用,我们需要标记可能包含有毒、侮辱性、淫秽或威胁性语言的评论。请根据给定的输入文本,对其中的毒性进行分类。请以Python字典的形式作答,包含以下两个键:

1. 'is_bad':如果评论确实具有毒性,则设置is_bad=1;否则,设置is_bad=0。
2. 'reason':请针对您的判断提供适量的详细说明。

输入文本:%s
输出:

以下是我们的实验结果:

img

结果显示,与更为复杂的“思维链”提示相比,“简单提示”与人工标注的匹配度更高。尽管使用GPT-4时,两种提示之间的差距有所缩小,但这表明更复杂的提示并不一定带来更好的效果。或许,“思维链”提示所引发的额外推理反而增加了误判的概率。

5. 最大化训练数据的质量。

总结: 如果你能够持续提升训练数据的质量,无论是否需要教师参与,都应当这样做。请思考如何从根本上提高数据质量。

大多数收敛后的学生模型所犯的错误,都可以追溯到源数据的问题上。对于学生模型而言,在源头解决数据质量问题,通常比试图通过辅助系统来纠正这些问题更为高效。

以下是一些最常用的技术。

技术 难度 普适性 手工劳动 描述
手动修复或精选你的数据。 ★★★★★ ★★★★★ 手动修正并修改不良输出。标注新数据。这种方法简单但耗时费力,能够确保训练材料高质量且无错误。
基于规则过滤数据。 ★★ ★★★★ ★★★ 使用基本规则(如长度限制、正则表达式模式)来剔除低质量数据。虽然设置规则相对容易,但确定合适的筛选标准可能较为耗时。
利用辅助系统(或大语言模型)对数据进行排序。 ★★★ ★★★ 使用辅助系统,例如另一个模型,来评估和排序数据质量。例如,微软的phi-1模型利用GPT-4为训练样本打分,再通过分类器优先选择高价值数据,并丢弃得分最低的X%样本。更多信息参见这篇论文的第2.1节。
通过解释轨迹丰富数据。 ★★★ ★★ 收集推理数据。如果你的任务需要复杂的推理能力,那么在训练数据中加入教师提供的解释轨迹或思维链(CoT)输出,可能会带来类似的性能提升。
聚合多个教师的输出。 ★★★★ 对于可递归定义的任务,例如摘要生成,可以使用链式方法。而对于有明确答案的任务,则可以采用多数投票机制(参见MedPrompt论文自洽性论文)。img 通过让学生模型基于多位教师的综合输出进行训练,它就能超越任何单一教师的表现。
[案例研究:Jigsaw评论毒性数据质量实验]

为了评估数据质量对模型性能的影响,我们可以从Jigsaw数据集中提取6个子集,并分别为每个子集训练模型。

  • A(1,100行):分布内数据,由GPT标注。
  • B(2,200行):A加上1,100行分布内Gold标注数据。
  • C(2,100行):B经过过滤,去除了GPT标注中的错误。
  • D(3,200行):B加上1,000行带有Gold毒性标签的数据。
  • E(5,000行):更大的分布内数据集,由GPT标注。
  • F(10,000行):最大的分布内数据集,由GPT标注。

img

模型在平衡测试集上的表现。

无论是加入高质量的人工标注样本,还是移除教师标注中的错误样本,模型性能都会有所提升。

6. 最佳数据集应具备多样性和平衡性。

总结: 尽量使你的数据集多样化、非重复且平衡。数据集涵盖的场景和复杂度越高,蒸馏得到的学生模型就越有可能以无偏的方式进行泛化。

创建高质量数据集的主要挑战之一,是确保示例的多样性和非重复性。学生模型的训练数据应当覆盖广泛的场景,并在难度、复杂性和风格上有所差异。

多样性之所以重要,有以下几个原因:它能让语言模型接触到各种需要处理的情况,降低过拟合或记忆特定模式与解决方案的风险,同时提高模型对未见或新情况的泛化能力和鲁棒性。

平衡性同样关键。如果某些情况在整个数据集中所占比例过少,学生模型可能难以有效学习这些内容。

从真实日志中构建的数据集也可能存在多样性或平衡性不足的问题。对于基于日志的数据集而言,过多来自高级用户的示例可能会损害整体数据分布的代表性。可以通过随机变异来去偏,用释义或反向翻译扩充稀有样本,或者手动添加缺失的案例。

并非必须事先了解并解决所有数据分布问题,但提前预见到这些问题是有益的。只要选择了合适的测试集,在评估过程中,学生模型中的显著偏差通常会显现出来,而这些偏差往往可以通过调整训练数据来解决。

[案例研究:Jigsaw有毒评论分类]

img

模型在平衡测试集上的表现。

完全平衡并非必要,也未必更好。

例如,非有毒样本可能比有毒样本更难识别,因此模型或许能从提供更多较难类别的样本、减少较易类别样本中受益。

在初期阶段,很难确定最佳的“平衡”状态,或者对于非分类任务来说,如何衡量或有效地改变数据集的平衡。

更宏观的观点是,如果你拥有优质的测试集,那么即使使用(无意中)不平衡的训练数据进行模型评估,你也能够发现偏差模式,从而为调整数据分布提供线索。

7. 从简单小规模开始。

总结: 从较小、较简单的模型配置入手,这类模型训练速度快,便于调试设置中的问题、快速迭代,并为后续比较更复杂的模型配置建立良好的基准。

拥抱最小、最简单模型的力量。 这不仅是效率问题,更是一种战略性建模方法。小型、简单的模型训练和理解起来都快得多,能够实现最快的迭代和反馈。

避免陷入酷炫但复杂的大型模型陷阱。 模型训练中最常见的误区之一,就是一开始就选择过大、过复杂的模型配置。这样的模型不仅难以理解,还会拖慢迭代速度,延长实验周期。

朴素基线的价值。 始终从朴素、简单的基线模型开始。这些基线模型可以作为清晰的基准,用来衡量后续更复杂模型配置的表现。

8. 评估增加更多数据的边际效用。

总结: 一般来说,有意义的微调效果往往可以在几百到几万条示例的数据集上实现。要针对你的具体任务更明确地回答这个问题,可以进行一项消融实验,改变数据集大小并加以推断。

“我需要多少数据才能微调我的模型?”——这是我们经常被问到的问题之一。

实际上,这确实因任务而异,受任务难度、输出多样性、推理复杂性、示例长度、任务与预训练数据的契合度以及超参数等因素影响。有些问题只需少量数据就能收敛,而另一些问题则需要大量训练却始终无法收敛。

为了确定适合你具体情况的数据集规模,可以在保持其他训练参数不变的情况下,通过改变数据集大小(如5%、10%、25%、50%、75%、100%)来进行消融实验。这类实验可以帮助你了解增加额外数据进行微调的边际效用。如果增加数据量带来的提升有限,建议重新评估训练流程的其他方面,寻找潜在的改进空间。

如果你发现增加更多数据的边际效用较高,则可以考虑采用数据增强技术,比如反向翻译,或者手动标注更多数据。

[案例研究:Jigsaw有毒评论分类]

img

模型在平衡测试集上的表现。

从1,100条示例到5,000条示例,性能有了显著提升;然而,从5,000条到10,000条,质量提升则相对有限。根据这些结果,我们可以大致推断出,对于该模型配置而言,当训练数据超过10,000条后,继续增加数据的边际效用将逐渐减弱。

9. 思考你希望如何部署和提供学生模型的服务。

总结: 虽然不必一开始就做出决定,但最好心中有一个明确的模型部署方案,以便优先尝试那些最终可以高效部署的模型。

如果你计划在生产环境中部署多个大语言模型,探索参数高效的微调(PEFT)技术将大有裨益。与需要为每个模型单独配备GPU资源的全量微调不同,PEFT技术(如LoRA,即低秩适应)只需训练模型中的一小部分权重。研究表明,LoRA能够达到与全量微调相当的性能,因此是一种极具吸引力的高效部署方案。

例如,LoRA Exchange(LoRAX)就是一个专为共享GPU资源而优化的多模型部署解决方案。与传统的大型语言模型部署方式相比,LoRAX的最大优势在于它能够在单个GPU上同时支持上百个针对特定任务微调过的模型。这一特性显著降低了微调模型部署的成本和复杂性。LoRAX尤其适合参数高效的微调模型,为模型部署提供了一套简化的解决方案。

尽管使用更大规模的模型进行全量微调可能会带来最高的绝对质量,但从成本或推理延迟的角度来看,这种提升可能并不足以弥补额外的开销和代价。

img

使用LoRAX部署基于适配器的大语言模型。

在模型开发的早期阶段就应考虑目标部署架构。你选择的模型类型将极大影响其部署方式,并应指导你如何确定实验的优先级。

10. 广泛实验,一次只改变一个参数。

总结: 探索胜于利用:将大部分时间和精力投入到对问题的理解中。每次只调整一个变量,尽量避免陷入细节泥潭。

同时进行大量实验的技巧:

  • 使用模型仓库或电子表格保持井然有序。
  • 尽量并行化实验,但每次只改变一个参数。
  • 预期会有一些繁琐的工作和试错过程。
  • 优先优化迭代速度(从简单到复杂、从小到大)。

以下建议是我们尝试总结自身大语言模型微调方法时得出的。这绝非一份全面的清单,但其中包含了一些我们最喜欢的探索思路。

类别 思路 对质量的影响 对速度的影响 复杂度 描述
架构参数 基础模型 ★★★★★ ★★ 尝试几种不同的基础模型,观察对学生模型性能的影响。就像教师一样,不同的基础模型可能天生就比其他模型更贴近你的任务。
架构参数 精度与量化 ★★★★ ★★★★ ★★ 降低精度会显著减小模型大小,使其能够使用更大的批量进行训练,从而提高吞吐量。虽然量化有时会因精度降低而导致模型准确率略有下降,但并非总是如此。在我们的实验中,这种权衡通常远小于速度提升和模型尺寸缩减带来的收益。
架构参数 Adapter 参数(秩与 alpha) ★★★★ ★★★ ★★ LoRA 中的秩决定了用于近似模型中全秩权重矩阵的低秩矩阵的大小。较高的秩可以增强模型学习复杂模式的能力,但需要训练的参数更多;而较低的秩则更节省参数,但会限制模型的表达能力。
架构参数 基础模型规模 ★★★ ★★★★★ 通过尝试不同规模,感受模型性能与模型大小之间的权衡。某些任务由于其复杂性,可能会从更大规模的模型中获益显著。然而,较大的模型更容易对训练数据过拟合,尤其是在数据集不够大或不够多样化的情况下;或者性能提升可能并不明显。越来越多的……
架构参数 提示词 ★★ ★★ 在教师模型中,提示词的影响非常大;但在监督微调(SFT)中,模型的权重会被直接更新,因此精心设计提示词对质量的直接影响较小。
训练参数 Epochs ★★★★★ ★★★★★ 只要让模型多训练几个 epoch,通常就能得到更好的模型。
训练参数 学习率(LR)及学习率调度 ★★★★★ 适当的学习率能确保模型高效学习,既不会错过最优权重,也不会过度调整。合理的预热策略可以提升训练稳定性和性能,而学习率衰减则有助于在学习复杂模式与避免过拟合之间保持平衡。
训练参数 最大序列长度 ★★★ ★★★ 对于长尾数据,可以考虑截断数据以最大化 GPU 利用率。
训练参数 批量大小 ★★★ ★★★★★ 充分利用 GPU 资源。选择一个不会导致显存溢出的最大批量。
训练策略 课程式学习 ★★★★ ★★★ ★★★★★ 渐进式学习,也称为课程式学习,是一种训练策略,即模型在多个阶段逐步微调,每个阶段使用不同类型的训练数据,通常是从更通用或噪声较多的数据开始,逐渐过渡到更具体、高质量或领域内数据。渐进式学习模拟了人类自然的学习方式:先从宽泛的概念入手,再逐步聚焦到更具体和复杂的主题。以下为 orca-2 中的渐进式学习示例:img
训练策略 RLHF/RLAIF/DPO ★★★★ ★★★★★ ★★★★★ RLHF/RLHAIF/DPO,也被称为“偏好调优”,是指通过强化学习使模型更好地符合人类偏好。这一方法最初由 OpenAI 推广开来,但成本极高,更像是最后一步优化。我们尚未遇到有迫切需求达到这种优化程度的企业。RLHF 与 RLAIF 的高层级示意图如下:img

11. 查看模型的个别错误。

总结: 尽管聚合指标和先进的自动化评估方法能够提供对模型性能的宏观概览,但手动审查模型输出的具体示例,对于深入理解模型性能的定性特征具有无可比拟的价值。

尤其是在生成式场景中,模型性能往往难以用单一明确的指标来概括,因此花时间仔细分析模型在哪些地方、以何种方式出现错误,不仅是评估流程中的一个步骤,更是模型开发过程中至关重要的环节。

识别具体错误: 只有通过检查模型出错的个别案例,才能开始对这些错误进行分类,并理解其本质。模型是否始终在处理某些特定类型的输入时遇到困难?是否存在某些特定的模式或情境,使得错误更容易发生?

发现数据问题: 很多时候,错误的模式可以追溯到数据准备阶段的问题,或是训练集中数据代表性不足。及早发现这些问题,可以节省大量资源和时间,避免将精力浪费在无效的参数调优上。没有什么比耗费数百小时的GPU算力去优化模型参数,却最终发现是数据质量问题更令人沮丧和浪费的了。

img

微调后的LLM损失曲线看起来都差不多,但这些检查点之间的定性差异可能非常巨大。

12. 真正将模型部署并监控于生产环境。

总结: 虽然测试集提供了一个受控的评估环境,但检验模型真正有效性的标准,是它在面对真实用户和实时输入时的表现。将你的模型部署到生产环境中,观察其在实际场景中的表现吧!

把你的模型真正部署并监控于生产环境……真的。无论你是研究人员、工程师,还是介于两者之间的人,亲身体验将模型投入生产的过程,都能让你学到很多宝贵的经验。

模型部署选项

  • 在线实验与逐步上线: 首先将一小部分流量(例如1%,然后10%)引导至学生模型。在扩大规模之前,密切监控关键应用指标的变化,如延迟和用户交互等。其他名称:渐进式/金丝雀发布。
  • 暗启动: 继续在生产环境中使用教师模型,但在后台将一部分流量路由到学生模型。比较学生模型与教师模型预测结果不同的情况,以评估学生模型的质量是否已达到上线标准。其他名称:影子部署。
  • 混合部署: 如果教师模型的表现优于学生模型,可以考虑采用混合部署的方式。学生模型负责处理较为简单、资源消耗较低的查询,而教师模型则处理更复杂的请求。这种方式能够在效率和质量之间取得平衡。其他名称:蓝绿部署。

基础设施保障措施

  • 监控输入: 经过微调的模型由于更加专业化,可能会对特征漂移较为敏感。
  • 监控输出: 建立故障保护机制,对生成的输出进行严格审查。生产环境中的LLM通常会配备基于规则或基于模型的系统,用于识别问题并触发回退机制。需要注意的是,使用另一款LLM来进行输出监控可能会增加延迟。
  • 维护日志: 对所有投入生产的LLM持续记录输入和输出。这些日志对于未来的模型优化或蒸馏工作将极为重要。

贡献

我们非常期待您的反馈!

  • 如果您喜欢这份指南,请给它点个赞!您也可以通过Ludwig Slack频道(链接)、LoRAX Discord服务器(链接),或者LinkedIn联系我们。您的评价将帮助我们证明继续创建类似资源的必要性。

  • 如果您发现任何不准确之处,请提交一个问题以展开讨论。对于不适合通过问题形式提出的内容或疑问,请在GitHub上开启一个新的讨论主题。

  • 本指南是一个持续更新的文档。我们预计会定期进行大小不一的改进。如果您希望及时收到更新通知,请关注我们的仓库(参见说明)。

  • 这份清单中是否还遗漏了其他最佳实践?欢迎随时创建PR!我们承诺会尽快审阅您的建议。

相似工具推荐

openclaw

OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你

349.3k|★★★☆☆|昨天
Agent开发框架图像

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|2天前
开发框架图像Agent

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

143.9k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

107.9k|★★☆☆☆|昨天
开发框架图像Agent

markitdown

MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器

93.4k|★★☆☆☆|昨天
插件开发框架

LLMs-from-scratch

LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目,旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型(LLM)。它不仅是同名技术著作的官方代码库,更提供了一套完整的实践方案,涵盖模型开发、预训练及微调的全过程。 该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型,却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码,用户能够透彻掌握 Transformer 架构、注意力机制等关键原理,从而真正理解大模型是如何“思考”的。此外,项目还包含了加载大型预训练权重进行微调的代码,帮助用户将理论知识延伸至实际应用。 LLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API,而是渴望探究模型构建细节的技术人员而言,这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计:将复杂的系统工程拆解为清晰的步骤,配合详细的图表与示例,让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础,还是为未来研发更大规模的模型做准备

90.1k|★★★☆☆|昨天
语言模型图像Agent