mcpField
S
skypilot-multi-cloud-orchestration

skypilot-multi-cloud-orchestration

github.com/kalarislabs其他7343 次安装4 天前更新
代码仓库

关于 skypilot-multi-cloud-orchestration

这项技能指南介绍如何使用 SkyPilot 在多个云服务商上运行和管理机器学习工作负载。内容包括按成本和区域选择资源、Spot 任务恢复、分布式任务及模型服务。

主要功能

  1. 01多云工作负载编排
  2. 02自动选择云和区域
  3. 03Spot 任务恢复
  4. 04多节点分布式训练
  5. 05托管任务与检查点
  6. 06通过 Sky Serve 提供模型服务

适用场景

  1. 01跨云启动 GPU 训练
  2. 02运行可恢复的 Spot 任务
  3. 03管理多节点训练
  4. 04部署自动扩缩的模型端点

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/kalarislabs/research-agent-skills --skill skypilot-multi-cloud-orchestration

安装后在 Claude Code 中输入/skypilot-multi-cloud-orchestration确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
advanced-usage.md
sky-serve-model-serving.md
troubleshooting.md

详细介绍

SkyPilot 多云编排

使用 SkyPilot 在多个云平台上运行 ML 工作负载并自动优化成本的全面指南。

何时使用 SkyPilot

在以下情况下使用 SkyPilot:

  • 在多个云平台(AWS、GCP、Azure 等)上运行 ML 工作负载
  • 需要通过自动选择云平台/区域来优化成本
  • 使用竞价实例运行长时间任务并自动恢复
  • 管理分布式多节点训练
  • 希望通过统一接口使用 20 多家云服务提供商
  • 需要避免被供应商锁定

主要功能:

  • 多云:AWS、GCP、Azure、Kubernetes、Lambda、RunPod 及 20 多家服务提供商
  • 成本优化:自动选择成本最低的云平台/区域
  • 竞价实例:节省 3~6 倍成本并自动恢复
  • 分布式训练:通过 gang scheduling 运行多节点任务
  • 托管任务:自动恢复、检查点和容错
  • Sky Serve:支持自动扩缩容的模型服务

以下情况请改用其他方案:

  • Modal:适合通过 Python 原生 API 更简单地使用无服务器 GPU
  • RunPod:适合使用单一云平台的持久化 Pod
  • Kubernetes:适合已有 K8s 基础设施的情况
  • Ray:适合纯 Ray 编排

快速开始

安装
pip install "skypilot[aws,gcp,azure,kubernetes]"

# Verify cloud credentials
sky check
Hello World

创建 hello.yaml:

resources:
  accelerators: T4:1

run: |
  nvidia-smi
  echo "Hello from SkyPilot!"

启动:

sky launch -c hello hello.yaml

# SSH to cluster
ssh hello

# Terminate
sky down hello

核心概念

任务 YAML 结构
# Task name (optional)
name: my-task

# Resource requirements
resources:
  cloud: aws              # Optional: auto-select if omitted
  region: us-west-2       # Optional: auto-select if omitted
  accelerators: A100:4    # GPU type and count
  cpus: 8+                # Minimum CPUs
  memory: 32+             # Minimum memory (GB)
  use_spot: true          # Use spot instances
  disk_size: 256          # Disk size (GB)

# Number of nodes for distributed training
num_nodes: 2

# Working directory (synced to ~/sky_workdir)
workdir: .

# Setup commands (run once)
setup: |
  pip install -r requirements.txt

# Run commands
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

# Cloud-specific
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  # Auto-recover on preemption

集群管理

启动和执行
# Launch new cluster
sky launch -c mycluster task.yaml

# Run on existing cluster (skip setup)
sky exec mycluster another_task.yaml

# Interactive SSH
ssh mycluster

# Stream logs
sky logs mycluster
自动停止
resources:
  accelerators: A100:4
  autostop:
    idle_minutes: 30
    down: true  # Terminate instead of stop
# Set autostop via CLI
sky autostop mycluster -i 30 --down
集群状态
# All clusters
sky status

# Detailed view
sky status -a

分布式训练

多节点配置
resources:
  accelerators: A100:8

num_nodes: 4  # 4 nodes × 8 GPUs = 32 GPUs total

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

托管任务

竞价实例恢复
# Launch managed job with spot recovery
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
任务管理
# List jobs
sky jobs queue

# View logs
sky jobs logs my-job

# Cancel job
sky jobs cancel my-job

文件挂载和存储

本地文件同步
workdir: ./my-project  # Synced to ~/sky_workdir

file_mounts:
  /data/config.yaml: ./config.yaml
  ~/.vimrc: ~/.vimrc
云存储
file_mounts:
  # Mount S3 bucket
  /datasets:
    source: s3://my-bucket/datasets
    mode: MOUNT  # Stream from S3

  # Copy GCS bucket
  /models:
    source: gs://my-bucket/models
    mode: COPY  # Pre-fetch to disk

  # Cached mount (fast writes)
  /outputs:
    name: my-outputs
    store: s3
    mode: MOUNT_CACHED
存储模式
模式描述适用场景
MOUNT从云端流式读取大型数据集、读取密集型场景
COPY预先获取到磁盘小文件、随机访问
MOUNT_CACHED缓存并异步上传检查点、输出

Sky Serve(模型服务)

详细信息、代码示例和参数表:references/sky-serve-model-serving.md。适用时请阅读此文档。

成本优化

自动选择云平台
# SkyPilot finds cheapest option
resources:
  accelerators: A100:8
  # No cloud specified - auto-select cheapest
# Show optimizer decision
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  # Inherited from local env
  WANDB_API_KEY: $WANDB_API_KEY

# Or use secrets
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
# Launch multiple jobs
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 to cluster
ssh mycluster

# View logs
sky logs mycluster

# Check job queue
sky queue mycluster

# View managed job logs
sky jobs logs my-job

常见问题

问题解决方案
超出配额申请提高配额,或尝试其他区域
竞价实例被回收使用 sky jobs launch 实现自动恢复
文件同步速度慢对输出使用 MOUNT_CACHED 模式
GPU 不可用使用 any_of 指定备用云平台

参考资料

资源

Agent 操作流程

  1. 检查环境。 确认硬件、框架和服务端版本、模型格式及预期负载。
  2. 明确输入。 根据数据或用户确认格式、标识符和参数。任何会影响结果的值都应询问确认,不要猜测。
  3. 先运行小规模版本。 扩大规模之前,先服务或记录单个请求,或端到端运行一次。
  4. 使用上述说明和参考资料执行完整任务。
  5. 验证结果。 对照参考值测量延迟、吞吐量和输出正确性;检查资源使用情况和成本。
  6. 汇报。 说明运行内容(版本、命令、参数)、检查内容以及仍不确定的事项。
如果发生这种情况请执行以下操作
服务无法启动或发生 OOM检查模型大小与内存是否匹配,以及量化和并行设置。
当前安装版本中缺少这些说明提到的函数、标志或端点查看已安装版本自身的文档(help()、--help、官方文档),进行适配并告知用户。切勿编造 API。
必需的输入、标识符或参数不明确询问用户,或在运行前明确说明所采用的假设。

诚信准则

  • 切勿捏造结果、参数、标识符、引用或统计数据。如果无法运行或验证某项内容,请如实说明。
  • 不要公开服务或凭据;在配置资源前确认云成本。
  • 此处与版本相关的细节可能已过时:请对照已安装版本的官方文档进行确认。
  • 对于需要付费、占用共享 GPU 或云配额、涉及个人或患者数据,或无法撤销的操作,必须先征求同意。

相关技能

  • modal-serverless-gpu:用于运行 ML 工作负载的无服务器 GPU 云平台。
  • lambda-labs-gpu-cloud:用于 ML 训练和推理的预留及按需 GPU 云实例。
  • ray-train:跨集群的分布式训练编排。

评论

支持 Markdown