02 智能应用程序的新技术栈
在2022年,AIIA 发布了一份关于 MLOps 软件状态的报告,该软件在人工智能开发的数据科学层面发挥作用。该报告是为了帮助数据科学家、数据工程师和系统管理员处理数据收集、清洗、标注、模型训练和部署到生产环境中的复杂挑战而创建的。
MLOps 行业是由在 Google、Meta、Airbnb 和 Aws 等大型软件公司从事机器学习项目的各种工程师和数据科学家创建的。 这些公司帮助将机器学习从大学引入到商业企业中。由于这些团队一直在新型软件开发的前沿工作,他们不得不从零开始构建所有的软件基础设施,以支持这些努力。 许多工程师从中吸取了经验,然后自己创办了公司,为那些希望在自己的业务中利用机器学习能力的传统企业解决这些问题。
MLOps 革命的基本前提是,每家企业都将拥有一支由100或1000名数据科学家和数据工程师组成的团队,并进行先进的机器学习,从头开始训练自己的模型,并将这些模型部署到生产环境中。
然而,现在这个前景越来越不太可能。虽然许多先进的公司确实会训练自己的专有模型,但我们越来越多地看到人们向 "up the stack"
[1]
移动,以更高的抽象水平处理机器学习。
这与历史和技术的模式很相符,我们会 "up the stack"
[1]
,这意味着我们隐藏了以前复杂的东西的复杂性,使更多的人能够做好那件事。
锤子和钉子使得建造多层楼的房子更容易,预切割的标准尺寸的木板也是如此。LAMP 技术栈中有 Linux、Apache、MySQL 和 PHP,使人们更容易构建复杂的网站。
但这仍然不容易,需要大量的编程和设计专业知识。后来,我们有了建立在该技术栈之上的 WordPress,使更多的人能够更轻松地构建简单的网站,而无需任何编程专业知识。后来,我们有了复杂的主题,如 Divi,使得设计一个漂亮的网站变得非常容易。
现在在人工智能领域也正在发生同样的事情。我们正在 "up the stack"
[1]
,大多数团队不再需要收集、清理和标记数据集,然后从头开始训练模型、测试、部署和运行,而是使用外部团队创建的基础模型或底座模型,并将其部署为一个整体,或者通过 API 调用在云服务上运行。
我们正在从一个数据科学家为每个用例从头开始训练自己的模型的世界,转变为基础模型和底座模型成为默认选择的世界。 越来越多的团队通过 API 连接到专有模型(如 Claude 和 GPT-4),或者使用开源模型作为基础,而不是构建自己的模型。 如果这些团队可以直接使用这些模型而无需重新训练,那就更好了,但如果不能,那么通过一些指导调整或微调,模型就可以胜任工作。
目前,我们看到了大量的微调公司,它们帮助加速快速塑造预先制作的模型以满足您的需求,其中许多公司做得非常好。 然而,很可能在几年内,我们将进一步向上抽象,对于大多数团队来说,微调将不再是必不可少的步骤。 一旦团队可以选择使用几个自定义示例来训练预先制作的医学模型,而不是更复杂和耗时的微调任务,他们会毫不犹豫地选择最简单的路径。
ChatGPT 的发布标志着一个重大转变,将我们从纯数据科学转向了人工智能驱动的应用的黎明。越来越多的传统编码人员和应用人工智能工程师正在构建这些应用程序,无论是没有数据科学团队还是有规模较小的支持数据科学团队。为支持这些新应用程序,出现了传统和非传统的基础设施公司、GPU 云服务提供商、基础模型提供商、开源模型制造商、NoSQL、向量和传统数据库、模型托管和服务公司、微调器等等。
因此,让我们来看看这个新兴的技术技术栈。
但在我们继续之前,我们需要清楚地记住一件事,关键词是「新兴」 的技术栈。
在任何技术转变的开始阶段,我们会看到大量新的工具、框架和想法涌现出来。其中大部分都会夭折。 其他一些会快速发展并变得非常流行,然后在后来被更好的新兴技术取代。
我们以 Docker 为例。随着 Docker 的流行,多家公司和项目争相构建大规模的 Docker 管理引擎。Docker 自身创建了命运多舛的 Swarm 应用程序和其他管理项目。 VMWare 构建了一款与其虚拟机兼容的专有管理器。Mesos 发展得非常快,非常受欢迎。
这些应用程序有什么共同之处?它们都已经死亡或基本上不再活跃。
所有这些应用程序都被 Kubernetes 取代,Kubernetes 成为管理大规模容器集群的事实标准。
即使 VMWare 发誓永远不会采用这个平台,继续推进自己的专有引擎,最终也放弃了自己的产品,全力支持 Kubernetes。
Kubernetes 本身是第三代软件。 它来自 Google 内部,Google 在使用 Docker 之前的十年间使用了预先制作的容器并进行规模化管理。Google 在 2003-2004 年建立了 Borg,然后在 2013 年推出了它的继任者 Omega。 最后,他们创建了 Kubernetes,这是 Omega 的开源后继者,吸取了十年容器管理的各种艰难教训。
这就是技术的演进方式。你不能在问题出现之前解决问题,而且解决一个问题会带来新的、意想不到的问题。 最强大的框架是那些吸取过去经验教训、提供极具意义的常见任务抽象、具有极高可扩展性,并吸引一系列插件和支持工具的框架。 在未来的十年里,随着开发人员与人工智能越来越多地合作,并学习需要克服的问题和陷阱,我们完全预期整个技术栈将发生演变。
当涉及生成型人工智能和智能代理时,一些主要组件正在作为技术技术栈的一部分出现,还有一些次要组件正在逐渐成形。
- LLMs(语言大模型)
- Task-specific Models(特定任务模型)
- Frameworks/Libraries/Abstractions(框架/库/抽象)
- External Knowledge Repositories(外部知识库)
- Databases (Vector, NoSQL, Traditional)(数据库(向量、NoSQL、传统))
- Front Ends (APIs, UI/UX)(前端)
除了软件技术栈的基础知识之外,还有几个关键组件构建在其之上,对其而言是必不可少的:
- AI Chips(人工智能芯片)
- Application Infrastructure Hosting(应用基础设施托管)
我们还看到第二组组件的兴起,随着时间的推移,它们可能会变得更加重要。
- AI App Hosting(人工智能应用程序托管)
- Fine Tuning Platforms (微调平台)
- Monitoring and Management(监控和管理)
- Middleware (Security)(中间件安全)
- Deployment(部署)
最后,我们看到一些尚不存在的关键组件,稍后我们将详细讨论。
让我们先从关键组件开始。
首先是 LLMs(大型语言模型)
它们是这种新型应用的核心。它们已经成为应用程序的智能核心,可以半自主或完全自主地使用工具来执行任务和做出决策。 它们是唯一真正通用的模型,能够处理各种任务,包括问答、摘要、文本生成、多媒体生成、逻辑推理等等。
需要注意的是,随着研究人员发现新的架构和更好地建模或模仿智能的方法,它们几乎肯定不会永远成为人工智能的智能核心。 目前,它们是工作主力和我们曾经创造的最好的智能形式。但它们并不完美,需要外部工具来真正完成工作。这些工具有各种形式。
现在让我们来看看在生产中让 LLMs 发挥作用所需的框架、工具、代码和基础设施。
首先是代码本身。它可以是传统的由程序员手写的代码,也可以是 LLM 动态生成的代码,还可以是程序员和模型共同生成的代码,或者以上方法的任意组合。
第二个主要组件是框架
如 LangChain、LlamaIndex、Haystack 或 Semantic Kernel,它们抽象出常见任务的共同特点,例如获取和加载数据、将数据分块以适应 LLM 的上下文窗口、获取 URL、读取文本、接收用户输入等等。 这些库也可以更加专注和专业化,例如 Meta 的 AI 研究实验室的 Faiss,它可以加速向量和语义搜索。 大多数这些库都是 Python 库,随着时间的推移,它们的功能变得更加全面,并演变成「框架」,即一组更全面的库或工具。 这些框架为 Agent 程序执行繁重的手动工作,例如来回传输数据、处理提示和答案等。
当然,并不是每个人都使用这些框架和库。LangChain 本身就具有争议性,开发人员通常要么喜欢它,要么讨厌它。 它在正在探索如何使用语言模型的编码人员中非常受欢迎。然而,许多高级开发人员仍然更喜欢自己编写抽象化的框架或库。 随着AI应用程序变得更加普及,我们预计随着时间的推移,这种情况将发生改变,并出现许多不同库中更好的抽象化。 今天,编写自己的 Python 网络爬虫库而不使用 Scrapy,或编写自己的科学和数值计算器而不使用 NumPy 几乎是不可思议的。 使用编写良好且高性能的库来节省时间和避免重新发明轮子几乎已成为常态。
第三个主要组件是特定任务的模型
LLMs 并不擅长一切,但应用程序设计人员可以通过调用其他专门用于特定任务的模型来增强其功能。这些模型只擅长做一件事情,并且做得非常好。例如,Gorilla是针对API完全从头训练的模型,因此它在与 API 的交互方面非常出色。Stable Diffusion 是一个众所周知的开源图像生成器。Whisper 提供自动语音识别。WizardCoder 在代码解释和开发方面表现出色。
第四个主要组件是外部知识库
例如 Wolfram Alpha,它使用符号逻辑和各种算法针对特定类型的问题提供清晰结构化的答案,例如进行数学计算或给出巴布亚新几内亚的正确人口数据。 大型语言模型因编造信息而臭名昭著。它们基本上是通过预测在回应某人时下一个单词应该是什么来工作的,但如果对自己的答案没有足够的自信度,这种预测可能会改变。 它们也没有说「我不知道」或「我不确定」的能力,因此它们只会编造一些听起来似乎有道理但可能完全是胡言乱语的东西。 外部知识库将模型与现实世界联系起来,为它们提供事实和数据,以便提供清晰、准确、精确的答案。
第五个主要组件是数据库
传统的 SQL 风格数据库,如 Postgres,NoSQL 数据库,如 Redis,以及向量数据库,如 Pinecone。 一个程序可以使用任意一种或全部三种类型的数据库。
向量数据库
向量数据库对许多组织和开发者来说是新生事物。市场上出现了许多向量数据库,如 Pinecone、Chroma DB、Weaviate、Activeloop(将数据湖和向量数据库的概念结合在一起)、FeatureBase、Qdrant、Milvus 和 Vectara。它们不直接存储信息,而是将其编码为向量。 这带来了一些独特的优势,例如能够对大致相似的数据进行聚类,并通过语义搜索找到它们。 这使得开发者可以将其用作大型语言模型的一种长期记忆,因为它可以检索相似的提示和答案,而不必找到完全匹配的内容。 它还可以用于对代码存储库中的所有相似函数进行聚类,以便进行轻松的搜索和检索。
NoSQL 数据库
NoSQL 数据库在大规模文档管理方面表现出色,这在传统数据库中可能很难或无法存储。这使得开发者可以加载大量非结构化数据文档存储库,例如法律档案或网络文章。
最后,我们有数据库界的 Workhorses
[2]
,如 Postgres 这样的行列式数据库,它存储可以在应用程序工作期间提取的较简单的信息。一个应用程序可能会从NoSQL数据库中读取许多文档,然后提取关键的学习内容,并将这些精简的学习内容放入向量数据库中。
当然,这并不像Postgres那样简单明了,但可以通过像 pgvector 这样的项目来适应存储向量。
我们预计,只要这种叠加层变得高性能和良好开发,许多团队将选择一个既能存储传统数据又能存储向量的数据库。
时间将告诉我们,我们是否需要专门的向量数据库还是一个将多种功能组合在一个分布式和可扩展平台上的数据库。
接下来,我们有前端
传统上有两种类型的前端,已经成为 Web 应用程序和移动应用程序的重要组成部分。第一种是 API,像 FastAPI 和 Express.js 这样的框架被迅速接受,作为构建快速响应的 API 与开发者构建的任何智能应用程序进行交互的一种方式。
API 提供了一种一致的方式,让第三方程序与程序或平台进行接口交互,而无需经过不断变化的前端网页。 UI 框架旨在帮助开发者快速构建可用的应用程序前端图形界面。 在这方面,我们看到了流行且强大的 Web 应用程序框架的再利用,因为没有必要重新发明轮子。 开发者们使用 React、Next.js、Vue.js 和 Flutter 等技术进行构建。
没有 AI 芯片,所有这些都无法运行。 目前,最主要的参与者是 Nvidia,他们的 A100 和 H100 系列产品占据主导地位。 像 Amd 这样的竞争对手最近推出了 Instinct MI200 系列产品,以与 Nvidia 的 H100 系列竞争。 我们还看到大型科技公司推出了自己定制的训练和推断芯片,例如 Google 提供了先进的 TPUs(张量处理单元),Azure 和 Aws 也推出了自己的芯片。 我们还看到了专注于人工智能的新型芯片创造者,如 Cerebras 和 Graphcore,以及各种边缘计算引擎。
传统基础设施提供商和云服务提供商如 AWS、Google 和 Azure,一直在竞相构建架构,使人们能够快速启动 GPUs/TPUs/ASICs。 他们还在建立新的软件基础设施来支持人工智能,此外,他们已经有了为Web应用程序提供支持的关键基础设施,这些应用程序最终也会用于提供人工智能应用程序,例如 Docker 和 Kubernetes、软件负载均衡器、高可用性数据库集群和路由。我们还看到数据中心提供商专注于大规模的 GPU 基础设施,如 CoreWeave。
所有这些组件共同构成了下一代应用程序的核心技术栈。但故事并不止于此。 其中一些组件,特别是人工智能中间件,在撰写本报告时仍处于初期阶段。我们预计,在未来几年中,随着越来越多的人工智能应用程序进入市场并面临可扩展性、安全性和合规性等新挑战,这套新的附加组件将迎来蓬勃发展。现在让我们转向这些方面。
人工智能应用程序托管平台
人工智能应用程序托管平台运行推理,用于运行具有自己模型的人工智能驱动应用程序,并托管运行这些应用程序所需的各种数据库和框架。 通常,这些是容器化工作负载。我们在这里看到了传统的云服务提供商,如 Azure、Aws 和 Google,以及 GPU 专业化公司,如 CoreWeave 和 Runpod。
中间件(安全性)
中间件是指帮助程序功能或管理应用程序某些方面的任何软件。它是一类广泛的应用程序,位于应用程序旁边或中间,为其提供额外的功能、保护应用程序或使其正常运行。 它可以是一个安全和日志系统、快速版本控制、身份验证、安全性、文档摄取和处理等等。一个例子是 Guardrails,它可以对 LLM 输出进行正确性强制执行。
在这里,安全性值得作为中间件的一个子类别。随着这些应用程序的增长和扩散,它们将成为主要的攻击面。最近的研究报告展示了对 LLM 的自动化攻击,使其越狱并忽略其保护措施,泄露如制作炸弹等信息。安全中间件的一个很好的例子是 Rebuff,它可以加固应用程序以防止提示注入攻击。Bosch 团队有 AIShield 和一个专门用于保护 LLM 免受攻击的辅助产品,名为 AIShield.GuArdlan,它可以作为 LLM 的封装器,防止PII 或其他越狱和攻击的泄露。
我们预计将会有一套功能齐全的中间件工具,与企业和云计算时代的能力相匹配。例如,如今很容易找到出色的高级防病毒软件,可以有效阻止新的和新兴的威胁。 像 ESET 防病毒软件这样的软件使用规则、启发式和神经网络来阻止病毒的传播。 我们预计将会出现一套强大的特定代理保护系统,可以阻止提示注入和其他新兴攻击,以及监控逻辑错误等工具的出现。
精调平台
精调平台帮助人们使用基础模型,提供额外的训练数据,并将其调整到特定的用例中。我们看到传统的训练和从头开始创建模型的平台,如 ClearML、 PHE’s Ezmeral、MosaicML(被 Databricks 收购)、Pachyderm(被 HPE 收购)、Anyscale,以及 Amazon 的 SageMaker 套件、Google 的 Vertex 和 Microsoft 的 Azure Machine Learning 等大型云 MLOps 技术栈,都在运行精调流程,还有像 Humanloop、Entry Point AI 和 Scale’s LLM fine tuner 这样专门从事 LLM 精调的新公司。我们预计越来越多的公司将提供可以轻松进行精调的基础模型,并且这个过程将变得更加自动化和迅速。
监控和管理工具
监控和管理工具从 MLOps 诞生之初就存在,并开始转向包括 LLM 的有意义指标(如幻觉检测或对话记录),我们有 Arize、WhyLabs、TruEra 和 Arthur 等公司(其中包括一个 LLM 基准测试工具和用于更好监控智能应用的构建工具),还有 infuse Ai’s PipeRider(用于数据质量管理)和 Manot Ai。
我们也开始看到开源社区推出基准测试的开端。AutoGPT 团队刚刚发布了一个基准测试,用于测试代理在各种任务上的能力。 我们预计在未来几个月和几年内会看到更多类似的基准测试。
部署器
部署器是最后一类,包括将原型或生产应用部署到云端或无服务器后端提供商的任何软件。 一个很好的例子是 SkyPilot,它将封装好的 LLM 应用部署到任何主要云端,并力求保持对云端后端的中立性。 还可以是基于代理的构建平台,例如 Steamship,它旨在将应用程序开发和部署整合在一个地方。 像 Seldon、MakinaRocks’s Runway、 lguazio 和 Moody 这样的模型部署器也适用于这里,因为许多团队除了LLM之外,还使用一套自定义模型来完成工作。
现在我们已经对面向 AI 驱动应用和 Agent 的新兴技术栈的各个组成部分提供了高层次的概述,让我们聚焦于该技术栈层次中的一些独特方面。
脚注:
[1] 在计算机术语中,「up the stack」(向上堆栈)指的是在软件或技术体系结构中向更高级别的抽象层级迁移或操作。这意味着隐藏底层的复杂性,以更简单、更易用的方式进行开发或使用 ↩︎ ↩︎ ↩︎
[2] Workhorses: 驮马,做粗工者,重负,可以理解为「主力」 ↩︎