深入解析 SkyPilot:在 Kubernetes、Slurm 与 20+ 云上统一运行、管理与扩展 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
SkyPilot 是一个面向前沿 AI 团队的系统,用于在任何 AI 基础设施上运行、管理和扩展 AI 工作负载。它为 AI 团队提供统一的接口在任意基础设施上运行任务,为基础设施团队提供统一的控制平面来管理所有 AI 计算资源。读完本文,你将掌握 SkyPilot 的核心抽象(Task/Cluster/Cloud)、任务 YAML 定义语法、sky launch的完整执行流水线、安装配置方法,以及它如何在 Kubernetes、Slurm 与多家云厂商之间实现统一调度、自动故障转移与 GPU 利用率优化。
定位:一统 AI 计算的控制平面
SkyPilot 的核心理念可以概括为一句话:把你的碎片化 AI 计算整合成一台 AI 超级计算机。在官方定位中,SkyPilot 是一个运行、管理并扩展 AI 工作负载的系统——AI 团队通过它获得在任意基础设施上运行任务的简单接口,基础设施团队则通过它获得统一的控制平面,涵盖高级调度、伸缩与编排能力。
从 sky/execution.py 的入口函数签名可以看到,SkyPilot 的核心 APIsky.launch()接受一个sky.Task(或实验性的sky.Dag),并支持retry_until_up、idle_minutes_to_autostop、down、dryrun、optimize_target、no_setup、fast、resize等丰富的启动参数,这构成了整个平台"运行-管理-扩展"三大能力的底层骨架:
def launch( task: Union['sky.Task', 'sky.Dag'], cluster_name: Optional[str] = None, retry_until_up: bool = False, idle_minutes_to_autostop: Optional[int] = None, dryrun: bool = False, down: bool = False, stream_logs: bool = True, optimize_target: common.OptimizeTarget = common.OptimizeTarget.COST, no_setup: bool = False, ... ) -> Tuple[Optional[int], Optional[backends.ResourceHandle]]:值得一提的是,launch在 sky/execution.py 中被@timeline.event、@usage_lib.entrypoint与@tempstore.with_tempdir装饰,说明每次启动都会被纳入使用统计、埋点追踪,并且整个启动过程共享一个临时目录、结束后整体回收——这是平台可观测性与资源清洁性的体现。
从架构层面看,SkyPilot 天然分为三层视角:顶层是功能入口(Clusters / Jobs / Services),分别对应开发、训练、批处理与部署(长期运行的推理服务)等场景;中间是 SkyPilot 核心,负责"运行、管理、扩展 AI 工作负载";底层是可编排的计算资源——Kubernetes、Slurm、云 VM(AWS/GCP/Azure 等 20+ 云)以及本地机房(on-premise),对应的架构示意见仓库根目录 README 中的 skypilot-abstractions-long-2.png。
核心价值:四大能力支柱
1. 对 AI 用户:极致的易用性
- 快速拉起计算资源:在任何自有基础设施上,一条命令即可获得计算环境;
- 环境与任务即代码:用 YAML 或 Python API 声明式描述环境与任务,简单且可移植;
- 轻松的任务管理:排队、运行、自动恢复大量任务,无需人工干预。
2. 对 AI 与基础设施团队:让 Kubernetes 变简单
- Slurm 般的易用性 + 云原生的健壮性:既有 HPC 调度器的亲切体验,又有 K8s 的弹性与容错;
- 本地开发体验直通 K8s:可以 SSH 进入 Pod、同步代码、连接 IDE,像在本地开发一样操作集群;
- 为集群提速:支持 gang scheduling(集会调度/齐射调度)、多集群管理与自动扩缩容。
3. 统一多云、多集群、多硬件
- 一个接口搞定所有资源:预留 GPU、Kubernetes 集群、Slurm 集群、20+ 云厂商统一抽象;
- 灵活的资源配置:GPU/TPU/CPU 统一声明,内置智能故障转移(auto-failover);
- 团队部署与资源共享:通过 API Server 支持多用户协作与资源隔离。
4. 最大化 GPU 集群利用率
- Autostop(自动停机):空闲资源自动清理,杜绝"占着 GPU 不跑任务"的浪费;
- Binpacking(装箱调度):在共享集群上把任务紧凑地打包到已有节点上,减少碎片;
- 智能调度器:自动把任务调度到最可用的基础设施上,兼顾成本与可用性。
一分钟上手:第一个 SkyPilot 任务
任务是什么?
一个 SkyPilot 任务(Task)声明四类信息:资源需求(resources)、需要同步的数据(workdir / file_mounts)、安装命令(setup)与任务命令(run)。一旦用这个统一接口(YAML 或 Python API)写好,任务就可以在任何可用基础设施(Kubernetes、Slurm、云等)上启动,从而避免厂商锁定,并可以轻松迁移到不同提供商。
编写my_task.yaml
resources: accelerators: A100:8 # 8x NVIDIA A100 GPU num_nodes: 1 # Number of VMs to launch # Working directory (optional) containing the project codebase. # Its contents are synced to ~/sky_workdir/ on the cluster. workdir: ~/torch_examples # Commands to be run before executing the job. # Typical use: pip install -r requirements.txt, git clone, etc. setup: | cd mnist pip install -r requirements.txt # Commands to run as a job. # Typical use: launch the main program. run: | cd mnist python main.py --epochs 1各字段说明:
| 字段 | 作用 | 说明 |
|---|---|---|
resources.accelerators | 声明加速器 | 支持A100:8(8 卡)、V100:4等型号:数量语法,也支持 TPU、CPU 与多资源组合 |
num_nodes | 声明要启动的节点数 | 大于 1 即自动形成多节点分布式集群 |
workdir | 本地工作目录(可选) | 内容会同步到集群上的~/sky_workdir/ |
setup | 任务运行前的安装命令 | 典型用法:pip install -r requirements.txt、git clone等,只在首次/变更时执行 |
run | 作为任务执行的命令 | 典型用法:启动主程序 |
准备 workdir(克隆示例代码):
git clone https://github.com/pytorch/examples.git ~/torch_examples启动任务(注意:此示例需要具备 GPU 实例的访问配额):
sky launch my_task.yamlsky launch背后发生了什么
sky launch一条命令背后,SkyPilot 为你完成了全部"脏活累活":
- 寻找最优基础设施:在你的集群或云中找出最便宜且有货的资源;
- 供给 GPU(Pod 或 VM):若返回容量错误,自动故障转移(auto-failover)到其他区域/可用区;
- 同步 workdir:把本地
workdir同步到已供给的集群; - 自动安装依赖:执行任务中的
setup命令; - 运行任务并流式输出日志:执行
run命令,日志实时流式返回终端。
从源码层面看,sky.launch的实现对应 sky/execution.py 中定义的Stage 流水线(sky/execution.py),每个阶段都是一个可插拔的枚举成员:
class Stage(enum.Enum): """Stages for a run of a sky.Task.""" CLONE_DISK = enum.auto() OPTIMIZE = enum.auto() PROVISION = enum.auto() SYNC_WORKDIR = enum.auto() SYNC_FILE_MOUNTS = enum.auto() SETUP = enum.auto() PRE_EXEC = enum.auto() EXEC = enum.auto() DOWN = enum.auto()从 sky/execution.py 中_execute对阶段集合的处理可以确认实际执行顺序:OPTIMIZE → PROVISION → SYNC_WORKDIR / SYNC_FILE_MOUNTS → SETUP → PRE_EXEC → EXEC → DOWN。其中:
- OPTIMIZE:调用优化器确定最优执行计划(详见下文"智能调度");
- PROVISION:供给实例/Pod,支持
retry_until_up重试直到成功; - SYNC_WORKDIR / SYNC_FILE_MOUNTS:同步工作目录与文件挂载;
- SETUP:安装依赖(
no_setup=True可跳过); - EXEC:提交任务到集群作业队列并执行;
- DOWN:任务结束后按需拆除集群(配合
--down或--idle-minutes-to-autostop)。
这一阶段模型贯穿了 README 中描述的全部 5 个"heavy-lifting"步骤,也是理解 SkyPilot 行为(如--fast跳过重复供给、--down结束后拆除)的关键。
安装与配置
快速安装
SkyPilot 官方推荐用uv安装(同样支持pip、nightly 构建与源码安装),核心命令如下:
# Choose your clouds: uv pip install "skypilot[kubernetes,aws,gcp,azure,oci,nebius,lambda,runpod,fluidstack,paperspace,cudo,ibm,scp,seeweb,shadeform,verda]"安装时按需选择云厂商的 extra 依赖即可;若使用uv venv创建环境,必须带--seed参数(确保环境内含pip,SkyPilot 远端构建需要);使用uv tool install时则必须带--with pip。SkyPilot 要求 Python 版本范围在 3.9~3.13 之间(pip 安装路径下为 3.7~3.13),详细的安装矩阵可参考 docs/source/getting-started/installation.rst。
验证云访问
安装完成后运行:
sky check它会检查各云厂商的凭据与依赖是否就绪,输出类似下面的摘要:
Checking credentials to enable clouds for SkyPilot. AWS: enabled GCP: enabled Azure: enabled OCI: enabled Lambda: enabled Nebius: enabled RunPod: enabled ... Kubernetes: enabled Slurm: enabled如果某些云显示未启用,sky check会给出解决提示;也可以只检查指定云,例如sky check aws gcp。
直连 Agent(Claude Code、Codex 等)
SkyPilot 提供了官方 Skill 安装路径:安装仓库内 agent/INSTALL.md 的指引即可让 Agent 获得完整的 SkyPilot 使用能力,从而直接用自然语言驱动任务编写与启动。
BYOC:自带云账户
SkyPilot 是BYOC(Bring Your Own Cloud)模式——所有任务都运行在你自己的云账户、VPC 与集群内。这意味着没有资源托管费用,数据不出你的网络边界,安全与合规由你掌控。
智能调度与故障转移的原理
README 中提到的"找最便宜且有货的设施"与"自动故障转移",其底层实现在 sky/optimizer.py 的Optimizer.optimize()中。它接收一个任务 DAG,根据优化目标(成本或时间)为每个任务挑选best_resources,并在无可满足资源时抛出ResourcesUnavailableError:
def optimize(dag: 'dag_lib.Dag', minimize: common.OptimizeTarget = common.OptimizeTarget.COST, blocked_resources: Optional[Iterable[...]] = None, quiet: bool = False) -> 'dag_lib.Dag':优化目标定义在 sky/utils/common.py:
class OptimizeTarget(enum.Enum): COST = 0 TIME = 1sky.launch的optimize_target参数默认取OptimizeTarget.COST,即默认以最低成本为优化目标;若追求更快的训练/推理吞吐,可以传入OptimizeTarget.TIME切换为最短时间。优化过程中还会对每个候选项计算数据出口(egress)成本/时间(_egress_cost_or_time),即"把数据从 A 云搬到 B 云"的开销也会被纳入决策,这与 README 强调的"跨云无锁定、轻松迁移"设计一脉相承。
在供给阶段,若首选区域返回容量错误(如配额不足、售罄),SkyPilot 会按排序自动故障转移到下一个可用区域/云,直到成功或抛出资深限度的ResourcesUnavailableError——这正是"智能故障转移"的实现支撑。
为什么 SkyPilot 在 Kubernetes 上尤其值得一试
SkyPilot 让 Kubernetes 变得AI-native。它通过两条路径"涡轮增压"现有 K8s 集群:
加速 AI/ML 开发速度:
- 面向 AI 的友好接口来启动任务与部署;
- 大幅简化的 K8s 交互式开发体验:SSH 进入 Pod / 同步代码 / 连接 IDE。
优化 GPU 调度、利用率与扩缩容:
- 高级调度:gang scheduling(多节点任务齐射调度,避免死锁式等待)、多节点任务与排队机制;
- 多集群支持:把所有集群纳入一个控制平面统一管理;
- 多云支持:一个一致的接口管理众多提供商。
对同时运营本地 K8s 与公有云 GPU 的团队,这意味着可以先把任务在本地集群跑起来做开发调试,需要更多算力时用同一个 YAML 无缝溢出到云上——接口不变、代码不变。
可运行的示例库
仓库内提供了覆盖开发、训练、推理服务、LLM 模型、AI 应用与常见框架的大量真实示例,源码分布在 llm/ 与 examples/ 目录下:
| 类别 | 代表性示例 |
|---|---|
| 训练 | Verl(RL 训练)、Finetune Llama 4、TorchTitan、PyTorch、DeepSpeed、NeMo、Ray、Unsloth、Jax/TPU、OpenRLHF |
| 推理服务 | vLLM、SGLang、Ollama |
| 模型 | DeepSeek-R1、Llama 4、Llama 3、CodeLlama、Qwen、Kimi-K2、Kimi-K2-Thinking、Mixtral |
| AI 应用 | RAG、向量数据库(ChromaDB、CLIP 等) |
| 常用框架 | Airflow、Jupyter、marimo |
这些示例全部是开箱即用的.yaml任务文件——复制、按需修改resources与run,即可复现对应场景。例如启动 vLLM 推理服务只需sky serve up llm/vllm/serve.yaml(服务场景)或sky launch llm/vllm/serve.yaml(单次任务场景),GPU 供给、镜像拉取、端口暴露均由 SkyPilot 接管。
生态与进一步学习
- 完整的入门路径:安装(上文)→ Quickstart → 任务教程,官方文档从 docs/source/getting-started/installation.rst 与 docs/source/getting-started/quickstart.rst 起步;
- 参与贡献:欢迎各类贡献,见 CONTRIBUTING.md;
- 反馈渠道:问题与功能请求提 GitHub Issue,使用咨询走 GitHub Discussions,日常交流在 SkyPilot Slack 社区。
小结
SkyPilot 用一个统一接口把 Kubernetes、Slurm、20+ 公有云与本地机房编织成一台"AI 超级计算机":对 AI 用户,它是"环境与任务即代码"的简单入口;对基础设施团队,它是具备高级调度、装箱、自动停机与多集群编排的统一控制平面。从 sky/execution.py 的九阶段流水线,到 sky/optimizer.py 的成本/时间双目标优化,再到 llm 与 examples 中开箱即用的示例库,整条链路都以"写一次、随处跑、省成本、提利用率"为最终目标。对于正在多云碎片中挣扎的 AI 团队,SkyPilot 提供了一条立即可行的统一路径。
【免费下载链接】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),仅供参考