SkyPilot 多云编排(SkyPilot Multi-Cloud Orchestration)是一套使用 SkyPilot 跨云运行机器学习工作负载并自动优化成本的指南。
一、用途与适用场景 当需要跨多个云(AWS、GCP、Azure 等)运行 ML 工作负载、希望自动选择最便宜的云和区域、在抢占式实例上运行长任务并自动恢复、管理多节点分布式训练、使用统一接口对接 20 多家云提供商、或避免供应商锁定时,可使用 SkyPilot。若需求更简单,可考虑替代方案:Modal 适合更简单的无服务器 GPU 与 Python 原生 API;RunPod 适合单云持久 Pod;Kubernetes 适合已有 K8s 基础设施;Ray 适合纯 Ray 编排。
二、主要能力
- 多云支持:AWS、GCP、Azure、Kubernetes、Lambda、RunPod 等 20 多家提供商。
- 成本优化:自动选择最便宜的云和区域。
- 抢占式实例:可节省 3-6 倍成本,并支持自动恢复。
- 分布式训练:多节点作业与 gang scheduling。
- 托管作业:自动恢复、检查点、容错。
- Sky Serve:带自动扩缩的模型服务。
三、安装与快速开始 安装命令: pip install "skypilot[aws,gcp,azure,kubernetes]" 验证云凭证: sky check
Hello World 示例,创建 hello.yaml: resources: accelerators: T4:1
run: | nvidia-smi echo "Hello from SkyPilot!"
启动: sky launch -c hello hello.yaml SSH 到集群: ssh hello 终止: sky down hello
四、核心概念 任务 YAML 结构包含:name(可选任务名)、resources(资源需求,如 cloud、region、accelerators、cpus、memory、use_spot、disk_size)、num_nodes(分布式训练的节点数)、workdir(同步到 ~/sky_workdir 的工作目录)、setup(仅运行一次的安装命令)、run(运行命令)。
常用命令包括:sky launch(启动集群并运行任务)、sky exec(在已有集群运行任务)、sky status(查看集群状态)、sky stop(停止集群并保留状态)、sky down(终止集群)、sky logs(查看任务日志)、sky queue(查看作业队列)、sky jobs launch(启动托管作业)、sky serve up(部署服务端点)。
五、GPU 配置 可用加速器示例:T4:1、L4:1、A10G:1、L40S:1、A100:4、A100-80GB:8、H100:8;云特定如 V100:4(AWS/GCP)、TPU-v4-8(GCP TPU)。可通过 any_of 配置 GPU 回退与多云备选。
六、抢占式实例与集群管理 抢占式配置示例: resources: accelerators: A100:8 use_spot: true spot_recovery: FAILOVER
集群管理支持 sky launch 启动、sky exec 在已有集群执行(跳过 setup)、ssh 交互、sky logs 流式日志。可通过 autostop 设置空闲自动停止或终止,例如 idle_minutes: 30 与 down: true,或用 sky autostop mycluster -i 30 --down。
七、分布式训练 多节点示例:num_nodes: 4 配合 accelerators: A100:8,共 32 GPU。使用 torchrun 时可用环境变量:SKYPILOT_NODE_RANK(节点索引)、SKYPILOT_NODE_IPS(换行分隔的 IP 地址)、SKYPILOT_NUM_NODES(节点总数)、SKYPILOT_NUM_GPUS_PER_NODE(每节点 GPU 数)。也可仅在头节点执行,例如判断 SKYPILOT_NODE_RANK 是否为 0。
八、托管作业与检查点 使用 sky jobs launch -n my-job train.yaml 启动带抢占恢复的托管作业。检查点可通过 file_mounts 挂载 S3 存储并配合 --resume-from-latest。作业管理命令:sky jobs queue、sky jobs logs、sky jobs cancel。
九、文件挂载与存储 支持本地文件同步(workdir、file_mounts)与云存储挂载。存储模式:MOUNT(从云流式读取,适合大型数据集、读多场景)、COPY(预取到磁盘,适合小文件、随机访问)、MOUNT_CACHED(缓存并异步上传,适合检查点、输出)。
十、Sky Serve 模型服务 Sky Serve 用于模型服务,详细代码示例与参数表见 references/sky-serve-model-serving.md。
十一、成本优化 不指定 cloud 时自动选择最便宜选项;可用 sky launch task.yaml --dryrun 查看优化器决策。可通过 any_of 指定云偏好,通过 envs 或 secrets 传入 HF_TOKEN、WANDB_API_KEY 等环境变量。
十二、常见工作流 包括带检查点的微调(llm-finetune,使用 MOUNT_CACHED 检查点与抢占实例)、超参数扫描(通过 RUN_ID、LEARNING_RATE、BATCH_SIZE 环境变量循环启动多个作业)。
十三、调试与常见问题 调试可用 ssh、sky logs、sky queue、sky jobs logs。常见问题:配额超限需申请配额或换区域;抢占式中断建议用 sky jobs launch 自动恢复;文件同步慢建议对输出使用 MOUNT_CACHED;GPU 不可用建议用 any_of 回退云。
十四、资源与操作规范 文档:https://docs.skypilot.co;GitHub:https://github.com/skypilot-org/skypilot;Slack:https://slack.skypilot.co;示例:https://github.com/skypilot-org/skypilot/tree/master/examples。
操作规范要求:先检查环境(硬件、框架、服务器版本、模型格式、预期负载);确认输入格式、标识符与参数,不确定时询问而非猜测;先运行小规模版本再扩展;按说明执行完整任务;验证延迟、吞吐与输出正确性并检查资源与成本;报告运行内容、检查项与不确定项。若服务器启动失败或 OOM,检查模型大小与内存、量化与并行设置;若安装版本缺少某函数、标志或端点,查阅该版本自身文档并告知用户,绝不臆造 API;若输入、标识符或参数不明确,询问用户或明确说明假设。完整性规则:不得捏造结果、参数、标识符、引用或统计;无法运行或验证时如实说明;不得公开暴露服务或凭证,配置前确认云成本;版本相关细节可能过时,需对照官方文档确认;涉及花钱、占用共享 GPU 或云配额、触碰个人或患者数据、或不可撤销的操作前应先询问。
相关技能:modal-serverless-gpu(无服务器 GPU 云平台)、lambda-labs-gpu-cloud(预留与按需 GPU 云实例)、ray-train(跨集群分布式训练编排)。