“抱歉,我们无法像这样发货。它太大了……”——生产中的大型语言模型(LLMs)(图片作者绘制)
本文最初发表在Weights & Biases的“Fully Connected”博客上,发布日期为2023年4月21日。
OpenAI的ChatGPT发布似乎打开了生产中大型语言模型(LLMs)的潘多拉魔盒。不仅邻居们现在会跟你闲聊人工智能(AI),而且机器学习(ML)社区正在讨论另一个新术语:“LLMOps”。
LLMs正在改变我们构建和维护AI产品的方式。
LLMs正在改变我们构建和维护AI产品的方式。这将引导出新的工具和最佳实践,用于LLM驱动应用程序的生命周期。
本文首先解释了新出现的术语“LLMOps”及其背景。然后,我们将讨论使用LLMs构建AI产品与使用传统ML模型的区别。基于这些差异,我们将讨论MLOps和LLMOps之间的差异。最后,我们将讨论在不久的将来LLMOps领域可能会出现的发展。
什么是LLMOps?
LLMOps是大型语言模型操作的缩写。其简短定义是,LLMOps是LLMs的MLOps。这意味着LLMOps是一组工具和最佳实践,用于管理LLM驱动应用程序的生命周期,包括开发、部署和维护。
LLMOps是LLMs的MLOps。
当我们说“LLMOps是LLMs的MLOps”时,我们需要先定义LLMs和MLOps这两个术语:
- **LLMs(大型语言模型)**是可以生成人类语言输出的深度学习模型(因此称为语言模型)。这些模型具有数十亿个参数,并在数十亿个单词上进行训练(因此称为“大型”语言模型)。
- **MLOps(机器学习操作)**是一组工具和最佳实践,用于管理ML驱动应用程序的生命周期。
因此,LLMOps是一组工具和最佳实践,用于管理LLM驱动应用程序的生命周期。它可以被视为MLOps的子类,因为LLMs也是ML模型。
为什么会兴起LLMOps?
随着OpenAI在2022年底发布ChatGPT,LLMs受到了很多媒体的关注。自那时以来,许多其他LLM驱动的应用程序已经出现。将LLM驱动的应用程序带入生产环境会带来自己的挑战。这就是为什么LLMOps正在出现并带来新的工具和最佳实践。
早期的LLMs(如BERT和GPT-2)自2018年以来就已经出现了。然而,我们现在——几乎五年后——才经历了LLMOps概念的迅速崛起。主要原因是,LLMs在2022年12月发布ChatGPT时受到了很多媒体的关注。
自那时以来,我们看到许多不同的应用程序利用了LLMs的能力,例如:
- 从著名的ChatGPT到更亲密和个人化的聊天机器人(例如Michelle Huang与她的童年自己聊天),
- 用于编辑或摘要的[写作助手](例如Notion AI),以及专门用于撰写文案(例如Jasper和copy.ai)或合同(例如lexion)的助手,
- 从编写和调试代码(例如GitHub Copilot),到测试代码(例如Codium AI),到查找安全威胁(例如Socket AI)的编程助手,
- 以及更多。
随着越来越多的人开发并将LLM驱动的应用程序带入生产环境,人们分享他们的经验:
“使用LLMs很容易做出很酷的东西,但是很难让它们准备好生产。” ——Chip Huyen [2]
显然,构建准备好生产的LLM驱动应用程序具有自己的一套挑战,与使用传统的ML模型构建AI产品不同。为了解决这些挑战,我们需要开发新的工具和最佳实践来管理LLM应用程序的生命周期。因此,我们看到“LLMOps”这个术语的使用增加。# LLMOps的步骤是什么?
LLMOps的步骤与MLOps类似。然而,构建基于LLM的应用程序的步骤不同,因为出现了基础模型。与从头开始训练LLM不同,重点在于调整预训练的LLM以适应下游任务。
一年多前,Andrej Karpathy [3]描述了未来我们如何构建AI产品的方式:
但最重要的趋势[...]是,由于微调,特别是基础模型的出现,从头开始在某些目标任务上训练神经网络的整个设置正在迅速过时。这些基础模型仅由少数拥有大量计算资源的机构进行培训,大多数应用程序通过轻量级微调部分网络、提示工程或将数据或模型蒸馏到更小的专用推理网络中的可选步骤实现。 —— Andrej Karpathy [3]
这句话可能在第一次阅读时让人感到压抑。但它准确地总结了正在发生的一切,因此让我们在下面的子章节中逐步拆分它。
步骤1:选择基础模型
基础模型是预先训练了大量数据的LLM,可用于各种下游任务。由于从头开始训练基础模型很复杂、耗时且极其昂贵,只有少数机构拥有所需的培训资源[3]。
仅仅为了让你了解:根据Lambda Labs 2020年的一项研究,使用Tesla V100云实例训练OpenAI的GPT-3(具有1750亿个参数)需要355年和460万美元。
目前,AI正在经历社区所谓的“Linux时刻”。目前,开发人员必须在性能、成本、易用性和灵活性之间根据权衡选择两种类型的基础模型:专有模型或开源模型。
专有和开源基础模型(图片作者创作,灵感来自Fiddler.ai)
专有模型是由拥有大型专家团队和大型AI预算的公司拥有的闭源基础模型。它们通常比开源模型更大,因此性能更好。它们也是现成的,因此易于使用。
专有模型的主要缺点是昂贵的API(应用程序编程接口)。此外,闭源基础模型为开发人员提供的适应性更少或没有。
专有模型提供商的示例包括:
开源模型通常以Hugging Face作为社区中心进行组织和托管。通常,它们是比专有模型性能更低的较小模型。但好处是,它们比专有模型更具成本效益,并为开发人员提供更多灵活性。
开源模型的示例包括:
- Stable Diffusion by Stability AI
- BLOOM by BigScience
- LLaMA or OPT by Meta AI
- Flan-T5 by Google
- GPT-J, GPT-Neo or Pythia by Eleuther AI
步骤2:适应下游任务
选择了基础模型后,可以通过其API访问LLM。如果你习惯使用其他API,使用LLM API最初可能会感到有点奇怪,因为不清楚什么输入会导致什么输出。给定任何文本提示,API将返回文本完成,试图匹配你的模式。
这是一个使用OpenAI API的示例。你将提示作为输入提供给API,例如 prompt =“Correct this to standard English:\n\nShe no went to the market.”
。
import openai
openai.api_key = ...
response = openai.Completion.create(
engine = "text-davinci-003",
prompt = "Correct this to standard English:\n\nShe no went to the market.",
...
)
API将输出包含完成的响应的response
,其中response['choices'][0]['text'] =“She did not go to the market.”
主要挑战是尽管强大,但LLM并不万能,因此关键问题是:如何使LLM输出你想要的输出?如何让LLM输出你想要的结果?
在生产中使用LLM的调查中,受访者提到了模型的准确性和幻觉问题。这意味着从LLM API中获得所需格式的输出可能需要进行一些迭代,而且如果LLM没有所需的具体知识,它们可能会产生幻觉。为了解决这些问题,你可以通过以下方式将基础模型适应到下游任务:
- Prompt Engineering是一种调整输入的技术,以使输出符合你的期望。你可以使用不同的技巧来改进提示(请参见OpenAI Cookbook)。其中一种方法是提供一些期望输出格式的示例。这类似于零样本或少样本学习[5]。像LangChain或HoneyHive这样的工具已经出现,以帮助你管理和版本化你的提示模板[1]。
提示工程(图片由作者根据Chip Huyen [c]灵感创作)
- Fine-tuning预训练模型是机器学习中已知的一种技术。它可以帮助提高你的模型在特定任务上的性能。虽然这会增加训练的工作量,但可以减少推理的成本。LLM API的成本取决于输入和输出序列长度。因此,减少输入令牌的数量会降低API成本,因为你不必再在提示中提供示例[2]。
微调LLM(图片由作者根据Chip Huyen [2]灵感创作)
- **外部数据:**基础模型通常缺乏上下文信息(例如,访问某些特定文档或电子邮件),并且可能很快过时(例如,GPT-4是在2021年9月之前的数据上进行的训练)。由于LLM如果没有足够的信息可能会产生幻觉,我们需要能够让它们访问相关的外部数据。已经出现了一些工具,例如LlamaIndex(GPT Index)、LangChain或DUST,可作为连接(“链接”)LLM和其他代理和外部数据的中央接口[1]。
- **嵌入:**另一种方法是从LLM API中提取嵌入形式的信息(例如电影概述或产品描述),并在其上构建应用程序(例如搜索、比较或推荐)。如果np.array不足以存储你的嵌入以进行长期记忆,你可以使用向量数据库,例如Pinecone、Weaviate或Milvus[1]。
- **替代方案:**由于这个领域正在快速发展,LLM可以在人工智能产品中发挥更多的作用。一些例子是指令调整/提示调整和模型蒸馏[2, 3]。
步骤3:评估
在经典的MLOps中,使用保留验证集的指标验证ML模型的性能。但是,如何评估LLM的性能?如何确定响应是好还是坏?目前,组织似乎正在对其模型进行A/B测试[5]。
为了帮助评估LLM,已经出现了一些工具,例如HoneyHive或HumanLoop。
步骤4:部署和监控
LLM的完成在发布之间可能会发生很大变化[2]。例如,OpenAI已经更新了其模型以减轻不当内容生成的问题,例如仇恨言论。因此,在Twitter上搜索短语“as an AI language model”现在会显示无数的机器人。
这表明构建LLM驱动的应用程序需要监视底层API模型的变化。
已经出现了一些用于监视LLM的工具,例如Whylabs或HumanLoop。
LLMOps与MLOps有何不同?
MLOps和LLMOps之间的差异是由于我们如何使用经典ML模型与LLM构建人工智能产品的不同而引起的。这些差异主要影响数据管理、实验、评估、成本和延迟。
数据管理
在经典的MLOps中,我们习惯于数据饥饿的ML模型。从头开始训练神经网络需要大量的标记数据,即使是对预训练模型进行微调,也需要至少几百个样本。虽然数据清理是机器学习开发过程中的重要部分,但我们知道并接受大型数据集的不完美。在LLMOps中,fine-tuning与MLOps类似。但是prompt engineering是一个零样本或少样本学习的环境。这意味着我们只有少量但是精心挑选的样本[5]。
实验
在MLOps中,无论是从头开始训练模型还是对预训练模型进行fine-tune,实验看起来都很相似。在两种情况下,你将跟踪输入,例如模型架构、超参数和数据增强,以及输出,例如指标。
但在LLMOps中,问题是“是否进行prompt engineering还是fine-tune”[2,5]。虽然在LLMOps中进行fine-tuning看起来与MLOps相似,但prompt engineering需要不同的实验设置,包括prompt的管理。
评估
在经典的MLOps中,模型的性能是在保留的验证集[5]上使用评估指标进行评估的。由于评估LLM的性能更加困难,目前组织似乎正在使用A / B测试[5]。
成本
传统MLOps的成本通常在于数据收集和模型训练,而LLMOps的成本则在于推断[2]。尽管我们可以预期在实验过程中使用昂贵的API会产生一些成本[5],但Chip Huyen [2]表明长提示的成本在推断中。
延迟
调查中LLM in production survey [4]提到的另一个问题是延迟。 LLM的完成长度会显着影响延迟[2]。尽管在MLOps中也必须考虑延迟问题,但在LLMOps中更加突出,因为这对于开发中的实验速度[5]和生产中的用户体验都是一个重大问题。
LLMOps的未来
LLMOps是一个新兴领域。随着这个空间的发展速度,做出任何预测都很困难。甚至不确定“LLMOps”这个术语是否会保留。我们只知道我们将看到许多LLM的新用例,以及管理LLM生命周期的工具和最佳实践。
AI领域正在快速发展,可能会使我们现在写的任何东西在一个月内过时。我们仍处于将LLM驱动的应用程序引入生产的早期阶段。有许多问题我们没有答案,只有时间才能告诉我们事情将如何发展:
- “LLMOps”这个术语是否会保留?
- LLMOps在MLOps的情况下会如何发展?它们会合并还是成为单独的操作集?
- AI的“Linux时刻”将如何发挥作用?
我们可以肯定地说,我们期望很快会看到许多新的开发和新的工具和最佳实践出现。此外,我们已经看到为基础模型降低成本和延迟的努力[2]。这绝对是一个有趣的时期!
总结
自OpenAI的ChatGPT发布以来,LLM目前是AI领域的热门话题。这些深度学习模型可以生成人类语言的输出,使它们成为用于对话AI、写作助手和编程助手等任务的强大工具。
然而,将LLM驱动的应用程序引入生产环境也带来了一系列挑战,这导致了一个新术语“LLMOps”的出现。它指的是用于管理LLM驱动的应用程序的生命周期的工具和最佳实践,包括开发、部署和维护。
LLMOps可以被看作是MLOps的子类。然而,构建LLM驱动的应用程序所涉及的步骤与构建具有经典ML模型的应用程序的步骤不同。
与其从头开始训练LLM,重点是将预训练的LLM适应于下游任务。这涉及选择基础模型,使用LLM在下游任务中,评估它们,并部署和监控模型。
虽然LLMOps仍然是一个相对较新的领域,但随着LLM在AI行业中的普及,它预计将继续发展和演变。总的来说,LLM和LLMOps的崛起代表着构建和维护AI驱动产品的重大转变。
参考文献
[1] D. Hershey 和 D. Oppenheimer (2023)。面向语言模型的开发工具-预测未来 (于2023年4月14日访问)
[2] C. Huyen (2023)。为生产构建LLM应用程序 (于2023年4月16日访问)
[3] A. Karpathy (2022)。深度神经网络:33年前和33年后 (于2023年4月17日访问)
[4] MLOps社区 (2023)。生产中的LLM响应 (于2023年4月19日访问)
[5] S. Shankar (2023)。Twitter主题 (于2023年4月14日访问)
译自:https://medium.com/@iamleonie/understanding-llmops-large-language-model-operations-4253820922
评论(0)