理解LLMOps: Large Language Model Operations
理解LLMOps: Large Language Model Operations
对于像我一样的小白来说,本文是一篇非常不错的LLMs入门介绍文档。来自:Understanding LLMOps: Large Language Model Operations
本文首先解释了新术语"LLMOps"及其背景,然后讨论使用LLMs和传统ML模型构建AI产品的不同之处,并基于这些不同点总结出MLOps和LLMOps的差异。最后我们将讨论在不久的将来,LLMOps将会发生什么样的变化。
什么是LLMOps?
LLMOps是Large Language Model Operations的缩写,可以将LLMOps认为是LLMs的MLOps,这也意味着,LLMOps本质上是管理基于LLM的应用的一系列工具和最佳实践,包括开发、部署和维护。
上面说到"可以将LLMOps认为是LLMs的MLOps",这里看下LLMs和MLOps的定义:
- LLMs(large language models):可以生成人类语言的深度学习模型,因此被称为语言模型(language models)。该模型有数十亿个参数,并在数十亿个单词的基础上进行训练,因此被称为大语言模型。
- MLOps (machine learning operations):用于管理基于ML应用的生命周期一系列工具和最佳实践。
为什么LLMOps会崛起?
早期的LLMs,如BERT和GPT-2出现于2018年左右,而现在(差不多五年之后),LLMOps 概念正在迅速崛起,其中最主要的原因是在2022年12月发布的ChartGPT吸引了大量媒体的关注。

从那之后,我们看到了很多基于LLMs构建的应用,如:
- 从著名的ChatGPT到更亲密和人性化的聊天机器人(如Michelle Huang chatting with her childhood self)。
- 从编辑或摘要的写作助手(例如,Notion AI)到专门的文案助手(例如,Jasper 和 copy.ai))或合同助手(例如,lexion) 。
- 从用于编写和调试代码的编程助手(如 GitHub Copilot),到测试(如Codium AI)并找出安全威胁(Socket AI)的助手。
随着越来越多的基于LLM的应用的开发和产品化,人们得出了如下经验:
使用LLMs可以很容易地做一些很酷的事情,但同时很难将它产品化 - Chip Huyen
不同于传统的基于ML模型的AI产品,基于LLM的应用的产品化过程有其特定的挑战。为了解决这些问题,我们需要开发新的工具和最佳实践来管理LLM应用的生命周期,因此出现了术语"LLMOps"。
LLMOps涉及哪些步骤?
LLMOps涉及的步骤和MLOps类似。但由于基础模型的出现,构建基于 LLM 的应用程序的步骤有所不同。构建基于LLM的应用的重点在于如何使用预先训练好的LLMs来服务下游任务,而非从头训练LLMs。大约在一年前,Andrej Karpathy描述了未来构建AI产品的流程:
但是,最重要的趋势[ ... ]是,由于微调(调整LLM参数以适应特定任务的过程),特别是像GPT这样的基础模型的出现,从零开始训练神经网络的方式很快就过时了。这些基础模型由少数拥有大量计算资源的机构进行训练,而大多数应用则是通过对神经网络的一部分进行微调、prompt engineering(指通过设计和优化生成模型的提示或输入,以获得更好的生成结果。它是一种通过调整输入文本的方式来引导模型生成所需输出的技术),或是(可选步骤)将数据或模型蒸馏成更小、专用于推理的网络来实现的。
当你第一次读到这句话的时候,可能会觉得有些不可思议,但它准确地概括了目前正在发生的一切,下面让我们在接下来的小节中逐步解读它。
第一步:选择基础模型
基础模型是基于大量数据事先训练好的一类LLMs,可以广泛用于下游任务。由于从头训练一个基础模型相当复杂、耗时且昂贵,因此只有一小部分机构拥有所需的资源。
换个角度来看:根据Lambda Labs 2020年的研究表明,如果使用一台训练Tesla V100云实例来训练OpenAI的GPT-3(大约1750亿个参数),大约需要355年,并花费460万美元。
人工智能目前正在经历社区所称的Linux 时刻。目前,开发者需要从两种类型的基础模型之间,基于性能、成本、上手难度和灵活性进行抉择。这两种模型为:专有模型和开源模型:

专有模型是由拥有大量专家团队和大量AI预算的公司所属的闭源基础模型,这些模型通常要大于开源模型,且性能更好,同时,这些模式也是现成的,通常上手难度较低。
专有模型的主要缺点是其昂贵的APIs,此外,闭源基础模型对于开发者来说提供的灵活性较少或没有。专有模型提供商举例如下:
开源模型通常以社区中心的方式组织和托管在 HuggingFace上。相比专有模型来说,这些模型更小,能力也更小。但好的方面在于,它们更加经济,并给开发者带来更大的灵活性。开原模型举例如下:
BLOOM (BigScience)
GPT-J, GPT-Neo 或 Pythia (Eleuther AI)
步骤2:适应下游任务
一旦选择了基础模型,就可以通过其API访问该LLM。如果你之前跟其他类型的API打过交道,此时会发现和LLM的APIs打交道会有些奇怪,因为它并没有实现规定什么输入会产生什么输出。通过输入任意文本提示,API会返回一段尝试匹配输入的文本。
下面是一个如何使用OpenAI API的例子,通过API输入提示,如prompt = "Correct this to standard English:\n\nShe no went to the market."

API会返回['choices'][0]['text'] = "She did not go to the market."`
最主要的挑战在于,LLMs并不是无所不能的,如何让LLM返回你期望的内容?
在LLM的产品化调查中,受访者提到的一个关注点是模型的准确性和幻觉问题,这意味着从LLM API中获取期望格式的输出可能需要一些迭代。此外,如果LLM没有所需的特定知识,它可能会出现幻觉。
为了解决这些问题,可以在下游任务中使用如下方式来采纳基础模型:
Prompt Engineering:是一种对输入进行调整,从而使输出更符合预期的一种技术。可以使用不同的技巧提升提示的效果(参见OpenAI Cookbook)。一种方式是提供一些符合期望输出格式的例子,类似于零样本学习或少样本学习的方式。目前已经出现了像LangChain 或 HoneyHive这样的工具来帮助管理prompt模版并对其进行版本控制。

对预训练模型进行微调是ML中已知的一种技术。它可以帮助提升特定任务的模型性能。虽然这种方式增加了训练的工作量,但它可以降低推测的成本。LLM API的费用取决于输入和输出的长度。因此,降低输入的token数就可以降低API的花费(因为无需再给提示提供例子)。

外部数据:基础模型通常缺少上下文信息(如访问某些特定的文档或邮件)且会很快过期(如GTP-4训练的是2021年9月之前的数据)。由于LLMs在无法获取足够的信息时会出现幻觉,因此我们需要给予它们访问相关数据的能力。目前已经出现一些工具,如LlamaIndex (GPT Index), LangChain或 DUST,可以作为连接LLMs和其他代理和外部数据的中央接口。
嵌入:另外一种方式是以嵌入的方式从LLM APIs抽取数据(如,电影总结或产品描述),并基于这些数据来构建应用(如查询、比较或推荐)。如果np.array无法存储足够长的数据,则可以选择使用如 Pinecone, Weaviate或 Milvus等矢量数据库。
步骤3:评估
传统的MLOps中,通过保留的验证集对ML模型进行验证,并通过指标评估模型的性能。但如何评估LLM的性能?如何决定一个返回是好是坏?目前一些组织似乎在使用A/B来测试其模型。
为了帮助评估LLMs,出现了如HoneyHive 和 HumanLoop 这样的工具。
步骤4:部署和监控
LLM的完成结果在不同版本之间可能会发生重大变化。例如,OpenAI已经通过更新其模型来减少生成不适当内容(如仇恨言论)。因此,在Twitter上搜索短语"as an AI language model"现在会显示出无数的机器人账号。

如上展示了在构建基于LLM的应用程序时需要监控底层API模型的变化。
目前已经出现了用于监控LLMs的工具,如 Whylabs 或 HumanLoop。
LLMOps和MLOps的区别?
MLOps和LLMOps之间的差异是由于在构建基于传统ML模型和LLM模型的AI产品时的差异所导致的。主要体现在数据管理、实验、评估、成本和延迟。
数据管理
传统的MLOps通常使用data-hungry ML模型。从头训练一个神经网络需要大量标签数据,即便是微调一个预训练的模型至少也需要几百个例子。尽管数据清洗是ML开发过程中不可或缺的一部分,但我们知道并接受大型数据集存在的不完美之处。
在LLMOps中,微调方式类似MLOps,但prompt engineering是一种零样本学习或少样本学习方式,这意味着我们只需要精心挑选的样本即可。
实验
在MLOps中,实验方式和从头训练一个模型或微调一个预训练的模型一样。两种情况下都需要跟踪输入,如模型架构、超参数和数据增强,以及输出(如指标)。
但在LLMOps中,问题变为是否进行prompt engineering或微调。
LLMOps中的微调和MLOps很像,但prompt engineering的实验配置却有所不同(如提示管理)。
评估
在传统的MLOps中,模型的性能是通过在保留的验证集上使用评估指标进行评估的。而由于LLM的性能更加难以评估,因此目前各大组织采用了A/B测试。
成本
传统的MLOps的成本通常在数据采集和模型训练,而LLMOps的成本则在推理。虽然实验过程中使用昂贵的API可能会产生一些费用,但Chip Huyen表明,长提示的成本主要在于推理阶段。
延迟
在LLM在生产中的调查中,受访者提到的另一个关注点是延迟。LLM的完成长度会显著影响延迟。尽管在MLOps中也必须考虑延迟问题,但在LLMOps中则更加突出,这对于开发过程中的实验速度以及生产环境中的用户体验来说都是一个重要问题。
LLMOps的未来
LLMOps是一个新型的领域,随着该领域的快速发展,一切皆有可能,即使是这里的LLMOps定义都有可能发生变化。我们唯一可以确信的是会出现更多LLMs的使用场景,并会出现更多的工具和最佳实践来管理LLM的生命周期。
AI的领域在急速演进,有可能本文在一个月后就过时了。我们仍然处在将LLM推向生产的初始阶段,目前仍然有很多问题没有解答,只有时间会告诉我们事情会如何发展:
- 这里的LLMOps的术语是否会发生变化?
- LLMOps是如何根据MLOps进行演化?它们会一起变化,还是会独立演进?
- AI的"Linux时刻"如何展开?
我们可以肯定地说,预计很快会看到新的工具和最佳实践的出现。此外,我们已经看到针对基础模型的成本和延迟降低方面已经付出的努力。这绝对是令人兴奋的时代!
总结
随着OpenAI的ChatGPT的发布,LLMs已经成为AI领域的热门话题。这些深度学习模型可以以人类的语言生成输出,这使得它们成为会话AI、写作助手和编程助手等场景下的强大工具。
但将基于LLM的应用推向生产又面临这一些列挑战,这也导致了一个新术语的出现,LLMOps。它指代管理基于LLM的应用的生命周期的一些列工具和最佳实践,包括开发、部署和维护。
LLMOps可以看做是MLOps的一个子类。但构建基于LLM的应用的步骤又和构建基于传统ML模型应用的步骤有所不同。
相比从头开始训练一个LLM,应用LLM的重点变为了如何微调预训练的LLM以适应下游任务。这其中涉及选择一个基础模型、在下游任务中使用LLM,以及在评估模型后进行部署和监控。
虽然LLMOps仍然是一个相对较新的领域,但随着LLM在人工智能行业的普及,它预计将继续发展和演变。总体而言,LLM和LLMOps的崛起代表着在构建和维护以AI为动力的产品方面的重大转变。
TIps
理解LLMOps: Large Language Model Operations的更多相关文章
- NLP问题特征表达基础 - 语言模型(Language Model)发展演化历程讨论
1. NLP问题简介 0x1:NLP问题都包括哪些内涵 人们对真实世界的感知被成为感知世界,而人们用语言表达出自己的感知视为文本数据.那么反过来,NLP,或者更精确地表达为文本挖掘,则是从文本数据出发 ...
- 用CNTK搞深度学习 (二) 训练基于RNN的自然语言模型 ( language model )
前一篇文章 用 CNTK 搞深度学习 (一) 入门 介绍了用CNTK构建简单前向神经网络的例子.现在假设读者已经懂得了使用CNTK的基本方法.现在我们做一个稍微复杂一点,也是自然语言挖掘中很火 ...
- language model ——tensorflow 之RNN
代码结构 tf的代码看多了之后就知道其实官方代码的这个结构并不好: graph的构建和训练部分放在了一个文件中,至少也应该分开成model.py和train.py两个文件,model.py中只有一个P ...
- 将迁移学习用于文本分类 《 Universal Language Model Fine-tuning for Text Classification》
将迁移学习用于文本分类 < Universal Language Model Fine-tuning for Text Classification> 2018-07-27 20:07:4 ...
- #论文阅读# Universial language model fine-tuing for text classification
论文链接:https://aclweb.org/anthology/P18-1031 对文章内容的总结 文章研究了一些在general corous上pretrain LM,然后把得到的model t ...
- Sequence Models Week 1 Character level language model - Dinosaurus land
Character level language model - Dinosaurus land Welcome to Dinosaurus Island! 65 million years ago, ...
- Traditional Language Model
Traditional Language Model通常用于回答下述问题: How likely is a string of English words good English ? \(p_{LM ...
- [IR] Tolerant Retrieval & Spelling Correction & Language Model
Dictionary不一定是个list,它可以是多种形式. 放弃Hash的原因: 通常,tree是比较适合的结构. From: http://www.cnblogs.com/v-July-v/arch ...
- A Neural Probabilistic Language Model
A Neural Probabilistic Language Model,这篇论文是Begio等人在2003年发表的,可以说是词表示的鼻祖.在这里给出简要的译文 A Neural Probabili ...
- tensorflow world language model
上文提到了pytorch里的world language model,那么怎么能不说tensorflow的实现呢,还是以tensorflow ptb的代码为例说说. 地址: https://githu ...
随机推荐
- vue组件上绑定原生事件
将原生事件绑定在组件上 .native 修饰符: 子组件 <template> <div class="demo"> <h2>我是子组件< ...
- # 重要-即时通讯IM开源项目OpenIM关于版本管理及v2.3.0发布计划
越来越多的客户把OpenIM用到了生产环境,由于新特性持续迭代和bug修复,会涉及到后续的升级方案,为了让大家后续从容应对,本文重点总结OpenIM对未来版本管理的思路和方案.同时,官网对于文档进行了 ...
- 使用rider调试lua
emmylua1.3.5及以上版本支持rider调试,但emmylua的新版本只支持rider2020及以上版本,所以如果想用rider来调试lua,就要升级rider为2020,emmylua插件从 ...
- 2.8 CE修改器:寻找共享代码
本关我们将学习共享代码,在C语言中角色属性都是以结构体的方式进行存储的,而结构体所存储的信息都是连续性的,这一关我们将会解释如何处理游戏中的共用代码,这种代码是通用在除了自己以外的其他同类型对像上的常 ...
- 5.14 汇编语言:仿写Switch选择结构
选择结构,也称为switch语句,是计算机编程中的一种控制结构,用于根据表达式的值选择不同的执行路径.它允许程序根据表达式的值来决定执行哪个代码块,从而实现多分支选择逻辑.switch语句由一个表达式 ...
- Docker从认识到实践再到底层原理(二-1)|容器技术发展史+虚拟化容器概念和简介
前言 那么这里博主先安利一些干货满满的专栏了! 首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助. 高质量博客汇总 然后就是博主最近最花时间的一 ...
- 解决docker push镜像到私有仓库时的报错【http: server gave HTTP response to HTTPS client】
一:解决docker push镜像到私有仓库时的报错[http: server gave HTTP response to HTTPS client]
- 吉特日化MES 与周边系统集成架构
作者:情缘 出处:http://www.cnblogs.com/qingyuan/ 关于作者:从事仓库,生产软件方面的开发,在项目管理以及企业经营方面寻求发展之路 版权声明:本文版权归作者和博客园 ...
- Pandas数据合并
目录 1) 在单个键上进行合并操作 2) 在多个键上进行合并操作 使用how参数合并 1) left join 2) right join 3) outer join(并集) 4) inner joi ...
- LGV引理
LGV引理是用来统计DAG中固定若干起点和终点情况下的选择不相交链的方案数的. 同样用来优化计数问题,但是比Pólya定理友好多了,这也就是为什么它能够被直接糊到NOI考场上. 对于一张DAG,每条边 ...