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.
The budget
Section titled “The budget”| 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. Create a pod
Section titled “1. Create a pod”- Sign up, add credit.
- Deploy a GPU pod. Choose Community Cloud, RTX 4090, and the template built from
runpod/Dockerfileif you have pushed it, otherwise a plain PyTorch CUDA 12 template. - Set a container disk of at least 40 GB. Weights for several Whisper sizes plus NeMo models add up.
- 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.
- Add
HF_TOKENas an environment variable if you want thecv-hidataset (Common Voice is gated).
2. Run everything with a time cap
Section titled “2. Run everything with a time cap”Open the pod’s web terminal or SSH in, then:
git clone https://github.com/mirukullacode/vaakcd vaakbash runpod/run_all.sh --max-minutes 90run_all.sh does, in order:
- Installs
vaak[all]and ffmpeg unlessSKIP_INSTALL=1(the image already has them). - Writes
runpod/hardware.jsonwith the provider and price so every result row carries them. - Runs
bench.runover the configured model and dataset pairs, wrapped intimeout. - With
--finetune, runstrain/finetune_whisper_lora.py --mergefor the remaining time, then benchmarks the merged model on the same datasets. - Runs
bench.reportto merge results intowebsite/src/data/benchmarks.json. - Prints a cost estimate (wall minutes times
PRICE_USD_PER_HR, converted atUSD_INR) on exit. The pod keeps billing until you stop it; the script does not stop it for you.
--max-minutes
Section titled “--max-minutes”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 |
3. Get the results out
Section titled “3. Get the results out”Before the pod stops:
tar czf out.tgz bench/results train/out website/src/data/benchmarks.jsonDownload out.tgz from the pod file browser, or push to a Hugging Face dataset repo with huggingface-cli upload. Then locally:
cp out/bench/*.json bench/results/python bench/report.pyand the benchmarks page updates on the next site build.
4. Stop the pod
Section titled “4. Stop the pod”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.
Checklist
Section titled “Checklist”- Recomputed
max-minutesfrom today’s price - Container disk large enough for the models
-
HF_TOKENset if usingcv-hi - Results copied off the pod
- Pod shows as stopped in the console