ensemble-tts-annotation / SKYPILOT_GUIDE.md
marcosremar
🚀 SkyPilot Multi-Cloud GPU Support + Synthetic Data Generation
13e402e

🚀 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:

  1. SkyPilot busca instância spot mais barata com 1x GPU (A100, V100, T4, ou L4)
  2. Provisiona instância
  3. Instala dependências
  4. Clona repositório
  5. Cria dados sintéticos de teste
  6. Fine-tune emotion2vec
  7. Testa modelo
  8. Mantém instância rodando (use sky down para 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:

  1. Provisiona 4x GPUs
  2. Download Orpheus dataset (118k samples)
  3. Roda ensemble annotation (balanced mode)
  4. Gera parquet com anotações
  5. Faz upload para HuggingFace Hub
  6. 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


🎓 Próximos Passos

Depois de fine-tuning:

  1. Avaliar modelo:

    python scripts/evaluation/evaluate_ensemble.py \
        --model models/emotion/emotion2vec_finetuned_ptbr/
    
  2. Anotar dataset completo:

    sky launch scripts/cloud/skypilot_annotate_orpheus.yaml
    
  3. Fine-tune TTS com dataset anotado:

    # Usar orpheus-tts-portuguese-annotated para treinar TTS
    

Economize 70% com spot instances através de múltiplos clouds! 🚀💰