确定可实现的最佳性能,在成本与性能之间进行权衡。
前两篇文章,我们讨论了产品决策,浅聊了开发技术,如果不来点更深入的硬菜,对开发人员不太过瘾,上菜~
模型选择
随着越来越多的公司入局AI,市面上的模型已经非常多,而且保持着较高的更新频率,那么着手开发的时候,该怎么做选择?
事实上,你需要关心的不是哪个模型最好,好与不好没有绝对标准,你需要关注哪个模型最适合你的应用。
同时,模型的类型也因开发阶段的不同而不同。
如果只是调整提示词,可以先使用性能最强的模型评估可行性,再逐步缩小量级。
如果已经决定微调,可以先用一个小模型做测试,再逐步转向符合硬件限制的最大模型。
整体策略为:确定可实现的最佳性能,在成本与性能之间进行权衡。
评估方法
考察模型时,区分什么可以改变(硬属性),什么难以改变(软属性)。难以改变的因素(如协议、控制权)会大幅缩小可选模型的范围,而可以改变的因素提供了优化空间。
评估工作流包括:
1、剔除硬属性不符合需求的。
2、利用公开信息(基准测试和排行榜),确定最具潜力的。
3、使用自身业务流水线进行实验,找到最合适的。
4、持续监控,及时发现问题,以改进应用。
开源模型与API
开源模型: 指任何人都可以下载和使用,且训练数据也公开的模型。
API: 托管并运行模型,能接收用户请求、生成响应,并将结果返回给用户的服务,称为推理服务。用户与之交互的接口称为模型 API。
通常,模型提供商会开源性能较弱的模型,而将性能最强的模型通过 API 付费使用。
模型 API 可以通过模型提供商、云服务提供商或第三方提供商获取。
开源模型可以由任何 API 提供商支持,选择自由度更高,商业模型只能通过模型开发者授权的 API 访问。
需要注意的是,API 通常按用量收费,大量使用时可能导致成本快速膨胀,而在使用模型或者API时,还需要考虑数据隐私和知识产权等问题。
微调
微调始于一个基座模型,该模型已具备目标任务所需的部分能力。微调的目的是让其在特定任务中表现更好。
一个常见现象是,在基准测试中表现优异的通用模型,未必能胜任你的任务,此时微调将格外有效。比如,你的应用需要输出特定结构(如 JSON 或 YAML 格式)。
另一个极具价值的应用是缓解偏见,原理是,让基座模型接触经过精心筛选的数据,来抵消历史数据造成的偏见。
与基于提示词的方法相比,微调需要更多的资源,不仅包括数据和硬件资源,还包括机器学习领域的专业人才。因此,通常建议在充分尝试提示工程之后再考虑微调。
RAG还是微调
除了微调,RAG也是我们介绍过的提升模型表现的一种手段,具体用哪种,取决于模型面临的问题是信息缺失还是行为表现。
信息缺失意味着没有相关信息,或者信息过时。
行为表现指模型输出的内容虽然事实正确,但与任务要求不符。
如果是信息缺失,RAG系统可以有效解决问题。如果存在行为问题,微调可能更有效。
内存瓶颈
由于基础模型的规模庞大,内存成为制约其应用的主要瓶颈,了解模型所需的内存有助于选择合适的硬件。
内存的计算公式为:
内存=模型权重所需的内存+激活值所需的内存+梯度所需的内存+优化器状态所需的内存
影响内存占用的因素:
- 微调涉及神经网络训练,内存需求远高于推理。
- 模型参数量、可训练参数量及数值表示精度。
模型的内存占用取决于模型本身、工作负载和用于减少内存使用的各种优化技术,会随着模型规模的增大而迅速增加。
如果一个模型的推理需要 30 GB 内存,24 GB 内存的芯片就无法满足需求。
PEFT
早期阶段,模型规模较小,人们可以对整个模型进行微调,称为全量微调。
在全量微调中,可训练参数量与模型参数量完全相同。参数量越大,内存占用就越大。
如何在大幅减少可训练参数的同时,达到接近全量微调的性能?人们提出了 PEFT 技术。
PEFT 方案通过在模型的合适位置插入额外的参数,用少量的可训练参数实现强大的微调性能。
这里有个说法叫参数高效,如果一种技术能在使用比全量微调少几个数量级的可训练参数的情况下,达到接近全量微调的性能,就认为是参数高效的。
PEFT 使得在更经济的硬件上进行微调成为可能。
微调策略
OpenAI 的最佳实践给出了两种开发路径。
渐进路径:
- 使用成本最低、最快的模型测试微调代码,确保运行无误。
- 使用中等规模的模型验证数据质量。如果训练损失未随数据量增加而下降,说明数据可能存在问题。
- 使用最好的模型进行几次实验,探索性能提升的极限。
- 一旦获得良好的结果,就使用所有模型进行一次训练,以绘制成本-性能曲线,并选出最适合实际场景的模型。
蒸馏路径:
- 基于小规模数据集,使用预算范围内最强大的模型训练出尽可能好的模型。
- 使用微调后的模型生成更多的训练数据。
- 使用新的数据集训练一个成本更低的模型。
最简单的微调方式是使用微调 API,你只需上传数据并选择基座模型即可。
与模型推理 API 类似,微调 API 可以由模型提供商、云服务提供商或第三方提供。这种方法的局限性在于你只能使用 API 所支持的基座模型。此外,API 可能不会提供所有可用于优化微调性能的参数选项。因此,微调 API 适合希望快速、便捷地完成任务的用户,对于想要更多自定义选项的用户可能受限。
数据集
模型的质量取决于训练数据的质量。没有高质量的数据,即使拥有顶尖的团队和无限的计算资源,也无法微调出优秀的模型。
人们对数据关注程度的日益增加,使得数据相关工作已经从顺带处理的边缘任务演变为专职专岗,同时催生了以数据为中心的AI,它与以模型为中心的AI形成鲜明对比。
以模型为中心,侧重于优化模型,包括设计新架构、扩大模型规模或开发新的训练技术。
以数据为中心,侧重于优化数据,包括开发新的数据处理技术和创建高质量的数据集。
在深度学习发展早期,许多 AI 基准测试是以模型为中心的。例如给定 ImageNet 数据集,人们使用相同的数据集训练出性能最佳的模型。
近年来,越来越多的基准测试转向以数据为中心:给定相同的模型,人们尝试开发能让该模型表现最好的数据集。
在实际应用中,要取得实质性的技术进步,通常需要同时在模型和数据两个方面进行投入。
优质数据可以使模型更强大、更安全,并能处理更长的上下文。相反,劣质数据可能导致模型偏见加剧、幻觉现象增多。数据中的错误不仅会损害模型性能,还会浪费资源。
需要的数据类型取决于具体任务和模型的学习目标。整体来看,遵循三大标准:数据质量、数据覆盖度和数据量。
数据质量
少量高质量的数据往往优于大量含噪数据。
所谓高质量数据,是能帮助你高效、可靠地完成工作的数据。
一般具备六大特征:
- 与训练任务紧密相关。
- 符合任务的具体要求。
- 在不同样本和标注员之间保持一致。
- 遵循预期的格式要求。
- 足够独特。
- 合规。
数据覆盖度
训练数据应覆盖其预期解决的所有问题范围。
现实世界中的用户通常面临各种各样的问题,表达问题的方式也千差万别。因此,能够捕捉应用多样化使用模式,对于提升模型性能至关重要。
不同的应用对数据多样性的维度要求各异。比如:翻译工具不需要语言多样性,要的是精准,但会受益于风格多样性。面向全球客户推荐产品的聊天机器人不一定需要领域多样性,但语言多样性和文化多样性非常重要。
数据量
询问模型需要多少数据,就像询问人需要多少钱一样,因情况而异。
主要三个因素:
微调范围: 全量微调通常能带来最佳性能,但所需的数据量比PEFT高几个量级。
任务复杂度: 简单任务所需的数据量远少于复杂任务。
基座模型的性能: 基座模型的性能越接近目标性能,所需的样本量就越少。
简而言之,如果数据量较少,可以考虑对更先进的模型使用PEFT方法;如果数据量较多,则可以对较小的模型进行全量微调。
数据获取
数据获取的目标是生成一个规模足够大且质量和多样性符合需求的数据集,同时确保数据处理方式尊重用户隐私并符合相关法规。
最重要的数据通常源自你自己的应用,因为它与你的任务高度契合,这在其他数据源中极难实现。如果能利用用户生成的数据不断改进产品,你将获得巨大的竞争优势。
当然,这肯定不是唯一方案,实际应用中,需要采用组合搭配的方式,通过多个渠道,从多个数据源获取数据。
还有一种方式,是直接使用公开数据集:
- Hugging Face和Kaggle托管的数据集。
- 谷歌数据集搜索工具——Dataset Search。
- Open Data Network提供了几万个数据集。
- 云服务提供商,最著名的是AWS的Open Data。
- 机器学习框架通常内置小型数据集,可以直接加载,例如TensorFlow Datasets。
总结
AI工程系列终于迎来收尾。
我们从介绍大模型、提示词,到讲解RAG和智能体,再到开发应用的准备工作,最终完成模型开发相关专业概念的深度探秘。
既考虑到普通用户的知识盲点,又考虑到正在进行AI应用开发,但对相关考量因素感到迷茫的开发者。
内容不涉及任一款应用和任一家模型提供商,因此具备普适性,也不易过时,这也是选择它的原因。
马上到来的下个系列,我们重点进入实操,请拭目以待~
更多好文章第一时间接收,关注公众号:“前端说书匠”