关于 skypilot-multi-cloud-orchestration
这项技能指南介绍如何使用 SkyPilot 在多个云服务商上运行和管理机器学习工作负载。内容包括按成本和区域选择资源、Spot 任务恢复、分布式任务及模型服务。
主要功能
- 01多云工作负载编排
- 02自动选择云和区域
- 03Spot 任务恢复
- 04多节点分布式训练
- 05托管任务与检查点
- 06通过 Sky Serve 提供模型服务
适用场景
- 01跨云启动 GPU 训练
- 02运行可恢复的 Spot 任务
- 03管理多节点训练
- 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.mdsky-serve-model-serving.mdtroubleshooting.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 指定备用云平台 |
参考资料
资源
- 文档: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
Agent 操作流程
- 检查环境。 确认硬件、框架和服务端版本、模型格式及预期负载。
- 明确输入。 根据数据或用户确认格式、标识符和参数。任何会影响结果的值都应询问确认,不要猜测。
- 先运行小规模版本。 扩大规模之前,先服务或记录单个请求,或端到端运行一次。
- 使用上述说明和参考资料执行完整任务。
- 验证结果。 对照参考值测量延迟、吞吐量和输出正确性;检查资源使用情况和成本。
- 汇报。 说明运行内容(版本、命令、参数)、检查内容以及仍不确定的事项。
| 如果发生这种情况 | 请执行以下操作 |
|---|---|
| 服务无法启动或发生 OOM | 检查模型大小与内存是否匹配,以及量化和并行设置。 |
| 当前安装版本中缺少这些说明提到的函数、标志或端点 | 查看已安装版本自身的文档(help()、--help、官方文档),进行适配并告知用户。切勿编造 API。 |
| 必需的输入、标识符或参数不明确 | 询问用户,或在运行前明确说明所采用的假设。 |
诚信准则
- 切勿捏造结果、参数、标识符、引用或统计数据。如果无法运行或验证某项内容,请如实说明。
- 不要公开服务或凭据;在配置资源前确认云成本。
- 此处与版本相关的细节可能已过时:请对照已安装版本的官方文档进行确认。
- 对于需要付费、占用共享 GPU 或云配额、涉及个人或患者数据,或无法撤销的操作,必须先征求同意。
相关技能
modal-serverless-gpu:用于运行 ML 工作负载的无服务器 GPU 云平台。lambda-labs-gpu-cloud:用于 ML 训练和推理的预留及按需 GPU 云实例。ray-train:跨集群的分布式训练编排。
评论
支持 Markdown