mcpField
S
skypilot-multi-cloud-orchestration

skypilot-multi-cloud-orchestration

github.com/orchestra-researchクラウド・DevOps14.1k952 回インストール19 週間前に更新
リポジトリ

skypilot-multi-cloud-orchestration について

SkyPilotは、複数のクラウドプロバイダーでMLワークロードを実行するコマンドラインのオーケストレーションシステムです。コストを考慮したクラウドやリージョンの選択、復旧機能付きジョブ、マルチノード学習、モデルサービングに対応します。

主な機能

  1. 0120以上のプロバイダーでワークロードを実行
  2. 02低コストのクラウドとリージョンを選択
  3. 03中断後にマネージドジョブを復旧
  4. 04分散マルチノード学習をオーケストレーション
  5. 05自動スケーリング対応モデルサービスのデプロイ

活用シーン

  1. 01複数クラウドでのGPUワークロード起動
  2. 02復旧機能付きスポットジョブの実行
  3. 03マルチノード学習ジョブの管理
  4. 04自動スケーリング対応モデルエンドポイントのデプロイ

インストール

コマンドをコピーしてターミナルで実行します。

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

インストール後、Claude Code で/skypilot-multi-cloud-orchestrationを入力して読み込まれたか確認します。

同梱ファイルreferences/advanced-usage.mdreferences/troubleshooting.md

詳細

SkyPilot マルチクラウドオーケストレーション

SkyPilot を使用して、自動コスト最適化を伴いながらクラウド間で ML ワークロードを実行するための包括的なガイドです。

SkyPilot を使用するタイミング

次の場合に SkyPilot を使用します:

  • 複数のクラウド(AWS、GCP、Azure など)にまたがって ML ワークロードを実行する場合
  • クラウド/リージョンの自動選択によるコスト最適化が必要な場合
  • 自動リカバリー付きのスポットインスタンスで長時間ジョブを実行する場合
  • 分散マルチノードトレーニングを管理する場合
  • 20 以上のクラウドプロバイダーに対する統一インターフェースが欲しい場合
  • ベンダーロックインを回避する必要がある場合

主な機能:

  • マルチクラウド: AWS、GCP、Azure、Kubernetes、Lambda、RunPod など 20 以上のプロバイダー
  • コスト最適化: 最も安いクラウド/リージョンを自動選択
  • スポットインスタンス: 自動リカバリーにより 3~6 倍のコスト削減
  • 分散トレーニング: ギャングスケジューリングによるマルチノードジョブ
  • マネージドジョブ: 自動リカバリー、チェックポイント、耐障害性
  • Sky Serve: 自動スケーリング付きのモデルサービング

代わりに検討できる選択肢:

  • Modal: Python ネイティブ API によるよりシンプルなサーバーレス GPU
  • RunPod: 単一クラウドの永続ポッド向け
  • 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(モデルサービング)

基本的なサービス
# 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
# Deploy
sky serve up -n my-service service.yaml

# Check status
sky serve status

# Get endpoint
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 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 を使用する

参考資料

Resources

コメント