在混合云中大规模运行AI推理
作者:
Anupam Singh,工程副总裁,Karun Channa,产品总监
发布日期:
2024年9月17日

过去几年中,Roblox使用AI的领域,特别是生成式AI,迅速增长。

我们正处于一个三阶段过程的最后阶段,以构建和优化支持这一级别AI工具所需的基础设施。

我们正在分享我们采取的步骤,以构建一个混合云基础设施,能够支持大规模的机器学习(ML)推理。

在上周的RDC上,我们宣布了我们最新的AI孵化项目:开发一个多模态3D基础模型,以推动生成式创作。为一个始终在线、沉浸式的3D全球平台提供AI支持,该平台被数百万人使用,需要大量的计算能力。在2023年初,我们支持的机器学习(ML)推理管道不到50个。今天,我们的基础设施支持大约250个这样的管道。我们在两个数据中心和我们的混合云基础设施中维护着数万个CPU和一千多个GPU,以运行所有这些模型。我们还没有完成。

我们之前分享了我们对创作者生成式AI的思考,我们如何使用AI来确保Roblox上的人们的安全,以及AI翻译如何帮助世界各地的人们进行交流。但这些只是几个例子:在大约250个模型投入生产的情况下,Roblox上的几乎每一次互动都有某种形式的AI支持。当一个人第一次来到Roblox并寻找要加入的体验时,我们的推荐和搜索系统通过AI在工作。当这个人选择一个体验并点击播放按钮时,我们的匹配算法会确定最佳的服务器加入。

数百万创作者已经可以使用我们生成式AI工具的强大功能。有了助手,他们可以使用简单的提示生成脚本和动作,以帮助加速体验的创建。有了我们的纹理和材质生成器工具,他们可以快速更改和迭代对象的外观和风格。现在,随着Avatar Auto Setup的最近推出,我们进入了4D生成式AI的时代,这简化了创建头像的过程,为创作者节省了数小时的工作。截至2024年8月,Roblox上发布的UGC头像大约有8%是使用Avatar Auto Setup制作的。

我们现在正处于一个已经进行了几年的三阶段过程的最后阶段。这个旅程始于2021年底。当时,由于缺乏统一的Roblox AI平台,工程团队构建了自己的迷你平台并选择了不同的框架。我们看到团队开发了关键组件,包括我们的头像市场、首页和搜索,每个团队都在构建自己的定制功能工程。团队没有利用集中的特征存储,而是拼凑了临时的解决方案。此外,每个团队都承担着开发自己的优化和独立解决推理扩展挑战的任务,没有核心平台的支持。这种分散的方法突出了对一个有凝聚力、集中的平台的迫切需求,以简化我们的流程并提高整体效率。

第一阶段:为ML打下坚实的基础
我们很早就采用了Kubeflow,以利用其为ML打包的核心构建块,包括笔记本、管道、离线实验和模型服务。仍然需要一个特征存储,所以我们采用了第三方解决方案来开始。为了使ML对Roblox的工程师更加易于访问,我们开发了roblox-ml,这是一个Python库,进一步减少了将模型部署到生产的复杂性。

我们使用Jupyter笔记本提供了一个为模型迭代优化的开发环境,服务器配置了必要的数据访问和GPU资源。扩展训练作业或定期运行以重新训练模型通常需要我们编写一个管道。我们的roblox-ml库使工程师能够轻松地将笔记本代码转换为Kubeflow管道,通过快照运行时环境和源代码,而不需要构建Docker映像,并通过选择具有优先级的计算资源,设置通知和处理认证。

如果模型在正确的时间拥有正确的特征,它们才是有效的。我们的特征存储简化了定义新特征的过程,同时促进了900多个特征在100多个特征服务之间的共享。这使得团队能够随着我们的特征集合的增长更快地创建和部署新模型。

一旦我们的ML管道平台功能齐全且稳定,我们就看到了对在线推理支持的增加需求——个性化、搜索和市场领先。虽然我们推荐批量推理作为成熟ML操作的中转站,但我们开发了我们的模型注册和服务平台以支持实时推理。有了我们的模型注册,Roblox工程师可以使用roblox-ml上传和下载模型,这些模型被标记并自动版本化,以便于追踪性、回滚和A/B测试。例如,我们的个性化模型每天都会被训练和部署,我们经常同时运行大约20个A/B测试。对于我们的服务平台,我们使用了KServe和Triton推理服务器作为底层模型服务运行时,因为它的强性能以及对使用GPU和CPU的多种ML框架的支持。

无论是批量还是在线操作,Roblox上的模型在发布前都会经过广泛的测试。这包括离线实验、影子测试和A/B测试。发布后,模型会持续监控,以确保它们在操作(例如,推理延迟)和准确性方面的表现符合预期。作为我们对安全和文明的承诺的一部分,人类版主还会评估任何报告的推理中的分歧,这有助于确保我们做出关键决策的正确性,并有助于改进我们模型的训练数据集。

第二阶段:准备扩展推理
在2023年初,我们看到了生成式AI在加速Roblox创作方面的巨大潜力。为了充分利用这一潜力,我们在2023年的大部分时间里优化了我们的ML训练和推理基础设施的性能和效率。由于这些优化,我们显著降低了CLIP嵌入创建的计算成本。首先,我们扩展了我们的分布式训练系统,以支持在大型数据集上训练和在多个工作节点上运行具有数十亿参数的模型。

当我们开始构建分布式工作流时,我们意识到我们现有的离线推理设置不会支持我们长期看到的增长率。我们最初的设置是为实时推理设计的,其中输入和输出数据是顺序的。虽然它对我们的早期努力效果很好,但它不容易支持任务并行性或多阶段处理,也不足以支持我们现在所需的规模。此外,工程师需要编写自己的数据分块和错误处理逻辑,随着我们的推理需求的扩展,这变得越来越耗时。

为了解决这些挑战,我们增加了对Ray的支持,Ray是一个开源计算框架,可以轻松扩展批量推理工作负载。通过为批量推理构建基于Ray的分布式任务管道,我们能够优化资源利用,启用多阶段处理,并提供强大的任务并行性和更大的容错能力。此外,Ray Data库允许工程师在几行内定义一个具有流式执行的管道,这有助于提高开发人员的速度和效率。到目前为止,我们已经看到使用Ray进行批量推理的巨大效率提升。

随着我们的推理需求的持续增长,我们将所有的CPU推理转移到我们自己的数据中心,这使我们能够更直接地控制延迟和隐私设置。我们每天处理大约10亿个性化请求,用于我们79.5百万的日活跃用户(截至2024年6月30日)。将这个工作负载转移到我们自己的数据中心,帮助我们在不妥协用户体验的情况下保持我们的效率。为了节省推理成本,许多系统缓存请求——这将导致过时的推荐,因为许多用户每天多次访问Roblox首页。这也提高了我们的效率,使我们能够更好地优化推理运行的位置,并分配工作负载以减少所需的计算资源。

随着我们继续扩展,我们意识到需要一个自定义特征存储解决方案,该解决方案可以支持高吞吐量、低延迟和成本效益,同时也能够快速迭代各种服务。现有的第三方解决方案没有满足这些要求,所以我们开发了自己的自定义特征存储,建立在开源项目Feast之上。我们的特征存储提供了一个自定义的特定于域的语言,用于定义批处理和流式特征的转换。Flink被采用为流处理引擎,以实现实时特征,这对于需要尽可能多地包含最新信息的模型至关重要。在另一个极端,是需要从批量处理大量3D资产中派生出的特征,通过在分布式环境中重新运行Roblox游戏引擎来实现。我们的特征存储现在每天摄取大约300亿条记录,每天提供大约700亿条记录,P99延迟为50毫秒——并且支持100多个特征服务。

模型使用嵌入的需求也迅速增长,这得益于对语义理解的需求不断增长,无论是通过NLP、计算机视觉还是推荐系统。这促使我们构建了一个向量数据库,以高效地存储和检索作为高维点的向量。向量数据库实现了快速最近邻查找,以支持如多模态搜索和内容违规检测等功能。

随着越来越多的团队开始使用ML模型,我们希望找到规模的效率,并帮助工程师更快地成功,所以我们建立了我们自己的真实性团队。这个团队帮助工程师设计他们自己的数据集生产管道,使用人类评估者训练和验证数据,并提供高质量的数据。这有助于我们标准化构建数据管道和验证数据集的过程,以及数据交付、跟踪和监控的格式。

第三阶段:大规模推理的运营
随着Roblox助手的推出,我们看到每周处理的令牌数量增加到15亿。我们还发布了新功能,包括实时AI聊天翻译和我们的声音安全模型(现在已开源),这显著增加了对推理容量的需求。我们开始了两个核心项目,以加速AI应用开发:我们的ML网关,以及围绕vLLM项目的大型语言模型运营(LLMOps)平台。这两个项目将为Roblox下一代ML奠定基础。

**我们构建了统一的ML网关,以集中访问所有大型模型,无论是开源的还是内部开发的,跨各种环境,

标签: 大模型, AI, Roblox, 工程

添加新评论