Skip to content

RunPod

vaak’s benchmark and fine-tuning scripts were written to fit a tiny budget. This page shows how to spend about 50 INR on an RTX 4090 and stop automatically before the money runs out.

Item Value
Budget 50 INR
In USD about $0.57 (exchange rate of the day)
RTX 4090, community cloud $0.34 per hour (RunPod pricing page, July 2026)
Time that buys about 1.6 hours

Prices change. Check the RunPod pricing page before you start and recompute max-minutes. The scripts enforce the cap; the arithmetic is on you.

RunPod bills per second while a pod is running, including while it is idle and while you are waiting for a download. The time cap counts from pod start, not from the first model call.

  1. Sign up, add credit.
  2. Deploy a GPU pod. Choose Community Cloud, RTX 4090, and the template built from runpod/Dockerfile if you have pushed it, otherwise a plain PyTorch CUDA 12 template.
  3. Set a container disk of at least 40 GB. Weights for several Whisper sizes plus NeMo models add up.
  4. Set the pod to stop rather than terminate on exit if you want to inspect the volume afterwards. A stopped pod still bills for disk, a small amount.
  5. Add HF_TOKEN as an environment variable if you want the cv-hi dataset (Common Voice is gated).

Open the pod’s web terminal or SSH in, then:

Terminal window
git clone https://github.com/mirukullacode/vaak
cd vaak
bash runpod/run_all.sh --max-minutes 90

run_all.sh does, in order:

  1. Installs vaak[all] and ffmpeg unless SKIP_INSTALL=1 (the image already has them).
  2. Writes runpod/hardware.json with the provider and price so every result row carries them.
  3. Runs bench.run over the configured model and dataset pairs, wrapped in timeout.
  4. With --finetune, runs train/finetune_whisper_lora.py --merge for the remaining time, then benchmarks the merged model on the same datasets.
  5. Runs bench.report to merge results into website/src/data/benchmarks.json.
  6. Prints a cost estimate (wall minutes times PRICE_USD_PER_HR, converted at USD_INR) on exit. The pod keeps billing until you stop it; the script does not stop it for you.

The script records its start time and gives each stage a budget from what is left. bench.run rewrites its JSON after every model and dataset pair, so a timeout kill keeps partial results. The fine-tune gets FINETUNE_MINUTES or whatever remains, whichever is smaller, and is skipped if under ten minutes are left. With a 96-minute budget, --max-minutes 90 leaves slack for the pod to spin down.

Other flags (environment: PRICE_USD_PER_HR default 0.34, USD_INR default 88, PROVIDER, FINETUNE_MINUTES default 30, SKIP_INSTALL=1):

Flag Default Meaning
--max-minutes 90 Hard deadline from script start
--models faster-whisper:small,faster-whisper:large-v3-turbo,indic-conformer:hi,parakeet:nvidia/parakeet-tdt-0.6b-v2,wav2vec2:ai4bharat/indicwav2vec-hindi Benchmark specs
--datasets fleurs-hi,fleurs-en Dataset keys
--limit 200 Utterances per dataset
--finetune off Run the LoRA script after benchmarks

Before the pod stops:

Terminal window
tar czf out.tgz bench/results train/out website/src/data/benchmarks.json

Download out.tgz from the pod file browser, or push to a Hugging Face dataset repo with huggingface-cli upload. Then locally:

Terminal window
cp out/bench/*.json bench/results/
python bench/report.py

and the benchmarks page updates on the next site build.

Confirm in the RunPod console that the pod is stopped or terminated. The script tries to do this, but check anyway. A forgotten pod is the easiest way to exceed the budget.

  • Recomputed max-minutes from today’s price
  • Container disk large enough for the models
  • HF_TOKEN set if using cv-hi
  • Results copied off the pod
  • Pod shows as stopped in the console