原发布于 Medium。
机器学习和数据科学领域的云计算已经相当困难,但当你开始应用成本削减技术时,你的开销可能会成倍增加。想避免机器空闲时仍保持运行吗?你需要反复启动和关闭它们,并重复环境和数据设置。想使用竞价实例(spot instance)定价吗?这可能会增加数周的工作量来处理中断(preemption)。那么,如何利用区域之间巨大的价格差异,或者云之间更大的价格差异呢(见下文)?
如果有一种简单、统一的云上机器学习和数据科学接口,既经济高效,又容错、多区域且多云,那会怎么样?
隆重推出 SkyPilot
今天,我们发布了 SkyPilot,一个用于在任何云上无缝且经济高效地运行机器学习和数据科学批处理作业的开源框架。它的目标是让云(或多个云)的使用比以往任何时候都更容易、更便宜,而且不需要云基础设施专业知识。
SkyPilot 一直在加州大学伯克利分校的 Sky Computing 实验室 积极开发中,已经一年多了。它已被超过 10 家组织用于各种用例,包括:在 GPU/TPU 上进行模型训练(节省 3 倍成本)、分布式超参数调优,以及在数百个 CPU 竞价实例上运行生物信息学批处理作业(经常性节省 6.5 倍成本)。
工作原理
给定一个作业及其资源需求 (CPU/GPU/TPU),SkyPilot 会自动找出哪些位置(可用区/区域/云)拥有可运行该作业的计算资源,然后将其发送到最便宜的位置执行。

SkyPilot 自动化了在云上运行作业的繁重工作
- 可靠地配置集群,发生容量或配额错误时自动故障转移到其他位置
- 同步用户代码和文件(从本地或云存储桶)到集群
- 管理作业排队和执行
SkyPilot 还大幅降低您不断增长的 云账单,通常超过 3 倍
- 自动查找提供所需资源的最便宜的可用区/区域/云(约节省 2 倍成本)
- 托管竞价实例(Managed Spot) 通过使用竞价实例提供约节省 3-6 倍成本,并自动从中断中恢复
- 自动停止(Autostop) 自动清理空闲集群 — 导致可避免的云支出过多的 主要原因
SkyPilot 对多云和单云用户都有益;继续阅读以了解原因!
5 分钟上手
SkyPilot 入门只需不到 5 分钟。首先,安装并检查是否已设置云凭据(文档)
pip install 'skypilot[aws,gcp,azure]' # Pick your clouds.
sky check
如果已启用云(或多个云),尝试通过 CLI 运行简单命令
sky launch 'echo Hello, SkyPilot!'
sky launch --gpus V100 'nvidia-smi'
这些命令将在云上启动一个虚拟机 (VM),并在其上运行指定的命令。
这是一个使用 HuggingFace Transformers 的真实深度学习训练作业示例。使用 SkyPilot,用户可以通过将其包装在一个简单的 YAML 文件中来启动现有项目(详细信息请参阅 快速入门)
请注意,在第 2 行,我们只需将加速器指定为 V100:4
作为资源需求,并且无需指定在哪个云/区域运行作业(尽管如此,此控制选项是存在的)。
让我们将作业启动到云上
sky launch huggingface.yaml
就是这样!这将显示一些输出,包含下表,假设启用了三个云
在这里,SkyPilot 会寻找跨越所有可用的区域和云的最便宜的位置(您可以通过 --cloud
参数进行覆盖)。然后它会提示确认,并负责配置、设置和运行作业。
我们还可以将相同的作业启动到托管竞价虚拟机(无需手动处理中断恢复)上,将成本降低约 3.5 倍
sky spot launch huggingface.yaml
您可以通过以下方式可靠地启动和停止集群,例如通过重试和自动停止功能
sky launch -t p3.2xlarge --retry-until-up --idle-minutes-to-autostop=5
除了 CLI,SkyPilot 还提供了一个编程 Python API。它使开发人员能够使用与云无关的接口构建多云应用程序。
这只是您可以用 SkyPilot 做什么的快速预览!有关运行作业和成本节省功能的详细指南,请参阅我们的 文档。
SkyPilot 的实际用例
在过去的几个月里,我们逐渐将 SkyPilot 推向来自 10 多家组织的数十位机器学习/数据科学从业者和研究人员。从用户报告来看,我们看到该系统确实解决了我们自己也曾经历过的常见痛点。
出现了几种使用模式,从交互式开发,到跨区域或云运行许多项目,再到横向扩展

在 GPU 和 TPU 上进行机器学习训练和超参数调优
加州大学伯克利分校人工智能研究所 (BAIR) 和 斯坦福大学 的领先机器学习团队一直在使用 SkyPilot 在云上运行机器学习训练。用户通常无需更改代码即可启动他们现有的机器学习项目(请参阅 机器学习框架示例)。用户报告的主要益处包括可靠地配置 GPU 实例、在集群上排队运行许多作业以及同时运行约 100 次超参数试验。此外,用户喜欢只需更改一个参数,在 AWS 上运行的相同作业就可以在 GCP/Azure 上运行。
用户还在使用 SkyPilot 在 Google 的 TPU 上训练大型模型。研究人员可以通过 TRC 项目申请 免费 TPU 访问权限,然后使用 SkyPilot 快速开始使用 TPU(支持设备和 Pod)。
在 CPU 竞价实例上运行生物信息学批处理作业并节省 6.5 倍成本
索尔克生物研究所(Salk Institute for Biological Studies) 的科学家一直使用 SkyPilot 在竞价实例上运行每周重复的批处理作业。这些作业对不同的测序数据进行操作,并且是易于并行的。使用 SkyPilot 的 托管竞价实例,索尔克的科学家在数百个 CPU 竞价实例上启动他们的计算任务,与使用按需实例相比,降低成本 6.5 倍;与使用繁忙的本地集群相比,显著缩短作业完成时间。索尔克用户报告称,通过抽象化云,SkyPilot 使他们能够专注于科学,而不是学习云的复杂性。
使用 SkyPilot 构建多云应用程序
我们的一些行业合作伙伴已经构建了基于 SkyPilot 编程 API 的多云库。SkyPilot 使这些应用程序从第一天起就可以使用与云无关的接口在不同的云上运行(这与 Terraform 等工具形成对比,这些工具虽然强大,但专注于较低级别的基础设施而非作业,并需要云特定的模板)。这些开发人员喜欢开箱即用地在不同云上可靠地配置和运行作业的能力,这样他们就可以专注于应用程序特定的逻辑,而不是处理云操作。
为什么多云(和多区域)是新 常态?
多云和多区域的增长趋势促使我们构建了 SkyPilot。组织越来越多地使用不止一个公共云是出于战略原因,例如更高的可靠性、避免云厂商锁定、更强的议价能力等(请参阅这些报告)。
即使从用户的角度来看(例如,机器学习工程师或数据科学家),也有许多令人信服的理由根据工作负载使用多个云
降低成本
对于相同/相似的硬件,使用价格最优的云可以自动节省大量成本。以 GPU 为例。在撰写本文时,Azure 提供最便宜的配备 NVIDIA A100 GPU 的实例,而 GCP 和 AWS 分别收取 8% 和 20% 的溢价。



CPU 也存在价格差异。对于最新的通用实例(vCPU/内存相同),差异可能超过 50%(见上图)。
利用一流硬件
我们正坚定地处于 计算机体系结构的新黄金时代,在这个时代,巨大的性能和效率提升正由专用硬件推动。毫不奇怪,云提供商越来越多地提供定制硬件,以区别于竞争对手。例子包括
- GCP 的 TPUs,用于高性能机器学习训练
- AWS 的 Inferentia,用于经济高效的机器学习推理,以及 Graviton 处理器,用于 CPU 工作负载
- Azure 的 Intel SGX,用于机密计算
使用最适合任务的硬件 — 通常位于不同的云上 — 可以显著降低成本和/或提高性能。
提高稀缺资源的可用性
还记得臭名昭著的“容量不足”错误吗?理想的云实例很难获得。配备 NVIDIA V100 和 A100 等高端 GPU 的按需实例经常不可用。配备 GPU 或大量 CPU 的竞价实例甚至几乎不可能获得。根据经验,我们曾见过需要等待数十小时甚至数天才能配置到这些稀缺资源。
为了提高成功获得这些资源的机会,一个自然的方法是使用多个云。(假设每个云提供资源的几率为 40%;使用 3 个云会将几率提高到 1–0.6³ = 78%。)
单云用户也想要多个区域
有趣的是,以上所有好处也适用于单个云的多个区域
(1) 区域/可用区之间的价格差异很大。对于常见的 GPU/CPU,可用区之间的按需价格差异可能高达 20%(见图)。对于竞价实例,价格差异很容易超过 3 倍。简单来说:用户可以通过在一个云内的多个区域/可用区进行比较选择来降低成本。

(2) 云的区域之间的硬件/服务供应不同。例如,GCP 的 TPU V3 在其 35 个全球区域中只在 2 个区域可用。
(3) 从多个区域获取稀缺资源更有可能成功。
SkyPilot 应运而生
尽管有这些好处,但在伯克利,我们亲身体验了多年使用多个云和区域的复杂性。我们实验室(AMPLab、RISELab,以及现在的 Sky Computing 实验室)的研究人员一直严重依赖公共云来运行机器学习、数据科学、系统、数据库和安全领域的项目。我们发现使用一个云已经很困难,而使用多个云只会加剧最终用户的负担。
为了简化多云/多区域的使用并降低成本,我们构建了 SkyPilot。它是第一个“跨云代理”(intercloud broker),是我们在此 白皮书 中倡导的 Sky Computing 愿景的关键组成部分。
展望未来
在接下来的几个月里,我们将分享更多关于该系统的信息、详细的用例以及入门技巧。要开始使用 SkyPilot,请访问以下资源了解更多信息
如有疑问或讨论,我们随时提供帮助!您可以通过 GitHub issues 或我们的 社区 Slack 联系开发团队。要关注项目的最新动态,请在 Twitter 上关注我们 并 订阅 GitHub。
我们也需要您的帮助来改进 SkyPilot。许多令人兴奋的 计划项 已列入规划,还有很多工作要做。例如,我们来自 IBM 的合作伙伴正在为 SkyPilot 添加 IBM Cloud 的支持,我们也很乐意支持其他云。
和我们一起,让云的使用比以往任何时候都更轻松、更便宜。
作者:Zongheng Yang 和 Ion Stoica。我们感谢整个团队 — Zhanghao Wu、Wei-Lin Chiang、Michael Luo、Romil Bhardwaj、Woosuk Kwon、Siyuan Zhuang、Mehul Raheja、Isaac Ong、Sumanth Gurram、Edward Zeng、Vincent Liu、Daniel Kang 和 Scott Shenker。感谢 Donny Greenberg、Daniel Kang、Zhanghao Wu 和 Romil Bhardwaj 为本文提供的有益意见。
更新:Twitter 公告帖。