news 2026/9/15 11:03:33

深入解析 SkyPilot:在 Kubernetes、Slurm 与 20+ 云上统一运行、管理与扩展 AI 工作负载

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
深入解析 SkyPilot:在 Kubernetes、Slurm 与 20+ 云上统一运行、管理与扩展 AI 工作负载

深入解析 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_upidle_minutes_to_autostopdowndryrunoptimize_targetno_setupfastresize等丰富的启动参数,这构成了整个平台"运行-管理-扩展"三大能力的底层骨架:

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.txtgit clone等,只在首次/变更时执行
run作为任务执行的命令典型用法:启动主程序

准备 workdir(克隆示例代码):

git clone https://github.com/pytorch/examples.git ~/torch_examples

启动任务(注意:此示例需要具备 GPU 实例的访问配额):

sky launch my_task.yaml

sky launch背后发生了什么

sky launch一条命令背后,SkyPilot 为你完成了全部"脏活累活":

  1. 寻找最优基础设施:在你的集群或云中找出最便宜且有货的资源;
  2. 供给 GPU(Pod 或 VM):若返回容量错误,自动故障转移(auto-failover)到其他区域/可用区;
  3. 同步 workdir:把本地workdir同步到已供给的集群;
  4. 自动安装依赖:执行任务中的setup命令;
  5. 运行任务并流式输出日志:执行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 = 1

sky.launchoptimize_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任务文件——复制、按需修改resourcesrun,即可复现对应场景。例如启动 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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/15 11:01:57

iii 0.21:把任意函数变成 REST 端点的完整路径

iii 0.21:把任意函数变成 REST 端点的完整路径 【免费下载链接】iii Effortlessly compose, extend, and observe every service in real-time for the first time ever. 项目地址: https://gitcode.com/GitHub_Trending/mo/iii 这篇文章带你用 iii 0.21 内置…

作者头像 李华
网站建设 2026/9/15 10:52:45

如何异步导出excel

当用户点击导出按钮时,我们不希望用户等待数据导出的整个过程,因为这可能会很长时间,导致页面超时或者用户体验下降。所以,我们采用异步处理的方式来完成这个任务。这就像是你去餐厅点了一份需要很长时间烹饪的食物,服…

作者头像 李华
网站建设 2026/9/15 10:52:06

C语言实现快速排序算法

1. 什么是快速排序算法快速排序的核心思想是通过分治法(Divide and Conquer)来实现排序。算法的基本步骤是:1. 选择一个基准值(通常是数组中的某个元素),将数组分成两部分,使得左边的部分所有元素都小于基准…

作者头像 李华