SkyPilot多云编排Skill skypilot-multi-cloud-orchestration

SkyPilot 是一个多云编排平台,专为机器学习工作负载设计,提供自动成本优化、竞价实例自动恢复、多云管理和分布式训练支持。关键词:多云编排、ML 工作负载、成本优化、GPU 管理、自动恢复、分布式训练、SkyPilot、云计算、云原生架构。

云原生架构 0 次安装 0 次浏览 更新于 3/21/2026

name: skypilot-多云-编排 description: 用于 ML 工作负载的多云编排,具有自动成本优化功能。当您需要在多个云上运行训练或批量作业、利用具有自动恢复功能的竞价实例或在提供者之间优化 GPU 成本时使用。 version: 1.0.0 author: Orchestra Research license: MIT tags: [基础设施, 多云, 编排, GPU, 成本优化, SkyPilot] dependencies: [skypilot>=0.7.0]

SkyPilot 多云编排

使用 SkyPilot 运行 ML 工作负载并跨多云进行自动成本优化的全面指南。

何时使用 SkyPilot

使用 SkyPilot 当:

  • 在多个云(AWS、GCP、Azure 等)上运行 ML 工作负载
  • 需要成本优化并自动选择云/区域
  • 在竞价实例上运行长作业并自动恢复
  • 管理分布式多节点训练
  • 希望为 20+ 云提供商提供统一接口
  • 需要避免供应商锁定

关键特性:

  • 多云:AWS、GCP、Azure、Kubernetes、Lambda、RunPod、20+ 提供商
  • 成本优化:自动选择最便宜的云/区域
  • 竞价实例:3-6倍成本节省,自动恢复
  • 分布式训练:多节点作业,组调度
  • 托管作业:自动恢复、检查点、容错
  • Sky Serve:模型服务,自动扩展

使用替代方案:

  • Modal:用于更简单的无服务器 GPU,具有 Python 原生 API
  • RunPod:用于单云持久 Pod
  • Kubernetes:用于现有 K8s 基础设施
  • Ray:用于纯基于 Ray 的编排

快速开始

安装

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: my-task

# 资源需求
resources:
  cloud: aws              # 可选:如果省略则自动选择
  region: us-west-2       # 可选:如果省略则自动选择
  accelerators: A100:4    # GPU 类型和数量
  cpus: 8+                # 最小 CPU
  memory: 32+             # 最小内存(GB)
  use_spot: true          # 使用竞价实例
  disk_size: 256          # 磁盘大小(GB)

# 分布式训练的节点数量
num_nodes: 2

# 工作目录(同步到 ~/sky_workdir)
workdir: .

# 设置命令(运行一次)
setup: |
  pip install -r requirements.txt

# 运行命令
run: |
  python train.py

关键命令

命令 用途
sky launch 启动集群并运行任务
sky exec 在现有集群上运行任务
sky status 显示集群状态
sky stop 停止集群(保留状态)
sky down 终止集群
sky logs 查看任务日志
sky queue 显示作业队列
sky jobs launch 启动托管作业
sky serve up 部署服务端点

GPU 配置

可用加速器

# NVIDIA GPUs
accelerators: T4:1
accelerators: L4:1
accelerators: A10G:1
accelerators: L40S:1
accelerators: A100:4
accelerators: A100-80GB:8
accelerators: H100:8

# 云特定
accelerators: V100:4         # AWS/GCP
accelerators: TPU-v4-8       # GCP TPUs

GPU 后备

resources:
  accelerators:
    H100: 8
    A100-80GB: 8
    A100: 8
  any_of:
    - cloud: gcp
    - cloud: aws
    - cloud: azure

竞价实例

resources:
  accelerators: A100:8
  use_spot: true
  spot_recovery: FAILOVER  # 抢占时自动恢复

集群管理

启动和执行

# 启动新集群
sky launch -c mycluster task.yaml

# 在现有集群上运行(跳过设置)
sky exec mycluster another_task.yaml

# 交互式 SSH
ssh mycluster

# 流日志
sky logs mycluster

自动停止

resources:
  accelerators: A100:4
  autostop:
    idle_minutes: 30
    down: true  # 终止而不是停止
# 通过 CLI 设置自动停止
sky autostop mycluster -i 30 --down

集群状态

# 所有集群
sky status

# 详细视图
sky status -a

分布式训练

多节点设置

resources:
  accelerators: A100:8

num_nodes: 4  # 4 节点 × 8 GPUs = 32 GPUs 总计

setup: |
  pip install torch torchvision

run: |
  torchrun \
    --nnodes=$SKYPILOT_NUM_NODES \
    --nproc_per_node=$SKYPILOT_NUM_GPUS_PER_NODE \
    --node_rank=$SKYPILOT_NODE_RANK \
    --master_addr=$(echo "$SKYPILOT_NODE_IPS" | head -n1) \
    --master_port=12355 \
    train.py

环境变量

变量 描述
SKYPILOT_NODE_RANK 节点索引(0 到 num_nodes-1)
SKYPILOT_NODE_IPS 换行分隔的 IP 地址
SKYPILOT_NUM_NODES 总节点数
SKYPILOT_NUM_GPUS_PER_NODE 每个节点的 GPU 数

仅头节点执行

run: |
  if [ "${SKYPILOT_NODE_RANK}" == "0" ]; then
    python orchestrate.py
  fi

托管作业

竞价恢复

# 启动具有竞价恢复的托管作业
sky jobs launch -n my-job train.yaml

检查点

name: training-job

file_mounts:
  /checkpoints:
    name: my-checkpoints
    store: s3
    mode: MOUNT

resources:
  accelerators: A100:8
  use_spot: true

run: |
  python train.py \
    --checkpoint-dir /checkpoints \
    --resume-from-latest

作业管理

# 列出作业
sky jobs queue

# 查看日志
sky jobs logs my-job

# 取消作业
sky jobs cancel my-job

文件挂载和存储

本地文件同步

workdir: ./my-project  # 同步到 ~/sky_workdir

file_mounts:
  /data/config.yaml: ./config.yaml
  ~/.vimrc: ~/.vimrc

云存储

file_mounts:
  # 挂载 S3 桶
  /datasets:
    source: s3://my-bucket/datasets
    mode: MOUNT  # 从 S3 流式传输

  # 复制 GCS 桶
  /models:
    source: gs://my-bucket/models
    mode: COPY  # 预取到磁盘

  # 缓存挂载(快速写入)
  /outputs:
    name: my-outputs
    store: s3
    mode: MOUNT_CACHED

存储模式

模式 描述 最适合
MOUNT 从云流式传输 大数据集,读重型
COPY 预取到磁盘 小文件,随机访问
MOUNT_CACHED 缓存并异步上传 检查点,输出

Sky Serve(模型服务)

基础服务

# service.yaml
service:
  readiness_probe: /health
  replica_policy:
    min_replicas: 1
    max_replicas: 10
    target_qps_per_replica: 2.0

resources:
  accelerators: A100:1

run: |
  python -m vllm.entrypoints.openai.api_server \
    --model meta-llama/Llama-2-7b-chat-hf \
    --port 8000
# 部署
sky serve up -n my-service service.yaml

# 检查状态
sky serve status

# 获取端点
sky serve status my-service

自动扩展策略

service:
  replica_policy:
    min_replicas: 1
    max_replicas: 10
    target_qps_per_replica: 2.0
    upscale_delay_seconds: 60
    downscale_delay_seconds: 300
  load_balancing_policy: round_robin

成本优化

自动云选择

# SkyPilot 找到最便宜选项
resources:
  accelerators: A100:8
  # 未指定云 - 自动选择最便宜
# 显示优化器决策
sky launch task.yaml --dryrun

云偏好

resources:
  accelerators: A100:8
  any_of:
    - cloud: gcp
      region: us-central1
    - cloud: aws
      region: us-east-1
    - cloud: azure

环境变量

envs:
  HF_TOKEN: $HF_TOKEN  # 从本地环境继承
  WANDB_API_KEY: $WANDB_API_KEY

# 或使用秘密
secrets:
  - HF_TOKEN
  - WANDB_API_KEY

常见工作流

工作流 1:带检查点的微调

name: llm-finetune

file_mounts:
  /checkpoints:
    name: finetune-checkpoints
    store: s3
    mode: MOUNT_CACHED

resources:
  accelerators: A100:8
  use_spot: true

setup: |
  pip install transformers accelerate

run: |
  python train.py \
    --checkpoint-dir /checkpoints \
    --resume

工作流 2:超参数扫描

name: hp-sweep-${RUN_ID}

envs:
  RUN_ID: 0
  LEARNING_RATE: 1e-4
  BATCH_SIZE: 32

resources:
  accelerators: A100:1
  use_spot: true

run: |
  python train.py \
    --lr $LEARNING_RATE \
    --batch-size $BATCH_SIZE \
    --run-id $RUN_ID
# 启动多个作业
for i in {1..10}; do
  sky jobs launch sweep.yaml \
    --env RUN_ID=$i \
    --env LEARNING_RATE=$(python -c "import random; print(10**random.uniform(-5,-3))")
done

调试

# SSH 到集群
ssh mycluster

# 查看日志
sky logs mycluster

# 检查作业队列
sky queue mycluster

# 查看托管作业日志
sky jobs logs my-job

常见问题

问题 解决方案
配额超出 请求配额增加,尝试不同区域
竞价抢占 使用 sky jobs launch 自动恢复
文件同步慢 对输出使用 MOUNT_CACHED 模式
GPU 不可用 使用 any_of 后备云

参考

资源