whisper-medium-ft-cv_es-wcpp
Resumen
Checkpoints en formato GGML para whisper.cpp del modelo más reciente del proyecto training-asr: fine-tuning de openai/whisper-medium sobre Common Voice 26 español (es) con la encoder congelada (decoder + proj_out entrenables, ~457 M / 764 M params). El entrenamiento fue en FP32 nativo sobre una NVIDIA Tesla P40 (Pascal sm_61, 24 GB, sin Tensor Cores / sin BF16); los pesos se exportaron a GGML y se cuantizaron con whisper.cpp.
Este checkpoint corresponde a step 10800 del run asr-rolling_step-0000700 (W&B, proyecto auden-asr-es), el checkpoint rolling más reciente exportado al corte de esta publicación:
| Métrica | Valor |
|---|---|
| Step | 10800 |
| WER (1000 muestras de validación) | 0.2970 |
| val_loss | 0.2188 |
| Checkpoint fuente | checkpoints/rolling_step-0010800.pt |
Estado: versión de desarrollo (debug)
⚠️ No usar en producción. Este modelo se publica como debug/dev para inspección y reproducción de experimentos. El entrenamiento sigue en curso (step 10850/20000 al corte) y hay un problema abierto de divergencia val_loss vs. WER (ver
Experimentos.md§8.3): la cross-entropy de validación bajó ~8× de forma casi monótona (1.58 → 0.20) pero el WER se estancó en ~0.20 con picos de alucinación (WER 31 y 33 en steps 1100/2200) y degradación tardía (0.9–10 entre steps 7600–9000). El mínimo WER del run largo fue 0.1986 @ step 3200; el de este checkpoint (0.2970 @ step 10800) refleja esa degradación tardía. WER>1 corresponde a loops de repetición en la decodificación greedy.
Nota: el WER de este checkpoint (0.2970) es peor que el del mejor checkpoint histórico (0.1053 @ step 500). Las versiones
transformers(fp32/fp16/bf16) del mejor checkpoint se publican comoerickfmm/whisper-medium-ft-cv_es-best-hf-*.
Archivos (cuantizaciones GGML)
| Archivo | Tipo | Tamaño | Notas |
|---|---|---|---|
ggml-model.bin |
F16 | ~1.5 GB | Float16, máxima fidelidad GGML |
ggml-model-q8_0.bin |
Q8_0 | ~0.8 GB | 8-bit, buena relación calidad/tamaño |
ggml-model-q6_k.bin |
Q6_K | ~0.6 GB | 6-bit mixed, mejor que Q8_0 en relación calidad/velocidad |
ggml-model-q4_0.bin |
Q4_0 | ~0.4 GB | 4-bit, más rápido y pequeño, pérdida notable |
Descripción técnica
- Base:
openai/whisper-medium(encoder-decoder seq2seq, 764 M params). - Encoder congelado siguiendo Vividh-ASR (arXiv:2605.13087) y Gumbel-BEARD (arXiv:2606.11429): adaptar el decoder preserva la geometría acústica del encoder e iguala/supera el full fine-tune en Common Voice. Sólo se entrenan decoder +
proj_out(~457 M, 60 %). - Features:
WhisperFeatureExtractor(log-mel 80 bins, ventana 30 s, hop 160, 16 kHz). - dtype de entrenamiento: FP32 (P40 sm_61, sin BF16 nativo, FP16 a 1/64 de velocidad → inviable).
- Conversión:
whisper.cpp'smodels/convert-pt-to-ggml.py+quantizepara generar las variantes Q8_0/Q6_K/Q4_0.
Uso (whisper.cpp)
# Compilar whisper.cpp
git clone https://github.com/ggerganov/whisper.cpp
cd whisper.cpp && make
# Descargar el modelo (ej. Q4_0) a este repo HF y copiarlo a models/
# hf download erickfmm/whisper-medium-ft-cv_es-wcpp ggml-model-q4_0.bin --local-dir .
cp ggml-model-q4_0.bin models/
# Transcribir audio en español
./whisper-cli -m models/ggml-model-q4_0.bin -l es -f /path/to/audio.wav
Nota sobre idioma: este modelo ya está adaptado al español, pero
whisper-cliaún necesita-l espara forzar el prompt de idioma correcto en el decoder. La tarea por defecto estranscribe(notranslate).
Elección de quant: Q8_0 ofrece el mejor balance entre WER y tamaño. Q4_0 es el más rápido en CPU/edge pero puede degradar WER. F16 (sin cuantizar) reproduce el WER del checkpoint fp16 si necesitas máxima fidelidad.
Entrenamiento (config del run 9, asr-rolling_step-0000700)
./start.sh --model whisper-medium --wandb \
--batch-seconds 60 --max-duration 10 \
--grad-accum-steps 8 --lr-muon 2e-3 --lr-adamw 1e-4 \
--warmup-steps 1000 --max-steps 20000 --max-rollbacks 500 \
--num-workers 16 --snapshot-every 10 \
--rolling-every 50 --val-every 100 \
--resume exp/es-whisper-medium/checkpoints/rolling_step-0000700.pt
- Runtime al corte: ~6 días (step 10850/20000, 54 %).
- 458 rollbacks absorbidos, 0
nan_failures.lr_temp_scale=0.5casi permanente (el run vive en cooldown). - ~31 s/step + ~50 min de validación cada 100 steps → ciclo ~100 min/100 steps.
- Véase
Experimentos.md§8 para el detalle completo del run.
Reproducibilidad
git clone https://github.com/erickfmm/training-asr.git
cd training-asr
./setup_env.sh
./start.sh --model whisper-medium --wandb
Repo: https://github.com/erickfmm/training-asr.git
Documentación: README.md, Experimentos.md, investigacion.md.
Limitaciones y sesgos
- Hardware de entrenamiento: FP32 sobre Tesla P40; los pesos GGML exportados son válidos para inferencia en CPU o cualquier backend soportado por
whisper.cpp, pero el entrenamiento en fp16/bf16 no fue posible en esta GPU. - Dataset: Common Voice 26
eses mezcla dialectal; no tiene locale chileno (es_cl) ni hablantes infantiles. WER medido sobre 1000 muestras de validación (no el test set completo). - Divergencia val_loss/WER: este checkpoint (step 10800) tiene WER peor que el mejor histórico (step 500). El WER del run largo se degradó tras ~step 7500 pese a val_loss descendente. Re-evaluar con beam search /
repetition_penaltyantes de cualquier uso. - Decodificación greedy: el WER se midió con
model.generate()greedy (sinbeam_searchnirepetition_penalty); los picos de WER > 1 se atribuyen a loops de repetición, no necesariamente a pesos malos. - Cuantización: los quants Q4_0/Q6_K/Q8_0 pueden introducir degradación adicional de WER respecto al F16; no se midió WER por quant.
Citations
@misc{radford2022whisper,
title = {Robust Speech Recognition via Large-Scale Weak Supervision},
author = {Radford, Alec and others},
year = 2022,
howpublished = {arXiv:2212.04356},
}
@misc{whispercpp,
title = {whisper.cpp: Port of OpenAI's Whisper model in C/C++},
author = {Gerganov, Georgi},
url = {https://github.com/ggerganov/whisper.cpp},
}
@misc{boissin2025turboMuon,
title = {Turbo-Muon},
author = {Boissin, Théo and others},
year = 2025,
note = {arXiv:2512.04632},
}
@misc{zclip2025,
title = {ZClip: Adaptive Gradient Clipping for Stable LLM Training},
year = 2025,
note = {arXiv:2504.02507},
}
@misc{vividh2026,
title = {Vividh-ASR},
year = 2026,
note = {arXiv:2605.13087},
}
@misc{gumbelbeard2026,
title = {Gumbel-BEARD},
year = 2026,
note = {arXiv:2606.11429},
}
@dataset{commonvoice26,
title = {Common Voice 26.0},
author = {Mozilla Foundation},
url = {https://huggingface.co/datasets/mozilla-foundation/common_voice_26_0},
}
Model tree for erickfmm/whisper-medium-ft-cv_es-wcpp
Base model
openai/whisper-medium