skypilot-multi-cloud-orchestration について
SkyPilotを使って複数のクラウドプロバイダーで機械学習ワークロードを実行・管理するためのスキルガイドです。コストやリージョンに応じたリソース選択、Spotジョブの復旧、分散ジョブ、モデルサービングを解説します。
主な機能
- 01マルチクラウドのワークロード編成
- 02クラウドとリージョンの自動選択
- 03Spotジョブの復旧
- 04マルチノード分散トレーニング
- 05マネージドジョブとチェックポイント
- 06Sky 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 倍削減
- 分散トレーニング:ギャングスケジューリングによるマルチノードジョブ
- マネージドジョブ:自動復旧、チェックポイント、フォールトトレランス
- 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(モデルサービング)
詳細、コード例、パラメーター表については、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
エージェントの実行手順
- 環境を確認します。 ハードウェア、フレームワークとサーバーのバージョン、モデル形式、想定負荷を確認します。
- 入力を明確にします。 データまたはユーザーから、形式、識別子、パラメーターを確認します。結果に影響する値は推測せず、質問します。
- まず小規模で実行します。 スケールアップする前に、単一のリクエストを処理または記録するか、エンドツーエンドで実行します。
- 上記の手順と参考情報を使用して、タスク全体を実行します。
- 結果を検証します。 レイテンシ、スループット、出力の正確性を参照値と比較して測定し、リソース使用量とコストを確認します。
- 報告します。 実行した内容(バージョン、コマンド、パラメーター)、確認した内容、未確定の点を明記します。
| このような場合 | 対応方法 |
|---|---|
| サーバーの起動に失敗する、または OOM が発生する | モデルのサイズとメモリ、量子化、並列処理の設定を確認します。 |
| これらの手順に記載されている関数、フラグ、エンドポイントがインストール済みのバージョンにない | インストール済みバージョンのドキュメント(help()、--help、公式ドキュメント)を確認して対応し、ユーザーに伝えます。API を捏造してはいけません。 |
| 必須の入力、識別子、パラメーターが曖昧 | ユーザーに質問するか、実行前に前提を明示します。 |
誠実性に関するルール
- 結果、パラメーター、識別子、引用、統計を捏造してはいけません。実行または検証できない場合は、その旨を明確に伝えます。
- サービスや認証情報を公開してはいけません。プロビジョニング前にクラウドの費用を確認します。
- ここに記載されたバージョン固有の情報は古くなっている可能性があるため、インストール済みバージョンの公式ドキュメントで確認します。
- 費用が発生する操作、共有 GPU またはクラウドクォータを消費する操作、個人データや患者データに触れる操作、取り消せない操作を行う前に、確認を求めます。
関連スキル
modal-serverless-gpu:ML ワークロードを実行するためのサーバーレス GPU クラウドプラットフォーム。lambda-labs-gpu-cloud:ML のトレーニングと推論に使用する、予約制およびオンデマンドの GPU クラウドインスタンス。ray-train:クラスター間での分散トレーニングのオーケストレーション。
コメント
Markdown 対応