🚀 SkyPilot Guide - Multi-Cloud GPU Spot Instances
O que é SkyPilot?
SkyPilot é uma ferramenta que automaticamente encontra as máquinas spot mais baratas através de múltiplos cloud providers (AWS, GCP, Azure, Lambda, etc.) e gerencia tarefas de ML.
Vantagens
- ✅ Busca automática da opção mais barata
- ✅ Spot instances (até 70% mais barato)
- ✅ Multi-cloud (AWS, GCP, Azure, Lambda)
- ✅ Auto-recovery se instância é interrompida
- ✅ Queue system para múltiplas tarefas
- ✅ Multi-GPU support
📦 Instalação
1. Instalar SkyPilot
# Via pip
pip install "skypilot[aws,gcp,azure]"
# Ou apenas clouds específicos
pip install "skypilot[aws]" # Apenas AWS
pip install "skypilot[gcp]" # Apenas GCP
pip install "skypilot[azure]" # Apenas Azure
2. Configurar Cloud Credentials
AWS
# Configure AWS CLI
aws configure
# Verificar
sky check aws
GCP
# Instalar gcloud
curl https://sdk.cloud.google.com | bash
# Login
gcloud auth login
gcloud config set project YOUR_PROJECT_ID
# Verificar
sky check gcp
Azure
# Instalar Azure CLI
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
# Login
az login
# Verificar
sky check azure
3. Verificar Setup
sky check
# Output esperado:
# ✓ AWS: Enabled
# ✓ GCP: Enabled
# ✓ Azure: Enabled
🎯 Casos de Uso
1. Fine-tuning Rápido (Single GPU)
Custo estimado: $0.50 - $2.00 para 10 epochs Duração: 30-60 minutos
# Lançar task
sky launch scripts/cloud/skypilot_finetune.yaml
# Monitorar progresso
sky logs ensemble-finetune
# Checar status
sky status
# Ver custos
sky cost-report
O que acontece:
- SkyPilot busca instância spot mais barata com 1x GPU (A100, V100, T4, ou L4)
- Provisiona instância
- Instala dependências
- Clona repositório
- Cria dados sintéticos de teste
- Fine-tune emotion2vec
- Testa modelo
- Mantém instância rodando (use
sky downpara parar)
2. Fine-tuning Multi-GPU (8x GPUs)
Custo estimado: $5 - $15 para 20 epochs Duração: 15-30 minutos (8x mais rápido!)
# Lançar com 8x GPUs
sky launch scripts/cloud/skypilot_multi_gpu.yaml
# Monitorar
sky logs ensemble-multi-gpu -f # -f = follow (live logs)
# SSH para instância
sky ssh ensemble-multi-gpu
# Parar quando terminar
sky down ensemble-multi-gpu
O que acontece:
- Busca instância com 8x GPUs (A100, V100, ou L4)
- Training paralelo com
accelerate - 8x dataset sintético (200 samples/emotion)
- Batch size 64 (vs 16 single-GPU)
3. Anotar Dataset Completo Orpheus (118k samples)
Custo estimado: $10 - $30 Duração: 2-4 horas com 4x GPUs
# Lançar anotação
sky launch scripts/cloud/skypilot_annotate_orpheus.yaml
# Monitorar progresso
sky logs ensemble-annotate-orpheus -f
# Ver estatísticas
sky ssh ensemble-annotate-orpheus
# Na instância:
cd ensemble-tts-annotation
python -c "
import pandas as pd
df = pd.read_parquet('data/annotated/orpheus_annotated.parquet')
print(df.head())
"
O que acontece:
- Provisiona 4x GPUs
- Download Orpheus dataset (118k samples)
- Roda ensemble annotation (balanced mode)
- Gera parquet com anotações
- Faz upload para HuggingFace Hub
- Dataset anotado disponível publicamente!
💰 Comparação de Custos
Single GPU (A100)
| Cloud | On-Demand | Spot | Economia |
|---|---|---|---|
| AWS | $4.00/hr | $1.20/hr | 70% |
| GCP | $3.67/hr | $1.10/hr | 70% |
| Azure | $3.80/hr | $1.14/hr | 70% |
| Lambda | $1.10/hr | N/A | - |
SkyPilot escolhe automaticamente o mais barato!
Multi-GPU (8x A100)
| Cloud | On-Demand | Spot | Economia |
|---|---|---|---|
| AWS | $32.00/hr | $9.60/hr | 70% |
| GCP | $29.36/hr | $8.80/hr | 70% |
| Azure | $30.40/hr | $9.12/hr | 70% |
Custo Total por Tarefa
| Tarefa | GPUs | Duração | Custo (Spot) |
|---|---|---|---|
| Fine-tune (teste) | 1x A100 | 30-60min | $0.50-$1.20 |
| Fine-tune (real datasets) | 1x A100 | 2-4h | $2.40-$4.80 |
| Multi-GPU fine-tune | 8x A100 | 15-30min | $2.40-$4.80 |
| Annotate Orpheus | 4x A100 | 2-4h | $8.80-$17.60 |
🛠️ Comandos Úteis
Gerenciamento de Instâncias
# Listar instâncias ativas
sky status
# Ver logs
sky logs TASK_NAME
sky logs TASK_NAME -f # Live logs
# SSH para instância
sky ssh TASK_NAME
# Parar instância (mas mantém dados)
sky stop TASK_NAME
# Iniciar instância parada
sky start TASK_NAME
# Deletar completamente
sky down TASK_NAME
# Deletar todas
sky down -a
Monitoramento
# Ver custos acumulados
sky cost-report
# Ver status detalhado
sky status --all
# Queue de tarefas
sky queue
# Cancelar tarefa
sky cancel TASK_NAME
Transferência de Dados
# Download resultados
sky scp TASK_NAME:~/ensemble-tts-annotation/models/emotion/finetuned/ ./local_models/
# Upload datasets
sky scp ./local_data/ TASK_NAME:~/ensemble-tts-annotation/data/
# Usar cloud storage
sky storage upload ./models/ gs://my-bucket/models/
sky storage download gs://my-bucket/models/ ./models/
📝 Customizar Tarefas
Modificar GPU Type
Edite o YAML:
resources:
# Opção 1: Especificar tipo exato
accelerators: A100:1
# Opção 2: SkyPilot escolhe qualquer desses
accelerators: {A100:1, V100:1, T4:1}
# Opção 3: Multi-GPU
accelerators: A100:8
Opções de GPU
| GPU | VRAM | Performance | Custo (spot/hr) | Uso |
|---|---|---|---|---|
| A100 | 40GB/80GB | Melhor | $1.10-$1.50 | Produção |
| V100 | 16GB/32GB | Ótima | $0.70-$1.00 | Bom custo-benefício |
| L4 | 24GB | Boa | $0.50-$0.80 | Mais barato |
| T4 | 16GB | OK | $0.30-$0.50 | Testes |
Forçar Cloud Específico
resources:
cloud: gcp # Força GCP
# ou: aws, azure, lambda
Adicionar File Mounts
file_mounts:
# Mount from cloud storage
/data:
source: gs://my-bucket/datasets/
mode: MOUNT
# Upload local files
~/datasets:
source: ./local_datasets/
mode: COPY
🔥 Workflows Completos
Workflow 1: Fine-tune e Testar
# 1. Fine-tune com synthetic data
sky launch scripts/cloud/skypilot_finetune.yaml
# 2. Esperar completar
sky logs ensemble-finetune -f
# 3. Download modelo
sky scp ensemble-finetune:~/ensemble-tts-annotation/models/emotion/emotion2vec_finetuned_synthetic/ ./models/
# 4. Parar instância
sky stop ensemble-finetune
# 5. Testar localmente
python scripts/test/test_quick.py --mode balanced
Workflow 2: Anotar Dataset Completo
# 1. Lançar anotação
sky launch scripts/cloud/skypilot_annotate_orpheus.yaml
# 2. Monitorar (vai demorar 2-4h)
sky logs ensemble-annotate-orpheus -f
# 3. Quando completar, dataset está no HuggingFace!
# https://huggingface.co/datasets/marcosremar2/orpheus-tts-portuguese-annotated
# 4. Download local (opcional)
sky scp ensemble-annotate-orpheus:~/ensemble-tts-annotation/data/annotated/orpheus_annotated.parquet ./
# 5. Deletar instância
sky down ensemble-annotate-orpheus
Workflow 3: Multi-GPU Training
# 1. Lançar com 8x GPUs
sky launch scripts/cloud/skypilot_multi_gpu.yaml
# 2. Monitorar performance
sky ssh ensemble-multi-gpu
# Na instância:
watch -n 1 nvidia-smi
# 3. Download modelo treinado
sky scp ensemble-multi-gpu:~/ensemble-tts-annotation/models/emotion/emotion2vec_finetuned_multigpu/ ./models/
# 4. Cleanup
sky down ensemble-multi-gpu
🎯 Best Practices
1. Sempre Use Spot Instances
resources:
use_spot: true # Economiza 70%!
2. Set Resource Limits
resources:
memory: 32+ # Mínimo necessário
disk_size: 100 # Não exagere
3. Cleanup Depois
# Sempre que terminar:
sky down TASK_NAME
# Verificar se deletou:
sky status
4. Use Cost Budgets
# Ver custos antes de começar
sky cost-report
# Set alerts (se suportado pelo cloud)
5. Salve Resultados em Cloud Storage
run: |
# Seu training aqui
...
# Upload resultados
sky storage upload models/ gs://my-bucket/models/
🐛 Troubleshooting
Quota Exceeded
# Ver quotas
sky quota
# Tentar outro cloud
sky launch task.yaml --cloud azure
Spot Instance Interrupted
SkyPilot automaticamente tenta recovery! Mas você pode forçar:
# Restart automático
sky launch task.yaml --retry-until-up
Out of Memory
Aumente batch size no YAML ou use GPU maior:
resources:
accelerators: A100-80GB:1 # 80GB VRAM
Slow Download
Use cloud storage para datasets grandes:
file_mounts:
/data:
source: gs://my-bucket/large-dataset/
mode: MOUNT # Monta sem copiar tudo
📊 Benchmarks Esperados
Fine-tuning (Synthetic Data - 70 samples/emotion)
| Config | Time | Cost | Accuracy |
|---|---|---|---|
| 1x T4 | 45min | $0.40 | ~85% |
| 1x V100 | 30min | $0.60 | ~85% |
| 1x A100 | 20min | $0.80 | ~85% |
| 8x A100 | 8min | $1.20 | ~85% |
Fine-tuning (Real Data - VERBO 1,167 + emoUERJ 377)
| Config | Time | Cost | Accuracy |
|---|---|---|---|
| 1x A100 | 2-3h | $2.40-$3.60 | ~92-95% |
| 8x A100 | 20-30min | $2.80-$4.40 | ~92-95% |
Annotation (Orpheus 118k samples)
| Config | Time | Cost |
|---|---|---|
| 1x A100 | 12-16h | $13-$18 |
| 4x A100 | 3-4h | $12-$16 |
| 8x A100 | 1.5-2h | $12-$18 |
Conclusão: 4x GPUs é o sweet spot para annotation!
🚀 Quick Start
1 minuto para começar:
# Instalar
pip install "skypilot[aws,gcp]"
# Configurar credentials (se já tem AWS/GCP CLI configurado, pula)
sky check
# Lançar fine-tuning
sky launch scripts/cloud/skypilot_finetune.yaml
# Esperar ~30min
# Ver resultados
sky logs ensemble-finetune
# Parar
sky down ensemble-finetune
Pronto! Modelo fine-tuned por menos de $1! 🎉
📚 Recursos
- SkyPilot Docs: https://skypilot.readthedocs.io/
- GitHub: https://github.com/skypilot-org/skypilot
- Discord: https://slack.skypilot.co/
- Examples: https://github.com/skypilot-org/skypilot/tree/master/examples
🎓 Próximos Passos
Depois de fine-tuning:
Avaliar modelo:
python scripts/evaluation/evaluate_ensemble.py \ --model models/emotion/emotion2vec_finetuned_ptbr/Anotar dataset completo:
sky launch scripts/cloud/skypilot_annotate_orpheus.yamlFine-tune TTS com dataset anotado:
# Usar orpheus-tts-portuguese-annotated para treinar TTS
Economize 70% com spot instances através de múltiplos clouds! 🚀💰