Adapting a large multilingual speech checkpoint to a language it barely saw — with ~23 hours of audio and a single Tesla T4 — forces discipline at every stage. There's no room for waste: the budget is a few GPU-hours.

Data rules everything#

  • Transcript alignment: verify text actually matches the audio (silence trimming, timestamp sanity).
  • Train/val contamination: deduplicate speakers/sentences across splits — contamination inflates CER that appears to be real.
  • Consistency: normalise diacritics, digit forms, and casing before computing CER, both in labels and predictions.

PEFT is the compute strategy#

Full fine-tuning of a billion-scale model on one T4 is out of reach for most tasks. LoRA adapters freeze the base and train a low-rank delta — for my run, 0.005% of parameters. Because the base stays frozen, the same checkpoint serves many tasks simultaneously with tiny per-task adapters.

trainable params  : ~0.005% of full model
gradient devices   : 1 × Tesla T4
training time      : ≈ 1 hour

Evaluating honestly#

Report the metric that matches the task (CER for transcription), on a held-out split the model never saw during tuning. I ended at CER 0.0517 — good for the setup, but the number is only meaningful because the evaluation set was clean.

The headline isn't the CER. It's that a language with almost no resources and a single cheap GPU is enough to build a usable recogniser when you start from a strong self-supervised base and scale the adapter, not the model.