用例聚焦:这是 Covariant 团队提供的用例深入探讨。请继续阅读,了解 Covariant 为何采用 SkyPilot 在云端运行其 AI 开发。

Covariant Robots, powered by AI

Covariant,我们以无与伦比的质量和速度为客户提供 AI 机器人创新。在过去一年中,我们重构了我们的 AI 基础设施堆栈以在云端运行,使用了 SkyPilot 等尖端云技术。

与之前的本地基础设施相比,新堆栈使我们能够以高度灵活的可扩展性Covariant Brain 的交付速度提高达 4 倍,同时降低计算成本

让我们来探索这段旅程。

之前的 AI 堆栈

我们之前的 AI 堆栈主要使用一个由数十台 GPU 机器组成的租赁本地集群,许多团队成员共享该集群。该集群服务于两个重要的用例

  • 日常交互式开发:供我们的科学家和工程师进行日常编码、调试和测试。
  • 长时间运行的作业:长时间运行的 AI 训练、基准测试或分析。

这种本地设置在几年内为我们提供了很好的服务。然而,随着我们加速 AI 发展,我们开始遇到本地集群的挑战

不可靠性:我们偶尔会遇到服务器故障或运行缓慢。例如,服务器可能突然拒绝 SSH 访问,或者网络文件系统 (NFS) 可能意外变慢或经常满载。

每当发生这些事件时,AI 团队的开发就会放缓。我们的基础设施团队也必须介入并与集群提供商合作解决问题(因为受影响的机器不在我们的控制范围内)。在基础设施事件发生期间,两个团队的生产力都会降低。此外,NFS 空间不足是一个巨大的痛点,需要手动清理,并阻止我们探索某些模型训练设置。

无法扩展:由于集群的机器和 GPU 数量固定,运行更多或更大的作业存在硬性限制。扩展 AI 实验的总数量以及扩展每个作业以使用更多机器/GPU 对我们的迭代速度至关重要。无法扩展变得不理想。

闲置时无法缩减:在集群利用率较低的闲置时期(例如,假期),我们希望“缩减”闲置机器以节省成本,但无法做到。这是因为本地设置通常需要预先投资/支付一定期限的费用。因此,即使机器未得到充分利用,成本也无法降低。

用户之间缺乏隔离:由于每台机器都有 8 个 GPU,而且并非所有人都始终需要全部 8 个 GPU,理想情况下人们可以共享同一台机器。但共享时,即使使用 Docker,人们的工作也很容易相互干扰(例如,资源争用、端口冲突、主机操作系统更改等)。

迁移到云端

这些问题促使我们将整个 AI 开发迁移到云端。云计算有望缓解上述所有挑战:(1)云提供商抽象化许多故障,消除客户的运营负担;(2)云具有高度可扩展性,允许我们使用更多 GPU;(3)云提供按需付费定价,其中按需/现货计算仅按使用时长收费。

我们决定迁移到云端也得益于我们的基础设施团队已经具备云计算最佳实践的专业知识(例如,基础设施即代码;安全的私有 VPC),因为我们许多非 AI 工作负载已经位于云端。

然而,仍然存在两个关键问题

  • 我们的 AI 团队可以使用什么样的软件平台来轻松利用云资源?
  • 云是否比我们的本地 AI 集群更昂贵?

我们评估了几种软件选择,以便让我们的 AI 团队轻松地将作业提交到云端。我们考虑了云提供商原生的机器学习平台和第三方托管平台。这两种类型的解决方案都会将我们锁定在某个供应商,这是不可取的。最重要的是,考虑到我们堆栈的复杂性,其中许多选项要求我们重写很大一部分 AI 代码库以适应其框架,这使得这些选项不切实际。

我们需要一个易于使用、没有供应商锁定、并且能让我们的 AI 团队快速上手的工具。

使用 SkyPilot 为我们的云堆栈赋能

我们的评估使我们选择了 SkyPilot,这是一个来自加州大学伯克利分校的开源云 AI 系统(该机构曾开发过 Spark 和 Ray 等一系列成功的基础设施项目)。SkyPilot 因其简洁性、原生的多区域和多云支持以及开源特性而吸引了我们。

我们对该系统的初步评估发现,它满足了我们的严格要求

低门槛启动:我们发现该系统只需要极少的设置工作

  • 我们的团队成员已经在他们的工作机器中设置了适当的云凭证,并且在通过 pip 安装后,SkyPilot 即可立即使用:它直接使用这些凭证在云端启动作业/集群,无需额外设置。
  • 更重要的是,该框架几乎不需要对我们的 AI 代码库进行任何代码更改即可在云端运行(与上面提到的那些固执己见的框架不同)。这使得它非常有吸引力,因为本次迁移工作的时限非常紧迫。

由于这些特性,我们的第一个尝试——训练一个计算机视觉模型——在一天内成功迁移并运行。

计算和数据保留在我们的私有云环境中:我们的一个关键要求是确保我们的代码和数据在云中的安全性。SkyPilot 通过将我们的计算实例 (VM) 和数据集(现在存储在对象存储桶中)完全保留在我们自己的云账户中来满足这些要求。为了更严格的保护,我们将其配置为仅为所有 VM 分配私有 IP,确保它们无法通过公共互联网访问。

Covariant's AI stack on the cloud, powered by SkyPilot

我们的新云 AI 堆栈。AI 用户通过 SkyPilot 自助启动自己的开发 VM 或作业。基础设施团队通过使用 Terraform 设置用户、权限、VPC、区域和其他管理设置来控制环境(一次性工作)。

具有隔离性的自助访问:在这种新设置中,每个 AI 用户都可以轻松启动自己的开发 VM 和作业,而无需担心相互干扰;参见上图。这种自助访问提供了良好的隔离性,不同于我们的本地设置。

灵活的可扩展性:我们发现 SkyPilot 使得启动许多作业或更大的作业变得容易得多。它提供了一些简单的旋钮供我们的工程师/科学家更改(例如,将 GPU 数量从 V100:1 更改为 V100:8,或更改 num_nodes 参数),而无需深入学习云知识(例如,了解不同的实例类型)。

降低云成本:上面我们概述的另一个关键问题是在云端运行 AI 的成本。快速的初步计算表明,按需定价会比我们之前的本地集群更昂贵。

Covariant uses spot instances through SkyPilot to save on cloud costs

使用现货实例节省 3-4 倍成本。我们使用 SkyPilot 在不同区域自动恢复任何被抢占的作业(无需手动干预)。我们设置了多个区域,以显着扩大我们可以使用的现货 GPU 池。使用同区域读取来消除跨区域数据传输成本。

幸运的是,SkyPilot 原生支持在现货实例上运行的托管现货作业,其成本比按需实例便宜 3-4 倍。如果在训练过程中现货实例被抢占,托管作业可以在不同可用区或区域之间透明地恢复。使用多个区域使我们能够获得更高的 GPU 可用性——从而应对当前云端 GPU 短缺的问题——这是其他工具/服务无法实现的。

为了支持此功能,我们的基础设施团队通过 Terraform 在我们的云账户的多个区域之间设置了数据复制和私有 VPC 对等连接。有了这种设置,为我们的大规模长时间运行作业使用现货实例变得可行,同时也使得迁移到云端的经济效益更具吸引力。

与现有工具集成

我们又进行了几次用例试点,以确认在云端使用模型时的性能、成本和速度。所有这些指标都被证实与我们之前的本地基线相符甚至超出。

通过这些成功的试点,我们着手将 SkyPilot 更广泛地集成到我们现有的工具堆栈中

  • 开发者工具:我们发现 VSCodeJupyter notebooks 可以直接与开发 VM 一起使用。这是因为 SkyPilot 启动的任何 VM 都可以通过名称访问(ssh dev-my-cluster),因此对于远程开发,我们可以一键将 IDE 连接到 VM。
  • Bazel:我们为流行的开源构建工具 Bazel 添加了一个新的启动模式,以便轻松地将模型训练/基准测试构建目标启动到云端。与之前相比,用户采用相同的工作流程,只需传递一个额外的标志 --mode=SKY,即可将启动委托给 SkyPilot。
  • Salt:我们使用开源工具 Salt 以一致的方式配置在云端启动的所有实例。要启用 Salt,我们只需将其添加到每个 SkyPilot YAML 的 setup 命令中。
  • Datadog:我们一直使用 Datadog 来监控我们的基础设施。我们将 Datadog 代理启用为一个 Salt 模块,以便监控所有启动的云实例。
开发者工具:由于所有 SkyPilot 云实例都可以通过名称进行 SSH 访问,因此使用 VSCode 在其上运行代码是开箱即用的。

总的来说,与这些现有工具的集成产生的阻力最小。我们保持了熟悉的工作流程,以确保我们的 AI 团队在切换到云端时学习曲线最低。

新堆栈的优势

我们的新云 AI 堆栈已投入生产近一年。数十名 AI 工程师/科学家每天都在积极使用新堆栈进行交互式开发和长时间运行的作业。

最重要的是,在云堆栈中训练的许多 Covariant Brain 模型已交付给我们的客户——速度更快了!

Key benefits of Covariant's new AI stack, using SkyPilot

与我们之前的基础设施相比,我们观察到的主要优势如下

交付模型速度提高 4 倍:对于我们最大的模型,训练时间缩短了达 4 倍。这种速度提升直接转化为更快地向客户交付尖端模型。

速度提升的原因有两个:(1)我们现在可以轻松地通过每个作业使用更多节点/GPU 来横向扩展;(2)我们现在可以灵活地在云端使用更新一代的 GPU,它们速度更快。

更高的 AI 研发速度:整个团队的实验速度都得到了提升。整个团队可能同时在云端运行数百个作业,潜在地利用数千个 GPU。这得益于云的弹性以及 SkyPilot 的多区域支持带来的更高 GPU 可用性。新堆栈为最终用户提供了“自助式”体验来启动他们的实验,因此不像本地情况下那样需要长时间的协调/调度。

降低基础设施团队负担:以前,每当发生本地事件时,我们的基础设施团队都必须介入并与集群提供商一起解决问题。迁移到云端后,我们估计通过消除支持负担,可以节省全职 SRE 10% 的时间。这些宝贵的时间现在可以用于我们的生产部署。

日常开发提速:回顾一下,交互式开发是我们本地堆栈中的一个重要用例。现在,每个成员在云端都有自己的高性能开发 VM,无需担心资源争用问题。

云还提供了区域灵活性,这是本地没有的。例如,我们的全球团队成员现在使用离他们最近的云区域来托管他们的开发 VM。与之前必须连接到美国服务器相比,这显著降低了连接延迟。

有利的云经济效益:尽管运行更多作业,但我们发现云端的总拥有成本 (TCO) 可能低于可比的本地设置。这使得在我们案例中将 AI 计算迁移到云端的经济效益非常有利。

这一潜在的令人惊讶的发现是由于两个因素。首先,我们几乎完全使用现货实例运行长时间作业,并使用 SkyPilot 透明地从任何抢占中恢复。这自动将成本比按需实例降低了约 70%。其次,云端的按需付费定价意味着我们只支付作业运行的时长费用,并且开发 VM 在闲置时也会自动停止。

总结

利用尖端云技术,我们的 AI、基础设施和工程团队协作在云端构建了我们的新 AI 堆栈。得益于新堆栈,我们的 AI 研发速度得到了巨大提升,同时降低了计算成本。我们现在以更快的速度创新,以无与伦比的速度为客户提供 Covariant Brain 的尖端改进。