淘金热中的 AI/ML 最佳实践

AI/ML Best Practices During a Gold Rush

引言

加利福尼亚淘金热始于 1848 年,持续到 1855 年。据估计,大约有 30 万人从美国其他地区和国外迁往加利福尼亚。经济估算表明,平均只有半数人获得了适度的利润。其余的人要么赔钱,要么收支平衡。很少有淘金者获得了可观的利润。

尽管如此,黄金并非这些年里赚钱的唯一途径。事实证明,淘金热初期加利福尼亚最富有的人是一位名叫塞缪尔·布伦南的人。淘金热开始时,他买下了旧金山所有可用的采矿用品,并以可观的利润卖给了新来的矿工。另一位富有创造力的商人利维·施特劳斯意识到,艰苦的工作条件需要耐用的服装。因此,他于 1853 年开始在旧金山销售牛仔布工作服。简而言之,做供应商比做矿工更好。

对于矿工来说,加利福尼亚淘金热并非一项可以完全分析和计划的投资。如果你想参与其中,你必须离开家人,踏上前往加利福尼亚漫长而艰辛的旅程。到达那里后,你购买用品并开始挖掘。这是 1849 年所能做的最好的事情。简而言之,淘金者要么“孤注一掷”,要么远离加利福尼亚。

AI/ML 热潮与加利福尼亚淘金热类似,工具供应商占据优势——无论组织成功与否,他们都能获利。对失败公司的每一笔销售都与对成功公司的相同销售价值相同,当然,失败的公司无法续订许可证。在 AI/ML 领域,云提供商、计算供应商、存储供应商和芯片制造商将获益最多。

与淘金热不同,AI/ML 的采用是可以计划的。它应该被计划。本文探讨了组织如何从小处着手,改进内部工具和流程,以及智能地采用能够进行生成式 AI 的大型语言模型 (LLM)。

从一个简单的问题开始

对 LLM 更好的称呼应该是“训练复杂且昂贵”的模型。不幸的是,这不像“大型语言模型”那样朗朗上口。关键是,LLM 不是开始使用 AI/ML 的好方法。更好的方法是寻找低垂的果实——找到贵组织中可以从能够进行简单预测的模型中受益的领域。这可能是一个回归、分类或聚类问题。构建预测单个值(回归)、对数据进行分类或聚类的模型所需的计算量远小于 LLM,因此您可以用较少的投资获得价值。此外,在构建回归、分类或聚类解决方案时所建立的工具和流程将使您的团队和基础设施准备好应对大型语言模型等更复杂的项目。

让我们看看在构建您的第一个生产模型时,您应该实施的这些流程和工具。

投资 AI/ML 工作流的所有阶段

AI/ML 工作流从原始数据的非结构化存储开始,到在生产环境中提供模型预测结束。为每个模型开发阶段使用合适的工具将加快流程并产生更好的结果。从高层次来看,此工作流类似于下面的图形。

存储

对于存储,您需要一个面向未来的解决方案。总有一天,您可能需要支持 PB 级的数据,并为正在训练模型的 GPU 提供数据。无法跟上 GPU 速度的存储解决方案会导致 GPU 等待。等待的 GPU 是浪费。这就是软件定义的高性能对象存储发挥作用的地方。当您采用此架构时,无论对象存储是在低成本基础设施上使用还是在高端集群上使用,工程师都使用相同的接口。在具有 NVMe 驱动器的 Kubernetes 集群上进行 MinIO 的高端部署可以跟上最快的 GPU。这一点很重要,因为等待数据的 GPU 是未充分利用的 GPU。

预处理、特征工程、模型训练

考虑使用 Kubeflow、MLflow 和 Airflow 等工具来构建 数据管道模型训练管道,以用于工作流的预处理、特征工程和模型训练阶段。您越有效地运行实验并跟踪结果,您的模型就越好。

如果您没有很多 GPU,请不要担心。分布式训练是一种从现有 CPU 中榨取每一盎司计算能力的方法。 PyTorchTensorFlow(这两种最流行的模型训练框架)都提供了分布式训练的库。如果您想利用数据中心中现有的集群,则可以考虑使用 Ray 等库。

模型测试

在测试模型时,请务必从您的工程师那里提取一个测试集。这是一种了解模型在提供从未见过的数据时的表现如何的好方法。您还可以使用测试集来确保新版本的模型优于旧版本。

模型服务

最后,TorchServeTensorFlow ServingKServe 等工具可以在生产环境中为您的模型提供服务。

一旦您在组织中收集了所有低垂的果实,您就需要将生成式 AI 功能纳入您的应用程序。在查看 LLM 选项之前,让我们根据 LLM 的大小了解一下成本。

训练大型语言模型的成本

公共 LLM(来自 OpenAI 和微软的 ChatGPT、来自 Meta 的大型语言模型 Meta AI (LLaMA) 以及来自 Google 的 Pathways 语言模型版本 2 (PaLM 2))是通用 LLM。它们需要能够处理来自人类整个记录历史的所有主题的请求。因此,这些模型非常庞大,相应的成本也很高。

例如,考虑一下 Meta 最近发布的关于其最新和最大 LLM(称为 LLaMA)的统计数据。该模型包含 650 亿个参数。它使用 2048 个 Nvidia A100 GPU 在 1.05 万亿个单词上进行训练。训练耗时 21 天。也就是 100 万个 GPU 小时。一个 A100 GPU 的成本大约为 10,000 美元。仅 GPU 的总成本约为 2050 万美元。可以将其视为本地训练成本。并且在 650 亿个参数的情况下,它小于 OpenAI 目前的 GPT 模型(如 ChatGPT-3),后者拥有 1750 亿个参数。对于大多数组织而言,构建如此庞大的模型在成本上是难以承受的,无论您选择哪种计算方式(购买的 GPU 或云)。此外,您的模型可能不需要所有这些信息。另一种选择是探索其他选项。这些其他选项是

  • 使用较少数据从头开始训练大型语言模型
  • 使用来自公共 LLM 的 API
  • 微调现有的 LLM
  • 使用检索增强生成

本文的其余部分将介绍每个选项。让我们首先了解从头开始构建 LLM(但使用较少数据)需要什么。

从头开始训练大型语言模型

如果所用数据量小于用于训练公共 LLM 的数据量,则在您选择的语料库上训练的 LLM 的训练成本将更低。(如果不是,那么此选项可能不适合您。请考虑使用前面部分中讨论的公共 LLM 之一。)如果您的语料库来自特定领域或行业,那么它提供的答案也将更具体。另一个好处是,此选项使您可以完全控制模型看到的所有信息。不要将此选项与微调预训练模型(稍后讨论)混淆。当您从头开始训练模型时,您从一个没有任何知识的模型开始。换句话说,是您的代码将首次实例化模型并将其发送到第一个时期。可以考虑使用来自开源 LLM 的源代码作为起点。这将为您提供来自经过验证的 LLM 的模型架构。

当您控制 LLM 所看到的所有信息时,您基本上是在构建一个特定领域的 LLM。对于拥有大量专有信息并对特定行业有深入了解的公司来说,此类 LLM 会产生良好的效果。医疗保健、专业服务和金融服务是一些想到的行业。如果您受到严格监管并且需要控制所有使用的数据,这可能也是最佳选择。

接下来,让我们看看一个根本不需要训练的选项,其成本基于使用情况。

使用来自公共 LLM 的 API

所有主要的公共 LLM 都通过 API 公开其模型。使用这些 API 是一种快速的方法,可以将生成式 AI 功能添加到您的应用程序中,而无需自行托管模型或购买额外的基础设施来处理所需的额外计算。如果决定继续构建自己的自定义 LLM,它也将作为性能基准。(这里的性能是指响应的准确性。)

使用这些 API 比将用户在界面中输入的问题传递给 API 更复杂一些。发送到公共 LLM API 的有效负载称为“提示”。提示由问题以及可能有助于 LLM 生成准确响应的其他上下文组成。上下文甚至可以包含您希望 LLM 纳入其答案的新信息。最后,如果所提问题是与 LLM 之前对话的一部分,则必须在提示中包含之前的问题和答案。

在选择此选项之前,请务必了解您的预期使用情况并估算您的成本。价格基于提示中发送的“标记”数量。(标记通常是 0.75 个单词。)如果您的应用程序是公共网站,那么此选项可能不是最佳选择。

公开大型语言模型(LLM)存在一些缺点。首先,它们很快就会过时。您可以像前面描述的那样在上下文中添加新信息,但这意味着您必须根据问题找到相关信息。它还会增加您的成本,因为每次请求的令牌数量都会增加。另一个缺点是,如果您正在为提示提供上下文,则可能会将私有数据发送到公共云。请务必检查放入提示中的所有信息的来源,并检查您正在使用的公共 LLM 的数据策略。

如果您不想为每个提示提供上下文,则可以使用其他信息微调模型。接下来让我们看看微调。

微调现有 LLM

“微调”模型是指采用一个已经过训练的模型,并使用其他信息对其进行进一步训练。在 LLM 之前,这通常用于为图像识别创建的模型。假设您有一个使用大型图像数据集(如ImageNet)训练的模型。此模型可以识别许多不同的形状——它是一个通才。如果您需要一个识别危险动物的模型,则可以通过使用危险动物图像集合对其进行进一步训练来微调它。最终模型在检测危险动物方面比原始模型做得更好,因为它拥有更多信息。

大型语言模型也可以进行微调。其工作原理与上面描述的相同。现有的 LLM 可以使用其初始训练时无法获得的信息进行进一步训练,从而使其保持最新,而无需从头开始训练模型。现有的 LLM 还可以使用特定领域的信息进行微调,使其成为该领域的专家,而不是原始的 LLM。

此外,许多公开可用的 LLM 提供微调功能。您可以选择要从中开始的模型,上传用于微调的数据,训练您的自定义模型,然后向其发送请求。如果您需要一个针对敏感数据训练的 LLM,请谨慎使用此选项。您的新模型和您发送用于训练它的数据都将位于公共云中。以下是在微调 ChatGPT 方面的详细信息。

微调听起来可能像是一种万能药,但如果需要频繁进行,微调可能会变得非常昂贵。让我们来看看一种可以在消除重新训练需求的同时生成最新响应的选项。

检索增强生成

检索增强生成 (RAG) 是一种从 LLM 提示的上下文部分中获取最大价值的方法。如前所述,上下文是与原始问题一起发送给 LLM 的其他信息。它可以帮助 LLM 生成更具体的响应。上下文还可以包含 LLM 在训练时无法访问的事实,并且应将其纳入响应中。这听起来可能像是提示中包含的一个奇怪的东西。如果您已经知道答案,为什么要问这个问题呢?创建提示的代码事先不知道问题的答案。相反,它会对问题进行标记化,并使用这些标记在自定义文档数据库中查找文档片段,以将其作为上下文包含在提示中。

RAG 是一种令人兴奋的 LLM 新用途,它可以在无需重新训练的情况下提供微调的好处。在 MinIO,我们与Cnvrg.io 合作创建了一个演示,展示了此技术的价值。下图显示了该解决方案的图表。Cnvrg.io 建立了一个平台,使其客户能够轻松使用 RAG。他们的 Cnvrg.io 平台使用 MinIO 存储最终用于创建提示上下文的文档。Cnvrg.io 利用了 MinIO 的存储桶事件通知 实时更新其文档索引。您可以此处详细了解完整的解决方案。

结论

AI/ML 不必像加利福尼亚淘金热一样展开。组织可以从小处着手,同时改进内部工具和流程。将您的第一个 AI/ML 项目视为寻找您最初的几块金子的过程。但是,它不必像淘金一样随机搜索。每个应用程序都可以从预测中受益,无论是内部业务线应用程序还是公共网站。通过一些分析,您可以找到第一个能够提供最大价值的项目。

在 LLM 方面,它们不必是一项昂贵的任务——而且您不必将所有利润都交给供应商。通过了解所有选项以及每个选项的优缺点,组织可以选择最适合其需求的选择。