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 como erickfmm/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's models/convert-pt-to-ggml.py + quantize para 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-cli aún necesita -l es para forzar el prompt de idioma correcto en el decoder. La tarea por defecto es transcribe (no translate).

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.5 casi 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 es es 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_penalty antes de cualquier uso.
  • Decodificación greedy: el WER se midió con model.generate() greedy (sin beam_search ni repetition_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},
}
Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for erickfmm/whisper-medium-ft-cv_es-wcpp

Finetuned
(926)
this model

Collection including erickfmm/whisper-medium-ft-cv_es-wcpp

Papers for erickfmm/whisper-medium-ft-cv_es-wcpp