cosyvoice / estimate_training_requirements.py
Marcos Remar
Initial CosyVoice code without binary files
0ea7b2a
#!/usr/bin/env python3
import os
print("=== Estimativa de Treinamento CosyVoice para Português ===\n")
# Verificar GPU disponível
print("1. Verificando Hardware")
print("-" * 50)
try:
import torch
if torch.cuda.is_available():
gpu_name = torch.cuda.get_device_name(0)
gpu_memory = torch.cuda.get_device_properties(0).total_memory / (1024**3)
print(f"GPU: {gpu_name}")
print(f"Memória: {gpu_memory:.1f} GB")
# Verificar se é uma RTX A5000
if "A5000" in gpu_name or "RTX A5000" in gpu_name:
print("✓ RTX A5000 detectada - Excelente para treinamento!")
gpu_factor = 1.0 # Baseline
elif "A100" in gpu_name:
print("✓ A100 detectada - Ótima para treinamento!")
gpu_factor = 0.6 # 40% mais rápida
elif "V100" in gpu_name:
print("✓ V100 detectada - Boa para treinamento!")
gpu_factor = 1.3 # 30% mais lenta
else:
gpu_factor = 1.5 # GPUs consumer são mais lentas
else:
print("❌ Sem GPU CUDA disponível")
gpu_factor = 10.0 # CPU seria 10x mais lento
except ImportError:
print("PyTorch não instalado")
gpu_factor = 1.0
print("\n2. Requisitos de Dados para Fine-tuning")
print("-" * 50)
# Baseado em papers e experiências com modelos TTS
data_requirements = {
"Mínimo (adaptação básica)": {
"horas": 1,
"frases": 500,
"qualidade": "Sotaque melhorado, prosódia básica"
},
"Recomendado (boa qualidade)": {
"horas": 10,
"frases": 5000,
"qualidade": "Voz natural, boa prosódia"
},
"Ideal (qualidade comercial)": {
"horas": 50,
"frases": 25000,
"qualidade": "Qualidade profissional, múltiplos falantes"
}
}
for nivel, info in data_requirements.items():
print(f"\n{nivel}:")
print(f" - Áudio necessário: {info['horas']} hora(s)")
print(f" - Frases aproximadas: {info['frases']:,}")
print(f" - Qualidade esperada: {info['qualidade']}")
print("\n3. Estimativa de Tempo de Treinamento (RTX A5000)")
print("-" * 50)
# Baseado no tamanho do modelo e benchmarks típicos
model_params = {
"CosyVoice-300M": {
"params": 300_000_000,
"batch_size": 16, # RTX A5000 com 24GB consegue batch maior
"steps_per_hour": 100, # steps por hora de áudio
"epochs_needed": 20
},
"CosyVoice2-0.5B": {
"params": 500_000_000,
"batch_size": 8,
"steps_per_hour": 150,
"epochs_needed": 15
}
}
for model_name, params in model_params.items():
print(f"\n{model_name}:")
for nivel, data in data_requirements.items():
horas_audio = data['horas']
total_steps = params['steps_per_hour'] * horas_audio * params['epochs_needed']
# RTX A5000 faz ~30-50 steps/min para modelos deste tamanho
steps_per_minute = 40 if "300M" in model_name else 30
training_hours = (total_steps / steps_per_minute / 60) * gpu_factor
print(f" {nivel}: ~{training_hours:.1f} horas ({training_hours/24:.1f} dias)")
print("\n4. Configuração Recomendada para Fine-tuning")
print("-" * 50)
config = """
# config_finetune_pt.yaml
model: CosyVoice-300M
learning_rate: 1e-4
batch_size: 16
gradient_accumulation: 2
num_epochs: 20
warmup_steps: 500
# Dados
audio_sample_rate: 22050
max_duration: 10.0 # segundos
min_duration: 0.5 # segundos
# Augmentação
speed_perturb: [0.95, 1.0, 1.05]
volume_perturb: [0.9, 1.0, 1.1]
"""
print(config)
print("\n5. Estrutura de Dados Necessária")
print("-" * 50)
estrutura = """
data/
├── portuguese/
│ ├── train/
│ │ ├── audio/
│ │ │ ├── pt_001.wav
│ │ │ ├── pt_002.wav
│ │ │ └── ...
│ │ └── transcripts.txt # formato: filename|text|speaker
│ └── val/
│ ├── audio/
│ └── transcripts.txt
"""
print(estrutura)
print("\n6. Processo de Fine-tuning")
print("-" * 50)
steps = """
1. Preparar dados:
- Gravar ou obter áudio em português (22.05kHz, mono, 16-bit)
- Transcrever com pontuação correta
- Normalizar texto (números por extenso, etc.)
2. Preprocessar:
python preprocess.py --config config_finetune_pt.yaml
3. Treinar:
python train.py --config config_finetune_pt.yaml --gpus 1
4. Monitorar:
tensorboard --logdir logs/
5. Inferência:
python inference.py --checkpoint best_model.pt --text "Teste"
"""
print(steps)
print("\n7. Alternativas Mais Rápidas")
print("-" * 50)
alternativas = """
• Voice Cloning (5-30 min de áudio):
- Coqui XTTS v2: Suporta PT-BR nativamente
- Tortoise TTS: Boa qualidade mas lento
• Modelos Pré-treinados PT-BR:
- YourTTS (Coqui): Já tem vozes brasileiras
- Google TTS API: Qualidade comercial
- Azure Neural TTS: Vozes PT-BR naturais
• Serviços de Fine-tuning:
- ElevenLabs: Clone de voz em minutos
- Play.ht: Vozes personalizadas rápido
"""
print(alternativas)
print("\n" + "="*60)
print("RESUMO para RTX A5000:")
print("- Adaptação mínima: 1h áudio, ~5-10h treinamento")
print("- Boa qualidade: 10h áudio, ~2-3 dias treinamento")
print("- Clone de voz: 10-30min áudio, resultado em 1h")
print("="*60)