介绍
OpenAI发布的ChatGPT引发了人们对大型语言模型(LLMs)的兴趣,现在人人都在谈论人工智能。但这不仅仅是友好的对话;机器学习(ML)社区引入了一个新术语叫做LLMOps。我们都听说过MLOps,但LLMOps又是什么呢?嗯,这就是关于如何在整个生命周期中处理和管理这些强大的语言模型的一切。
LLMs正在改变我们创建和维护基于人工智能的产品的方式,这种转变导致了对新工具和最佳实践的需求。在本文章中,我们将详述LLMOps及其背景。我们还将探讨如何使用LLMs构建人工智能产品与传统机器学习模型的区别。此外,由于这些区别,我们还将比较MLOps(机器学习运营)与LLMOps的不同之处。最后,我们将讨论在LLMOps领域可以预期的令人兴奋的发展。
学习目标:
- 深入了解LLMOps及其发展。
- 通过示例学习使用LLMOps构建模型。
- 了解LLMOps与MLOps的区别。
- 对LLMOps的未来有所了解。
本文作为数据科学博文马拉松的一部分发表。
什么是LLMOps?
LLMOps代表着大型语言模型操作,类似于MLOps,但专门为大型语言模型(LLMs)设计。它需要使用新的工具和最佳实践来处理与LLM驱动的应用程序有关的一切,从开发到部署和持续维护。
为了更好地理解这个概念,让我们来解释一下LLMs和MLOps的含义:
- LLMs是可以生成人类语言的大型语言模型。它们拥有数十亿的参数,并且是在数十亿的文本数据上进行训练的。
- MLOps(机器学习运营)是一组用于管理机器学习驱动应用程序生命周期的工具和实践。
现在我们已经解释了基本概念,让我们更深入地探讨这个话题。
关于LLMOps的热潮是什么?
首先,像BERT和GPT-2这样的LLMs自2018年以来就已经存在。然而,现在,在近五年后,我们才遇到了LLMOps这个概念的迅猛崛起。主要原因是LLMs在2022年12月发布ChatGPT时受到了很多媒体的关注。
自那时以来,我们看到了许多不同类型的应用程序充分利用LLMs的强大能力。这包括从熟悉的ChatGPT之类的聊天机器人,到用于编辑或摘要的更个人化的写作助手(例如Notion AI),以及用于文案撰写的高效助手(例如Jasper和copy.ai)。它还包括用于编写和调试代码的编程助手(例如GitHub Copilot)、测试代码的助手(例如Codium AI)以及识别安全问题的助手(例如Socket AI)。
随着越来越多的人将LLM驱动的应用程序开发和投入生产,人们开始贡献他们的经验。
“用LLMs做一些酷炫的东西很容易,但让它们适合投入生产非常困难。” – Chip Huyen
显然,构建适合投入生产的LLM驱动应用程序具有其自身的一系列困难,与使用传统机器学习模型构建人工智能产品不同。我们必须开发新的工具和最佳实践来应对这些挑战,以管理LLM应用程序的生命周期。因此,我们看到了对“LLMOps”一词的扩展使用。
LLMOps 中涉及的步骤是什么?
LLMOps 的步骤至少与 MLOps 类似。然而,构建一个基于 LLM 的应用程序的步骤与训练 LLMs 从头开始是不同的,因为关注点在于驯化预训练的 LLMs 以完成以下任务。
已经超过一年前,Andrej Karpathy 讲述了未来构建 AI 产品的过程将如何改变:
“但最重要的趋势是,通过从头开始训练神经网络以解决某个特定任务的整个设置,由于微调的出现,特别是随着 GPT 等基本模型的出现,这一趋势迅速过时了。这些基本模型由寥寥无几具备大量计算资源的机构进行训练,而大多数应用则通过对网络的部分轻量微调、提示工程或将数据或模型处理为更小、特定目标的推理网络的可选步骤来实现。” - Andrej Karpathy。
这段引述可能第一次阅读时会让人惊讶,但它确切地总结了最近的一切,让我们通过以下步骤逐步描述它。
步骤 1:选择基本模型
基于 LLMs 的基础模型或基本模型是在大量数据上进行预训练并可用于广泛任务的 LLMs。由于从头开始训练基本模型很困难、耗时且极其昂贵,只有少数机构拥有所需的训练资源。
以此为例,根据 Lambda Labs 在 2020 年的一项研究,使用 Tesla V100 云实例训练 OpenAI 的 GPT-3(拥有 1750 亿个参数)需要 355 年和 460 万美元。
AI 目前正经历着社区所称的“Linux 时刻”。目前,开发者必须在专有模型和开源模型之间进行选择,考虑性能、成本、易用性和灵活性之间的权衡。
专有模型是由拥有大量专家团队和大型 AI 预算的公司所拥有的闭源基础模型。它们通常比开源模型更大,并具有更好的性能。它们通常是可购买的,而且相对容易使用。专有模型的主要缺点是昂贵的 API(应用程序编程接口)。此外,闭源基础模型对于开发者的适应性较少或无弹性。
专有模型提供商的示例包括:
开源模型通常在 HuggingFace 上作为一个社区中心组织和托管。它们通常是比专有模型能力更低的较小模型。但是,开源模型比专有模型更经济,并为开发者提供更多的灵活性。
开源模型的例子有:
- Stability AI 的 Stable Diffusion
- BigScience 的 BLOOM
- Meta AI 的 LLaMA 或 OPT
- Google 的 Flan-T5
代码:
此步骤涉及导入所有所需的库。
from transformers import GPT2LMHeadModel, GPT2Tokenizer# Can you load pre-trained GPT-3 model and tokenizermodel = GPT2LMHeadModel.from_pretrained("gpt2")tokenizer = GPT2Tokenizer.from_pretrained("gpt2")
以上代码的输出:
步骤 2:适应以下任务
一旦您选择了基本模型,就可以通过其 API 访问 LLM。如果您通常使用其他 API,使用 LLM APIs 的工作在之前可能会感到有些奇怪,因为不总是清楚哪个输入会导致什么输出。根据任何文本提示,API 将返回一个文本完成,试图匹配您的模式。
这里是一个使用OpenAI API的示例。您将API输入作为提示,例如,prompt =“将此更正为标准英语:\n\n他没有去市场。”
import openaiopenai.api_key = ...response = openai.Completion.create( engine = "text-davinci-003", prompt = "将此更正为标准英语:\n\n他没有去市场。", # ... )
API将输出一个回复,其中包含完成响应[‘choices’][0][‘text’] = “他没有去市场。”
主要挑战是尽管非常强大,但LM并不是万能的,因此,关键问题是:如何使LLM输出所需的结果?
LLM在生产调查中需要注意的一个问题是模型准确性和幻觉。这意味着从LLM API获取所需格式的输出可能需要一些迭代,同时,如果LLM没有所需的具体知识,它们可能会产生幻觉。为了解决这些问题,您可以根据以下方式调整基本模型针对以下任务:
- 提示工程是一种改进输入以使输出符合预期的技术。您可以使用不同的技巧改进提示(请参阅OpenAI Cookbook)。其中一种方法是提供一些预期输出格式的示例。这类似于零样本学习或少样本学习。像LangChain或HoneyHive这样的工具已经可用,可以帮助您管理和版本控制您的提示模板。
- 微调预训练模型是机器学习中的一种技术。它可以改善模型在特定任务上的性能和准确性。尽管这会增加训练工作量,但它可以减少推理成本。LLM API的成本取决于输入和输出序列的长度。因此,减少输入令牌的数量可以降低API成本,因为您不再必须在提示中提供示例。
- 外部数据:基本模型通常缺少上下文信息(例如访问某些特定文档),并且可能很快过时。例如,GPT-4是在2021年9月之前的数据上进行训练的。由于LLM在没有足够信息的情况下可以想象一些事情,我们需要能够让它们访问重要的外部数据。
- 嵌入:一种稍微复杂的方法是从LLM API中提取嵌入形式的信息(例如产品描述),并在其之上构建应用程序(例如搜索、比较、推荐)。
- 替代方法:由于这个领域的快速发展,LLM在AI产品中有许多其他应用。一些例子包括指令调整/提示调整和模型改进。
代码:
from transformers import GPT2LMHeadModel, GPT2Tokenizer, TextDataset, Trainer, TrainingArguments# 加载您的数据集dataset = TextDataset(tokenizer=tokenizer, file_path="your_dataset.txt")# 对模型进行微调training_args = TrainingArguments( output_dir="./your_fine_tuned_model", overwrite_output_dir=True, num_train_epochs=3, per_device_train_batch_size=4,)trainer = Trainer( model=model, args=training_args, data_collator=data_collator, train_dataset=dataset,)trainer.train()trainer.save_model()
第三步:模型评估
在传统的MLOps中,使用保留的验证集进行ML模型的演示,使用指标来表示模型的性能。但是,如何评估LLM的执行情况?如何确定输出是好还是坏?目前,似乎组织机构正在对其模型进行A/B测试。
为了帮助评估LLM,出现了类似HoneyHive或HumanLoop的工具。
代码:
from transformers import pipeline# 创建一个文本生成管道generator = pipeline("text-generation", model="your_fine_tuned_model")# 生成文本并进行评估generated_text = generator("提示文本")print(generated_text)
第四步:部署和监控
LLMs的成就在不同版本之间可能有很大的变化。例如,OpenAI已经更新了其模型,以缓解不当内容的生成,例如仇恨言论。因此,通过在Twitter上搜索短语“作为一个AI语言模型”,现在会发现无数的机器人。
已经出现了用于监控LLMs的工具,例如Whylabs或HumanLoop。
代码:
# 导入所需的库from flask import Flask, request, jsonifyfrom transformers import GPT2LMHeadModel, GPT2Tokenizerimport logging# 初始化Flask应用app = Flask(__name__)# 可以加载微调GPT-2模型和标记模型=GPT2LMHeadModel.from_pretrained("./your_fine_tuned_model")tokenizer = GPT2Tokenizer.from_pretrained("gpt2")# 设置日志logging.basicConfig(filename='app.log', level=logging.INFO)# 定义用于生成文本的路由@app.route('/generate_text', methods=['POST'])def generate_text(): try: data = request.get_json() prompt = data['prompt'] # 生成文本 generated_text = model.generate( tokenizer.encode(prompt, return_tensors='pt'), max_length=100, # 根据需要调整最大长度 num_return_sequences=1, no_repeat_ngram_size=2, top_k=50, top_p=0.95, )[0] generated_text = tokenizer.decode(generated_text, skip_special_tokens=True) # 记录请求和响应 logging.info(f"为提示生成的文本:{prompt}") logging.info(f"生成的文本:{generated_text}") return jsonify({'generated_text': generated_text}) except Exception as e: # 记录任何异常 logging.error(f"错误:{str(e)}") return jsonify({'error': '发生了错误'}), 500if __name__ == '__main__': app.run(host='0.0.0.0', port=5000)
以上代码的工作原理:
- 导入所需的库:这意味着导入所需的库和模块。Flask用于构建Web应用程序,transformers用于加载和处理GPT-2模型,logging用于记录信息。
- 初始化Flask应用程序。
- 加载模型:您可以加载预训练的GPT-2模型和相应的标记模型。您可以将./your_fine_tuned_model替换为您实际微调的GPT-2模型的路径。
- 设置日志:这表示记录应用程序。它将日志文件名设置为app.log,并将日志级别设置为INFO。
- 使用Flask设置路由:它指定当向/generate_text端点发出POST请求时,将调用generate_text函数。
- 生成文本:此代码从传入的POST请求中提取JSON数据。它假设JSON数据包括一个“prompt”字段,该字段是用于生成其他文本的文本。
- 使用GPT-2生成文本:本节使用加载的GPT-2模型和标记器根据提供的提示生成文本。它设置不同的生成参数,例如最大长度的生成文本、要生成的系列的数量和采样参数。
- 解码和返回生成的文本:生成文本后,它解码生成的系列并删除特殊标记。然后,它以JSON响应的形式返回生成的文本。
- 记录请求和响应:它记录日志文件中的请求提示和生成的文本。
- 处理异常:如果在文本生成过程中发生任何异常,则捕获并记录为错误。返回带有错误消息的JSON输出以及状态码500,表示服务器错误。
- 运行Flask应用:它确保只有在直接执行脚本时才运行Flask应用程序。它在主机’0.0.0.0’和端口5000上运行应用程序,使其可以从任何IP地址方便地访问。
以上代码的输出:
输入提示:
#{ "prompt": "从前有一天"}输出提示:{ "generated_text": "从前有一天,在遥远的土地上,住着一个..."}进口弯道
LLMOps与MLOps有何不同?
LLMOps与MLOps之间的区别源于我们如何构建经典机器学习模型和LLM模型的人工智能产品。这些差异主要影响数据管理、实验、评估、成本和延迟。
数据管理
在标准的MLOps中,我们通常使用对数据需求较高的机器学习模型。从头开始训练神经网络需要大量标记数据,即使是对预训练模型进行微调,也需要至少几百个样本。然而,数据清理对机器学习开发过程至关重要,因为我们知道并接受大型数据集存在缺陷。
在LLMOps中,微调与MLOps类似。但是,提示工程是零样本学习或少样本学习的情况。这意味着我们只有少量但精心挑选的样本。
实验
在MLOps中,无论是从头开始训练模型还是对预训练模型进行微调,实验过程看起来都很相似。在这两种情况下,您将路由输入,例如模型架构、超参数和数据增强,以及度量输出。
但在LLMOps中,问题是是选择提示工程还是微调的问题。然而,在LLMOps中,微调与MLOps看起来很相似,而提示工程则涉及到管理提示的不同实验设置。
评估
在经典的MLOps中,通过使用一个验证数据集和一个评估指标来评估模型的性能。由于评估LLM的性能更加困难,目前组织似乎正在使用A/B测试来进行评估。
成本
传统MLOps的成本通常在于数据采集和模型训练,而LLMOps的成本在于推理。虽然我们在实验过程中可能会因使用昂贵的API而产生一些成本,但Chip Huyen表明,长提示的成本在于推理。
速度
LLM在生产调查中被提到的另一个关注点是延迟。LLM的完成长度显着影响延迟。虽然MLOps中也存在延迟问题,但在LLMOps中更加突出,因为这对开发过程中的实验速度和生产中的用户体验至关重要。
LLMOps的未来
LLMOps是一个新兴领域。随着这个领域的快速发展,很难做出任何预测。即使“LLMOps”这个术语是否会长久存在都是可疑的。我们唯一确定的是我们将看到许多LLM和工具的新用例以及最佳实践来管理LLM的生命周期。
人工智能领域正在迅速发展,我们现在写的任何东西可能在一个月后就过时了。我们仍处于将LLM驱动的应用程序引入生产的早期阶段。有很多问题我们还没有答案,只有时间能告诉我们事情将如何发展:
- “LLMOps”这个术语是否会长久存在?
- 在MLOps的背景下,LLMOps将如何发展?它们会一同发展,还是会成为不同的操作集?
- 人工智能的“Linux时刻”会如何演变?
我们可以肯定的是,我们很快将看到许多新的发展、新的工具和最佳实践。此外,我们已经看到了为基础模型降低成本和降低延迟的努力。这绝对是令人兴奋的时代!
结论
自OpenAI的ChatGPT发布以来,LLM已成为人工智能领域的热门话题。这些深度学习模型可以生成人类语言的输出,使其成为用于对话型人工智能、编程助手和写作助手等任务的强大工具。
然而,将LLM驱动的应用程序引入生产环境也面临着一系列挑战,这导致了一个新术语“LLMOps”的出现。它指的是用于管理LLM驱动应用程序的生命周期的一系列工具和最佳实践,包括开发、部署和维护。
LLMOps可以看作是MLOps的子类别。然而,构建LLM驱动的应用程序所涉及的步骤与使用基本机器学习模型构建应用程序的步骤不同。在LLMOps中,重点不是从头训练LLM,而是将预训练的LLM适应于特定任务。这涉及选择一个基础模型,使用LLM进行任务处理,对其进行评估,以及部署和监控模型。尽管LLMOps仍然是一个相对新领域,但随着LLM在人工智能行业变得更加流行,它肯定会继续发展和演变。
主要要点:
- LLMOps(Large Language Model Operations)是一个科学领域,专注于管理像ChatGPT这样的强大语言模型的生命周期,改变了基于人工智能的产品的创建和维护方式。
- 利用GPT-3、GPT-3.5和GPT-4这样的大型语言模型(LLMs)的应用增加导致了LLMOps的兴起。
- LLMOps的过程包括选择基本模型,将其适应特定任务,通过A/B测试评估模型性能,并了解与LLM驱动的应用程序相关的成本和延迟问题。
- 在数据管理(少样本学习)、检查(提示工程)、评估(A/B测试)、成本(推理相关成本)和速度(延迟反映)方面,LLMOps与传统的MLOps有所不同。
总的来说,LLMs和LLMOps的兴起描述了构建和维护基于人工智能的产品的重要转变。希望您喜欢这篇文章。您可以在LinkedIn上与我联系。
常见问题
本文中显示的媒体不属于Analytics Vidhya所有,仅由作者自行决定使用。