大语言模型正在如何改变我们构建人工智能产品的方式,以及重塑 MLOps 的全貌
OpenAI 发布的 ChatGPT 就像是打开了潘多拉的魔盒,释放出了生产环境中的大语言模型(LLMs)。这不仅使得你的邻居在闲聊时开始提起人工智能(AI),而且机器学习(ML)领域也开始热议一个新的概念:“大语言模型运维 (LLMOps)”。
大语言模型正在改变我们构建和维护人工智能产品的方式。这将催生一系列新的工具和最佳实践,应用于由大语言模型驱动的应用程序的整个生命周期。
本文将首先阐释“大语言模型运维(LLMOps)”这一新兴术语及其背景。我们会探讨使用大语言模型构建 AI 产品与传统机器学习(ML)模型的不同之处,并基于这些差异比较机器学习运维 (MLOps) 和大语言模型运维 (LLMOps)。最后,我们将展望未来 LLMOps 领域的发展趋势。
本文将涵盖以下内容:
目录
- LLMOps 是什么?
- 为何 LLMOps 会兴起?
- LLMOps 涉及哪些步骤?
- LLMOps 和 MLOps 有什么区别?
- LLMOps 的未来
- 结语
- 参考资料
LLMOps 是什么?
LLMOps 代表大语言模型的操作管理 (Large Language Model Operations)。简单来说,LLMOps 就是专为大语言模型 (LLMs) 设计的机器学习操作管理 (MLOps)。它主要是指一套新的工具和最佳实践,用于管理基于 LLM 的应用程序的整个生命周期,包括开发、部署和维护。
谈到“LLMOps 是大语言模型的 MLOps”,我们首先需要明确以下两个概念:
- 大语言模型 (LLMs) 是一种深度学习模型,能够以人类语言生成输出,因此被称为语言模型。这些模型具有数十亿的参数,并在数十亿词汇上接受训练,因此被称为大语言模型。
- 机器学习操作管理 (MLOps) 指的是一套工具和最佳实践,用于管理机器学习驱动的应用程序的生命周期。
明确了这些定义后,我们可以进一步探讨 LLMOps。
为何 LLMOps 会兴起?
早期的大语言模型(LLM),如 BERT 和 GPT-2 自 2018 年起就已经出现。然而,直到近五年后,我们才真正见证了大语言模型运维(LLMOps)这一概念的迅猛发展。其主要原因是 2022 年 12 月发布的 ChatGPT 引起了广泛的媒体关注。
从那时起,我们看到了各种基于大语言模型的应用,如:
-
聊天机器人,从知名的 ChatGPT 到更个性化的对话体验(例如,Michelle Huang 与她童年时的自己对话),
-
写作助手,涵盖从编辑或摘要(如 Notion AI)到专门的文案写作(如 Jasper 和 copy.ai)或合同撰写(如 lexion),
-
编程助手,包括编写和调试代码(如 GitHub Copilot),测试代码(如 Codium AI),以及发现安全威胁(如 Socket AI),
随着越来越多的人开发并将基于大语言模型的应用投入生产,他们开始分享各自的经验:
“用大语言模型(LLM)打造有趣的东西很简单,但要使其达到生产就绪状态却颇具挑战。” – Chip Huyen [2]
显然,构建可投入生产的大语言模型应用面临着与传统机器学习模型不同的挑战。为此,我们需要开发新的工具和最佳实践来管理这些应用的整个生命周期。因此,我们看到了“LLMOps”这个术语的日益普及。
LLMOps 涉及哪些步骤?
大语言模型运维 (LLMOps) 在某些方面与机器学习运维 (MLOps) 相似。然而,随着基础模型如 GPT 的出现,构建基于大语言模型的应用的步骤有所区别。现在的重点不再是从零开始训练大语言模型,而是如何将已经预训练好的大语言模型适配到具体的下游任务中去。
一年多前,Andrej Karpathy [3] 就预见到了未来构建 AI 产品的过程将会发生的变化:
最重要的趋势之一 […] 是传统的从头开始针对特定任务训练神经网络的方式 […] 正在因为微调技术的发展,特别是随着基础模型如 GPT 的出现,而变得越来越过时。这些基础模型通常只有少数拥有强大计算资源的机构能够训练,而大多数应用则是通过对网络的某些部分进行轻量级的微调、进行提示工程 (prompt engineering),或者采取可选的数据或模型精简 (distillation) 步骤,将其转换为更小型、专用的推理网络来实现。 […] - Andrej Karpathy [3]
初次阅读这段话可能会感觉复杂难懂,但它精确地概括了当前的发展动态。接下来,我们将在后续小节中,逐步揭示这些步骤的具体内容和意义。
第 1 步:选择基础模型
基础模型是预先在大量数据上进行训练的 LLM (Large Language Model),它们能够应用于多种不同的下游任务。鉴于从零开始训练一个基础模型既复杂又耗时,而且成本极高,因此只有少数机构具备这样的训练资源 [3]。
以此为例:根据 Lambda Labs 在 2020 年的研究,要训练拥有 1750 亿参数的 OpenAI GPT-3,需要使用 Tesla V100 云实例,耗时长达 355 年,成本高达 460 万美元。
当前 AI 正处于一个被业界称为“Linux 时刻”的阶段。目前,开发者面临的选择是,在性能、成本、使用便捷性以及灵活性之间权衡,从而决定使用专有模型还是开源模型。
专有模型通常是由那些拥有庞大专家团队和充足 AI 预算的公司开发的闭源基础模型。这些模型往往规模更大,性能更优,而且大多数情况下是即买即用,使用起来非常方便。
然而,专有模型的主要缺点在于它们的 API (应用程序编程接口) 成本较高。此外,这些闭源模型在为开发者提供适应性和灵活性方面存在一定局限。
一些知名的专有模型提供商包括:
-
OpenAI(GPT-3、GPT-4)
-
co:here
-
AI21 Labs(Jurassic-2)
-
Anthropic(Claude)
而开源模型则通常在HuggingFace这样的社区平台上进行组织和托管。与专有模型相比,这些模型规模较小,能力也相对有限。但它们的优势在于成本效益更高,且为开发者提供了更大的灵活性。
开源模型的例子包括:
-
Stable Diffusion 由 Stability AI 提供。
-
BigScience 开发的 BLOOM,这是一款具有 1760 亿参数的多语言大语言模型(Multilingual Language Model),现已准备好供公众使用。
-
Meta AI 开发的 LLaMA 或 OPT,是由 Meta AI 推出的创新产品。
-
Google 开发的 Flan-T5,这是一种新型的零样本学习(Zero-Shot Learning)技术,旨在提高自然语言处理(NLP)的效能。
-
Eleuther AI 开发的 GPT-J, GPT-Neo 或 Pythia,展示了 Eleuther AI 在 AI 领域的深厚实力。
第 2 步:适应下游任务
当您选定了自己的基础模型之后,就可以通过它的 API 来接入大语言模型 (LLM)。如果您有使用其他 API 的经验,刚开始接触大语言模型的 API 可能会觉得有点不同寻常,因为您可能无法预先准确判断某个输入会产生什么样的输出。只要给定一个文本提示,API 就会返回一个文本补全,努力按照您的输入模式给出回应。
例如,这里有一个如何使用 OpenAI API 的实例,您可以向 API 提供一个提示,比如 prompt = “Correct this to standard English:nnShe no went to the market.”。
API 将返回一个包含文本补全的回应:response [‘choices’][0][‘text’] = “She did not go to the market.”
主要的挑战在于,尽管大语言模型功能强大,但它们并不是万能的。因此,关键的问题是:如何引导大语言模型输出您期望的结果?
在大语言模型生产应用调查 [4]中,一些参与者表达了对模型准确性和误输出的担忧。这意味着,要从大语言模型 API 获取符合您预期格式的输出可能需要多次尝试。此外,如果大语言模型缺乏所需的具体知识,它们有时会产生不准确的输出。为了解决这些问题,您可以采取以下措施,使基础模型更好地适应下游任务:
- 提示工程 [2, 3, 5] 是一种技巧,通过调整输入让输出结果符合我们的预期。你可以运用各种方法来优化提示(参见 OpenAI Cookbook)。例如,提供一些符合预期输出格式的实例,这与零样本(Zero-shot)或少样本(Few-shot)学习场景相似 [5]。目前已有工具如 LangChain 和 HoneyHive,帮助你高效管理和更新你的提示模板 [1]。
- 在机器学习中,对预训练模型进行精调(Fine-tuning)[2, 3, 5] 是一种常见的技术。它能够提升模型在特定任务上的性能。虽然这意味着增加训练的工作量,但却可以降低推理成本。大语言模型(LLM)API 的费用取决于输入和输出序列的长度,减少输入 Token 的数量意味着可以降低 API 使用成本,因为你不必再在提示中加入示例 [2]。
-
外部数据:基础模型往往缺乏上下文信息(比如,无法访问特定的文档或邮件),并且可能很快变得过时(例如,GPT-4 是基于2021 年 9 月之前的数据训练的)。鉴于大语言模型(LLM)在信息不足时可能出现误判,我们需要能够向它们提供相关的外部数据。如 LlamaIndex (GPT Index)、LangChain 和 DUST 等工具已经能够作为连接大语言模型(LLM)到其他智能体和外部数据的中心平台 [1]。
-
Embeddings(嵌入):另一种方法是从大语言模型 API(如电影概要或产品描述)中提取嵌入(Embeddings)信息,并在此基础上构建应用程序(如搜索、比较或推荐)。如果 np.array 不能长期有效地存储您的嵌入信息,您可以使用像 Pinecone、Weaviate 或 Milvus 这样的向量数据库 [1]。
-
替代方案:随着这一领域的快速演进,大语言模型在 AI 产品中的应用方式越来越多。一些例子包括 instruction tuning/prompt tuning 和模型蒸馏 [2, 3]。
第 3 步:评估
在传统的机器学习运维(MLOps)中,机器学习模型通常在保留的验证集上进行验证 [5],通过特定的指标来衡量模型性能。但对于大语言模型,我们如何评估其性能呢?如何判断它的回应是优质还是不佳?目前,许多组织正通过 A/B 测试来评估他们的模型 [5]。
为了更好地评估大语言模型,已经出现了像 HoneyHive 或 HumanLoop 这样的工具。
💡
第 4 步:部署和监控
大语言模型的输出结果在不同版本之间可能会有显著变化 [2]。例如,OpenAI 为了减少生成不当内容(如仇恨言论)而更新了其模型。因此,目前在 Twitter 上搜索“作为一种 AI 语言模型”这一短语,会发现大量的机器人账号。
这说明,构建基于大语言模型的应用时,需要关注底层 API 模型的持续变化。
目前,像 Whylabs 或 HumanLoop 这样的工具已经被开发出来,用于监控大语言模型。
LLMOps 与 MLOps 的主要区别
MLOps 和 LLMOps 的区别主要源于使用传统机器学习模型和大语言模型 (LLM) 构建 AI 产品的不同方法。这些差异涉及到数据管理、实验、评估、成本和响应时间等方面。
数据管理
在传统的 MLOps 中,我们通常面对的是对数据需求量大的机器学习模型。从零开始训练神经网络需要大量的标注数据,即便是对已预训练的模型进行微调,也至少需要数百个样本。虽然数据清洗是机器学习开发过程中不可或缺的一环,但我们也清楚并接受大型数据集自身的不完美之处。
而在 LLMOps 中,微调的过程与 MLOps 类似。不过,所谓的“提示工程”(prompt engineering)则属于零样本或少样本学习的范畴,意味着我们只用到少量但精心挑选的样本 [5]。
实验
在 MLOps 的实验过程中,无论是全新训练模型还是对预训练模型进行微调,其过程看起来都相似。在这两种情况下,都需要跟踪输入(如模型结构、超参数和数据增强方式)和输出(如性能指标)。
然而,在 LLMOps 中,核心问题在于选择进行提示工程还是微调 [2, 5]。
尽管在 LLMOps 中,微调过程与 MLOps 类似,但提示工程则需要一套不同的实验设置,包括对提示语句的管理。
评估
在传统 MLOps 中,通常会在一个独立的验证集 [5] 上利用特定评估指标来评估模型的性能。但由于大语言模型 (LLM) 的性能更难以评估,目前很多组织似乎倾向于使用 A/B 测试方法 [5]。
成本
传统 MLOps 的主要成本在于数据收集和模型训练。而 LLMOps 的主要成本则在于模型推理阶段 [2]。虽然在实验阶段使用昂贵的 API 可能会产生一定成本 [5],但 Chip Huyen [2] 指出,长提示的主要成本在于推理过程中。
响应时间
在一项关于大语言模型应用于生产环境的调查 [4] 中,许多回应者提到了响应时间的问题。大语言模型完成任务的时间长度显著影响了响应时间 [2]。虽然在 MLOps 中也需考虑响应时间问题,但在 LLMOps 中,这一问题尤为突出,因为它直接关系到开发阶段的实验速度 [5] 和最终产品中的用户体验。
LLMOps 的未来
大语言模型运维(LLMOps)是一个正在崭露头角的领域。考虑到这个领域的快速发展,作出任何预测都显得颇为困难。我们甚至不能确定“大语言模型运维”这个术语是否会长期沿用。但可以肯定的是,我们将见证许多新的大语言模型(LLMs)应用场景、工具以及管理其生命周期的最佳实践的涌现。
人工智能领域的飞速发展可能很快就会让我们现在的观点过时。我们目前还处于将大语言模型推动的应用投入生产的初期阶段。面对诸多未知,只有时间能够揭晓一切:
-
“大语言模型运维”这个术语能否长存?
-
在机器学习运维(MLOps)的大背景下,大语言模型运维将如何演变?它们会合并还是分化成独立的操作集?
-
人工智能的“Linux 时刻”将如何展开?
我们可以自信地说,我们期待看到许多新的发展、工具和最佳实践的涌现。同时,我们已经开始看到降低基础模型成本和延迟的努力 [2]。这无疑是一个令人振奋的时代!
总结
自 OpenAI 推出 ChatGPT 以来,大语言模型(LLMs)在人工智能领域已成为热门话题。这些深度学习模型能够生成类似人类的语言输出,使其成为对话 AI、写作助手和编程助手等任务的强大工具。
然而,将大语言模型驱动的应用投入生产带来了一系列挑战,从而催生了“大语言模型运维”这一新术语。它指的是一套用于管理大语言模型驱动应用的全生命周期的工具和最佳实践,涵盖开发、部署和维护环节。
大语言模型运维可以视为机器学习运维(MLOps)的一个分支。但构建大语言模型驱动的应用与传统机器学习模型的应用有所不同。
在大语言模型的构建过程中,重点不在于从零开始训练,而是在于如何将预训练的模型适应于下游任务。这包括选择一个基础模型、在下游任务中应用大语言模型、对其进行评估,以及部署和监控。
尽管大语言模型运维还是一个相对较新的领域,但随着大语言模型在人工智能行业的广泛应用,它预计将持续发展和演变。总体而言,大语言模型及其运维的崛起代表了在构建和维护人工智能驱动产品方面的重大转变。
参考文献
[1] D. Hershey 和 D. Oppenheimer (2023). 语言模型的开发工具 (DevTools) – 预测未来 (访问于 2023 年 4 月 14 日)
[2] C. Huyen (2023). 构建适用于生产环境的大语言模型 (LLM) 应用程序 (访问于 2023 年 4 月 16 日)
[3] A. Karpathy (2022). 深度神经网络 (Deep Neural Nets):33 年前和 33 年后 (访问于 2023 年 4 月 17 日).
[4] MLOps 社区 (2023). 生产环境中使用的大语言模型 (LLM) 的实践反馈 (访问于 2023 年 4 月 19 日)
[5] S. Shankar (2023). Twitter 讨论串 (访问于 2023 年 4 月 14 日)