Saltar a contenido

Guía paso a paso de entrenamiento

Resumen operativo para arrancar entrenamientos en Colab Pro (A100) o local M4 Pro (sólo iteración, no entrenamiento serio).

Pre-requisitos

./setup_env.sh
source .venv/bin/activate

Confirma dispositivo:

python -m src.device
# → device=cuda info=DeviceInfo(kind='cuda', torch_dtype=torch.bfloat16, ...)
# → device=mps info=DeviceInfo(kind='mps', torch_dtype=torch.float16, ...)

Fase 1 — Codec

Datos

# FMA medium (22 GB, ~25 K tracks)
mkdir -p /datasets/fma && cd /datasets/fma
curl -O https://os.unil.cloud.switch.ch/fma/fma_medium.zip
unzip fma_medium.zip

cd /path/to/suno-local
python -m src.data.build_manifest /datasets/fma/fma_medium \
    data/manifests/codec_train.jsonl --label-from genre

Lanzar entrenamiento

python -m src.codec.train --config configs/codec_small.yaml \
    --ckpt-dir checkpoints/codec_small

Métricas a vigilar

  • mel (mel-loss): debe caer monotónicamente.
  • commit: ~0.01-0.05 estable.
  • adv y feat: oscilan; el balance importa más que el valor absoluto.
  • Reconstrucción auditiva: a partir de step 50 K ya debería sonar reconocible.

Fase 2 — Lyric LM

# 1. Construye corpus de letras (Gutenberg + Wikisource + sintético)
python scripts/build_lyrics_corpus.py --out data/lyrics_corpus.txt

# 2. Entrena tokenizer SentencePiece
python -m src.lyrics.tokenizer train data/lyrics_corpus.txt \
    --out tokenizer/lyric_spm --vocab-size 16000

# 3. Manifest JSONL (uno por canción)
python scripts/lyrics_corpus_to_manifest.py \
    --in data/lyrics_corpus.txt --out data/manifests/lyrics_train.jsonl

# 4. Entrena LM
python -m src.lyrics.train --config configs/lyrics_lm.yaml \
    --ckpt-dir checkpoints/lyrics

Fase 3 — Score LM (REMI)

# Procesar LMD-clean a manifest
python scripts/lmd_to_manifest.py --in /datasets/lmd_full \
    --out data/manifests/melody_train.jsonl

# Entrenar
python -m src.melody.train --config configs/melody_remi.yaml \
    --ckpt-dir checkpoints/melody

Fase 4 — SVS

Acoustic (DDPM)

# 1. Pre-train con M4Singer (mandarín) para inicialización cross-lingual
python -m src.svs.train --phase acoustic --config configs/svs_pretrain_zh.yaml

# 2. Fine-tune con dataset propio ES
python -m src.svs.train --phase acoustic --config configs/svs.yaml \
    --ckpt-dir checkpoints/svs_acoustic

Vocoder (HiFi-GAN GAN)

Reutiliza el loop GAN del codec (MS-STFT + MPD). Tarda ~1 M de steps típicamente.

python scripts/train_hifigan.py --config configs/svs.yaml \
    --ckpt-dir checkpoints/svs_vocoder

Fase 5 — LM Instrumental (MusicGen-like)

# Necesita codec entrenado en checkpoints/codec_small
python -m src.lm.train --config configs/lm_small.yaml \
    --ckpt-dir checkpoints/lm_small

Si la VRAM es ajustada en A100-40 GB: - bs=4, grad-accum=8 (batch efectivo 32). - bf16 activado. - gradient_checkpointing (envuelve cada TransformerBlock con torch.utils.checkpoint.checkpoint).

Resume y manejo de Colab timeout

El train_loop instala SIGTERM handler que escribe RESUME.json cuando Colab manda kill (~30 s antes). El siguiente python -m src.codec.train ... resume desde LATEST automáticamente si --ckpt-dir apunta al mismo Drive folder.

Quantization para inferencia M4

python scripts/quantize.py --input checkpoints/codec_small/LATEST.pt \
    --output checkpoints/codec_small/q_int8.pt --backend qnnpack

Smoke test rápido

# Sin pesos entrenados: debería correr a través de todo el pipeline,
# generando ruido rosa (fallback) + letras y MIDI random.
python -m src.pipeline.song_generator \
    --prompt "Una bachata romántica en La menor, 125 BPM" \
    --duration 10 --out out/ --song-id smoke_test