SkyPilot 与 Sky Computing:将碎片化云基础设施统一为一个 AI 超级计算机
【免费下载链接】skypilotThe AI Compute Platform for frontier teams. SkyPilot turns fragmented AI compute into one AI supercomputer, so frontier AI teams build custom intelligence faster.项目地址: https://gitcode.com/GitHub_Trending/sk/skypilot
面对云厂商数量、区域可用区、实例类型与定价模式的指数级组合,现代 AI 团队正在被云基础设施的复杂性淹没。Sky Computing 是由 UC Berkeley 提出的一种计算范式,主张将团队分散的云基础设施抽象为一个统一的"天空"(Sky)计算池。作为这一概念的开源实现,SkyPilot 以统一的接口与智能优化器为核心,让 AI 工作负载可以在多集群、多云、多区域的异构算力上"一次定义、随处运行"。读完本文,你将理解 Sky Computing 的提出动机、核心设计、四大演进层次,以及 SkyPilot 在 docs/source/sky-computing.rst 所定义愿景下的具体落地形态。
问题背景:云基础设施的爆炸性复杂性
今天的云基础设施在复杂性上已经彻底"爆炸"。组织被迫在三个维度上面对组合数量级庞大的基础设施选择:
- 位置(Locations):单个云内就有几十个区域(regions)和上百个可用区(zones)。团队还越来越多地采用多集群、多云策略——3 个以上的超大规模云厂商(hyperscalers),以及 10 个以上的专用云。
- 硬件(Hardware):每个云有 500+ 种实例类型,并持续涌现新的加速器(如 GPU、TPU)。
- 定价模型(Pricing models):按需(on-demand)、预留(reserved)与可抢占的 spot 实例并存,每种都有不同的价格与可用性。
(位置, 硬件, 定价模型)的搜索空间是组合爆炸级的,即使在单个云内部也是如此。同时,由于可用性与价格随时间动态变化且因位置而异,这个搜索空间还是动态的。原本看似简单的任务——例如"在我任意一个美国区域/集群上以最低成本运行任务"或"在 AWS 和 GCP 上同时监控和管理作业"——会变得成本极高:
- 大量宝贵的工程时间被投入到掩盖各种基础设施选择之间的差异上;
- 工作负载被迫运行在次优的选择上(以启发式方式简化搜索空间),从而浪费了利用率、成本节省空间与算力容量。
Sky Computing:统一接口 + 跨搜索空间优化器
为了对抗这种复杂性,UC Berkeley 在《From Cloud Computing to Sky Computing》(HotOS 2021)与《The Sky Above The Clouds》白皮书这两篇论文中提出了Sky Computing。
简而言之,Sky Computing 将团队多样化的云基础设施组合成一个统一的池,即一片"天空"(Sky)。Sky 由两个组件构成,用于简化并利用这个复杂搜索空间:
- 统一的接口:在异构云基础设施上运行工作负载的统一界面;
- 优化器:为每个工作负载寻找最优基础设施选择(最便宜且最可用)。
这两个组件协同工作,让复杂的云基础设施变得简单易用:
- 统一 Sky 接口允许工作负载只定义一次、用同一套接口,即可在不同基础设施上运行;
- Sky 优化器横跨搜索空间,利用计算池中动态变化的价格与可用性差异。
统一接口的落地:Task 的一次定义、随处运行
在 SkyPilot 中,这个"统一接口"的核心载体是 Task 与一份简单的 YAML 定义。以官方 Quickstart 中的 hello_sky.yaml 为例:
resources: # Optional; if left out, automatically pick the cheapest cloud. infra: k8s/coreweave # Or k8s/my-neocloud; aws; gcp; ... # 8x NVIDIA B200 GPU accelerators: B200:8 # Working directory (optional) containing the project codebase. # Its contents are synced to ~/sky_workdir/ on the cluster. workdir: . # Typical use: pip install -r requirements.txt # Invoked under the workdir (i.e., can use its files). setup: | uv pip install torch # Typical use: make use of resources, such as running training. # Invoked under the workdir (i.e., can use its files). run: | echo "Hello, SkyPilot!" nvidia-smi这份 YAML 定义了任务的四个核心组成部分:resources(任务必须运行在哪种云资源上,如加速器、实例类型)、workdir(将被同步到实例上的工作目录)、setup(任务执行前需运行的命令,在工作目录下执行)、run(实际执行任务的命令,在工作目录下执行)。注意所有字段都是可选的——当省略infra时,SkyPilot 会自动挑选最便宜的云。这意味着同一个任务文件可以在 Kubernetes 集群、专用 GPU 云或超大规模云之间无缝迁移,这正是"统一接口"的直接体现。
通过sky launch -c mycluster hello_sky.yaml启动后,SkyPilot 会自动完成:根据资源约束选择云与虚拟机 → 在该云上开通(或复用)集群 → 同步 workdir → 执行 setup → 执行 run。同一任务还可以用sky exec mycluster hello_sky.yaml在已存在的集群上轻量执行(跳过开通与 setup),或用 Python SDK 的sky.Task/sky.launch等价完成。
优化器的落地:SkyPilot Optimizer 的源码实现
"Sky 优化器"在 SkyPilot 中对应 sky/optimizer.py 中的Optimizer类。其入口方法Optimizer.optimize接收一个 DAG(任务依赖图),以成本或时间为优化目标,为图中每个节点找到最佳执行计划(见 sky/optimizer.py):
def optimize(dag, minimize=cost, blocked_resources=None, quiet=False): """Find the best execution plan for the given DAG."""优化过程会为 DAG 添加虚拟的 Source/Sink 节点以便统一处理多源/多汇场景,随后通过动态规划(_optimize_by_dp,见 sky/optimizer.py)或整数线性规划(_optimize_by_ilp,见 sky/optimizer.py)求最优解;在执行前,_fill_in_launchable_resources(见 sky/optimizer.py)会补齐各任务在所有可用基础设施上的候选资源集合,供优化器遍历。从源码结构可以推断,这个优化器正是论文所述"cut across the search space"(横跨搜索空间)思想的工程化实现:它把"在哪朵云、哪个区域、哪种机型、哪种定价模型上跑"这一系列决策交给算法,而不是交给工程师手工拍板。
使用 Sky 的三重收益
借助统一接口与跨搜索空间的优化器,云用户及其工作负载可以获得以下收益:
- 云更易用(Cloud is easier to use):统一接口简化了基础设施,天然多云就绪;
- 成本更低(Lower costs):工程时间不再浪费在处理云基础设施差异上;Sky 为每个工作负载优化成本;大型组织由于可移植性而获得定价谈判筹码;
- 容量更高(Higher capacity):工作负载可以在更大的计算池上运行,拥有丰富的位置、硬件与定价模型选择。
为什么 AI 从 Sky Computing 中获益最大
AI 是高度容量密集与成本密集的,比以往的云工作负载高出若干个数量级。为了提升容量、降低成本,AI 团队正在"在任何地方、以任何可得的形式"使用算力:
- 位置:AI 团队混用超大规模云(AWS/GCP/Azure 等)、GPU 云(CoreWeave/Lambda 等)、单个云内的多个区域,以及多个 Kubernetes 集群;
- 硬件:不同任务使用不同 GPU 代际(如 H100 用于训练、L4 用于推理);AMD GPU;超大规模云上的专用加速器(如 TPU、Trainium、Inferentia);
- 定价模型:团队混合使用预留、按需与 spot GPU 来节省成本。
这些选择经常相互交织:例如,常见的做法是"在云 X 上用预留 H100 做训练,在云 Y 上用 spot L4 做大规模批量推理"。因此,AI 工作负载天然要求在这个复杂搜索空间中管理大量计算选择——Sky Computing 提供了自然解:Sky 为 AI 团队提供统一接口,方便且可移植地在异构算力上运行 AI;同时智能编排团队的全部 AI 算力选择,带来显著的成本节省与更高的计算容量。
SkyPilot:Sky Computing 的第一个实现
SkyPilot 诞生于提出 Sky Computing 的同一个 UC Berkeley 实验室(sky.cs.berkeley.edu 相关团队)。它是 Sky 的第一个实例化产品,最初的使命是为最重要的一类工作负载——AI 与计算密集型工作负载——实现 Sky Computing。
- 社区规模:根据官方文档,SkyPilot 已被约上百家领先公司与 AI 团队广泛采用;最初的开发团队由 Berkeley 博士/研究员组成,如今社区已成长为 100+ 贡献者,来自众多组织。
- BYOC 模式:SkyPilot 以 BYOC(Bring Your Own Cloud,自带云)模式运行——所有资源都开通在用户自己的云账户、VPC 与集群中,云凭据与治理边界完全由用户掌控。
- 开源许可:SkyPilot 以宽松的 Apache 2.0 许可开源(见仓库根目录 LICENSE),并在持续活跃开发中。
- 统一抽象:在 docs/source/overview.rst 中,SkyPilot 将这种"统一池"落地为三大核心抽象——集群(Clusters)、作业(Jobs)、服务(Services),覆盖 AI 生命周期中的批处理、开发、(预)训练、微调、超参搜索、批量推理与在线服务等全部场景。无论拥有多少个集群、云或区域,用户都用同一套接口提交、运行和管理工作负载。
BYOC 的落地:接入已有基础设施
与 BYOC 模型对应,SkyPilot 通过各基础设施的原生认证方式(kubeconfig、云凭据、SSH)接入用户已有的 Kubernetes 集群(含 EKS/GKE/AKS 等托管集群)、Slurm 集群、云 VM 与裸机节点池。例如,在 YAML 或 SDK 中通过infra字段即可声明使用范围:
resources: infra: k8s # 使用任意可用 Kubernetes context # infra: k8s/my-cluster1 # 或指定某个 context # infra: aws/us-east-1 # 或指定云与区域 # infra: ssh/my-node-pool # 或指定 SSH 节点池容错与恢复的落地:面向 spot 与故障场景
针对 AI 工作负载频繁使用 spot 实例、硬件可能故障的现实,SkyPilot 的受管作业(managed jobs)内置了自动恢复能力。从 sky/jobs/README.md 的状态机可见,作业进入RECOVERING状态可能对应三类触发原因:FAILURE(集群抢占/故障或用户代码失败)、EMERGENCY(控制器遭遇内部错误,按预算与指数退避重试)、RESTART(主动重启)。这为"在 spot 实例上运行训练与推理并自动恢复"提供了工程级保障,也正是原文档中"battle-tested job recovery"所指的实现基础。
什么是"你的 Sky":Sky Computing 的四级演进层次
正如自动驾驶拥有不同的自动化等级(Level 1-5),团队也可以以递增的"级别"和收益来采用 Sky Computing 与 SkyPilot。从单集群到多云,收益逐级放大:
级别一:固定集群(如 Kubernetes、Slurm)
- 面向 AI 用户习惯设计的、简单的作业提交与管理接口;
- 支持在你的集群上运行集群、作业与服务;
- 成本节省:Autostop(自动停机)、队列(queueing)与更高的硬件利用率;
- 面向未来:未来新增其他集群或云时无需重新改造工具链。
级别二:单个云的单一区域/可用区
- 自动重试、自动回退的供给器(provisioner):指定多个硬件回退目标,SkyPilot 会自动优化并自动重试,以对抗 GPU 短缺;
- 久经考验的作业恢复能力,包括在 spot 实例上的训练与服务;
- 简单的工作负载打包(见 Quickstart):把现有 AI 项目包装进一份简单的 SkyPilot YAML,所有基础设施琐事全部交给 SkyPilot;
- 加上以上级别的全部收益。
级别三:单个云的多个区域
- 单个作业可利用多个区域,提升 GPU 可用性与恢复速度;
- 模型副本可跨区域分布,提升可用性与成本节省;
- 加上以上级别的全部收益。
级别四:多云或多集群
- 将所有基础设施合并为一个统一池(你的Sky),获得更高的利用率、成本节省与容量;
- 加上以上级别的全部收益。
值得注意的是,无论团队处于哪个级别,其工作负载的描述方式都保持一致——这正是"未来无忧"(future-proofness)的关键:级别之间的跃迁不需要重写任务定义,只需要扩充 SkyPilot 可感知的infra搜索空间。
生态系统:Sky Computing 技术栈的后续延伸
围绕 Sky Computing 这一范式,UC Berkeley 的系统社区(及更广范围)已经产出了多个后续项目,以扩展 Sky Computing 技术栈:
- SkyServe:SkyPilot 的跨区域、跨云 AI 推理服务库(相关用户文档见 docs/source/serving/);
- Can't Be Late:面向 SkyPilot 的高级 spot 实例调度策略(NSDI '24 最佳论文);
- Skyplane:快速且高性价比的跨云数据传输开源工具;
- Cloudcast:高吞吐、成本感知的跨区域与跨云组播(multicast);
- FogROS2:基于 SkyPilot 利用 Sky Computing 的开源云机器人平台;
- 以及更多正在推进中的项目。
此外,SkyPilot 系统本身发表于 NSDI 2023(论文与 talk),其研究成果已接受学术界检验。
如何参与与上手
- 试用 SkyPilot:通过 Quickstart 在 5 分钟内体验 Sky Computing——先完成 安装说明,然后定义你的第一个 Task 并用
sky launch启动;之后可用sky status查看跨区域、跨云的全部集群,用ssh <cluster>直连集群,用sky jobs launch扩展到上百个受管作业,并通过sky dashboard在一个面板中观察集群与作业状态。 - 反馈与交流:可通过项目 GitHub 仓库提交 issue 或在社区 Slack 中交流。
- 贡献代码:SkyPilot 欢迎社区贡献,参与方式见仓库根目录的 CONTRIBUTING.md(社区行为规范详见 CLAUDE.md 与 AGENTS.md 中的开发约定)。
更丰富的可运行示例分散在仓库 examples/(覆盖分布式训练、批量推理、spot、serving、Kubernetes、TPU 等场景)与 llm/(覆盖 vLLM、SGLang、DeepSeek、Llama 系列等大模型工作负载)目录中,是理解"统一接口 + 优化器"范式的绝佳实战素材。
结语
Sky Computing 的价值主张清晰而有力:面对组合爆炸的(位置、硬件、定价模型)搜索空间,与其让工程师逐项适配,不如用统一接口 + 全局优化器将碎片化的算力编织成一片"天空"。作为这一理念的开源实现,SkyPilot 通过 BYOC 模式尊重用户的既有云账户与治理边界,通过四级演进层次让任何规模的团队都能按需获益——无论你目前只拥有一台固定集群,还是横跨多个云厂商与 GPU 云的庞大舰队。
【免费下载链接】skypilotThe AI Compute Platform for frontier teams. SkyPilot turns fragmented AI compute into one AI supercomputer, so frontier AI teams build custom intelligence faster.项目地址: https://gitcode.com/GitHub_Trending/sk/skypilot
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考