Skip to page content
SAVRN
Search Plan a project

Open-weight model · Speech recognition

ep-hindi-asr

by Epoch Discovery epoch-discovery/ep-hindi-asr

ep-hindi-asr is a model for speech recognition from Epoch Discovery, released under Apache License 2.0 (access requested at publisher). It has 354M parameters. At 16-bit it needs about 0.8 GB of GPU memory, which fits on 1x MI300X from $1.85 an hour, at the lowest prices in the SAVRN Index.

ep-hindi-asr is a Hindi speech recognition model built on the audio encoder of EmbeddingGemma 2. A CTC head reads a learned mix of the encoder's layers and predicts Gemma tokenizer units.

Parameters354M
Context—
Weights753.0 MB
Licenseapache-2.0
AccessAccess requested at publisher
Monthly Downloads—

Runs On

What it takes to serve ep-hindi-asr (354M parameters): the memory its weights need at each precision, and the cheapest way to rent enough data-center GPUs to hold them.

PrecisionWeightsMemory neededCheapest setupPer hourAlso fits
16-bit 0.7 GB 0.8 GB 1x MI300X (192 GB)
Vultr
$1.85 1x H100 $1.99 · 1x MI325X $2.00
8-bit 0.4 GB 0.4 GB 1x MI300X (192 GB)
Vultr
$1.85 1x H100 $1.99 · 1x MI325X $2.00
4-bit 0.2 GB 0.2 GB 1x MI300X (192 GB)
Vultr
$1.85 1x H100 $1.99 · 1x MI325X $2.00

Memory is the weights at that precision plus 20% for the runtime and a short context; a long context needs more. Prices are the lowest on-demand hourly rates in the SAVRN Index, read Oct 18, 2026.

ep-hindi-asr on every accelerator the SAVRN Index prices, at every precision

Model Card

By Epoch Discovery, published under apache-2.0, revision df499ee64c9a.

ep-hindi-asr is a Hindi speech recognition model built on the audio encoder of EmbeddingGemma 2. A CTC head reads a learned mix of the encoder's layers and predicts Gemma tokenizer units. Only the top two encoder layers, the layer mix and the head are trained; the rest of the encoder is used as released by Google DeepMind. The model was trained in two stages on a single NVIDIA A10: 300 hours of IndicVoices Hindi, then continued fine-tuning on IndicVoices, Vaani, Kathbath and Gram Vaani with noise augmentation. It decodes in one pass with no autoregressive decoder, and transcribes about 800 times faster than real time with batched input. All results use the released checkpoint (stage 2, step…

Read Epoch Discovery's full model card

Hugging Face | Base model | Vaani Benchmark
License: Apache 2.0 | Authors: Epoch Discovery

ep-hindi-asr is a Hindi speech recognition model built on the audio encoder of EmbeddingGemma 2 . A CTC head reads a learned mix of the encoder's layers and predicts Gemma tokenizer units. Only the top two encoder layers, the layer mix and the head are trained; the rest of the encoder is used as released by Google DeepMind.

The model was trained in two stages on a single NVIDIA A10: 300 hours of IndicVoices Hindi, then continued fine-tuning on IndicVoices, Vaani, Kathbath and Gram Vaani with noise augmentation. It decodes in one pass with no autoregressive decoder, and transcribes about 800 times faster than real time with batched input.

Model Overview

Parameters Total at inference ~350M
Audio encoder (EmbeddingGemma 2) 300M, top 2 of 12 layers fine-tuned
Trained parameters 99.5M (encoder layers 50.4M, reader 43.3M, head 5.8M)
Architecture Encoder 12-layer Conformer, 25 frames/s (40 ms)
Layer mix Softmax-weighted sum of 13 hidden states (1024-d)
Reader Linear 1024→768, depthwise conv (k=15), 6 Transformer blocks (768-d, 12 heads)
Head Linear 768→512, dot product with unit embeddings initialised from Gemma token embeddings
Output units 10,539 (10,537 Gemma tokens + blank + unknown)
Loss / decoding CTC; greedy or beam search with a word 4-gram KenLM
Input/Output Input Mono audio, any sample rate (resampled to 16 kHz)
Output Hindi text in Devanagari, no punctuation
Checkpoint model.safetensors, bf16, 0.71 GB (full model, ~350M parameters) + config.json

Benchmark Results

All results use the released checkpoint (stage 2, step 28,000) in bf16. The checkpoint was selected on dev sets only. The KenLM decoder settings are the stage-1 settings, tuned on our IndicVoices dev split.

Benchmark Metric Greedy + KenLM
Vaani-Benchmark-V1.0, Hindi test (5,050 segments, 10.9 h) WER, 3 references (official toolkit) 14.3 13.5
IndicVoices Hindi valid (5,504 utterances, 8.9 h) WER 18.45 –
CER 9.08 –
Kathbath Hindi test-unknown (1,929 utterances, 3.0 h) WER 18.26 –
Kathbath Hindi test-known (3,130 utterances, 5.0 h) WER 18.25 –
Lahaja (6,152 utterances, 12.3 h) WER 18.11 –
FLEURS Hindi test (418 utterances, 1.3 h) WER 21.69 –
Gram Vaani eval (1,032 utterances, 2.8 h) WER 33.38 –

Except for Vaani, WER is single-reference after normalize.py (strict) on reference and hypothesis.

Stage 1 (previous release) and stage 2

Benchmark Stage 1, greedy Stage 2, greedy
Vaani-Benchmark-V1.0 21.8 14.3
IndicVoices valid 19.21 18.45
FLEURS Hindi test 25.72 21.69

Inference

1. Get access and download

The repository and the base model are gated. Accept the terms on both pages first: epoch-discovery/ep-hindi-asr and google/embeddinggemma-2.

pip install -U "huggingface_hub[cli]"
hf auth login
hf download epoch-discovery/ep-hindi-asr --local-dir ep-hindi-asr
cd ep-hindi-asr
pip install -r requirements.txt

transcribe.py loads the weights from model.safetensors and config.json. From google/embeddinggemma-2 it downloads only the configuration files and the tokenizer.

2. Command line

# greedy decoding (fastest)
python transcribe.py --ckpt model.safetensors audio.wav

# several files in one call (the model loads once)
python transcribe.py --ckpt model.safetensors a.wav b.flac c.mp3

# beam search with the 4-gram KenLM (lower WER, slower; the search runs on the CPU)
python transcribe.py --ckpt model.safetensors --decode lm \
    --lm hi_train_noheldout_4gram.bin --unigrams unigrams_noheldout.txt audio.wav

# CPU only
python transcribe.py --ckpt model.safetensors --device cpu audio.wav

Each output line is <file>\t<text>\t(RTF <real-time factor>). Add --normalize to apply the scoring normaliser (normalize.py, strict mode). The KenLM settings (alpha 0.3, beta 1.0, beam 64) come from config.json; --alpha, --beta and --beam override them.

3. Python

import torch
from transcribe import load, read_audio, log_probs, greedy

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model, units, ck = load("model.safetensors", device)

wav = read_audio("audio.wav")          # mono float32, resampled to 16 kHz
lp = log_probs(model, wav, device)     # CTC log-probabilities, 25 frames per second
print(greedy(lp, units))

4. Long recordings

The model was trained on segments of 30 s or less, and transcribe.py decodes each file in one pass. Split longer audio into segments of up to 30 s before transcription. Split at pauses (for example with a voice activity detector), not at fixed times, so that words are not cut.

5. Speed and hardware

Hardware Setting Speed
NVIDIA A10 24 GB, bf16 length-sorted batches, greedy ~770-890x real time
NVIDIA A10 24 GB, bf16 one file at a time, greedy (transcribe.py) ~160x real time
Apple Mac, CPU one file at a time, greedy ~15-18x real time

Peak GPU memory is 5.6 GB with batched input. KenLM beam search runs on the CPU and adds decode time.

6. Notes

  • Run in bf16 (GPU) or fp32 (CPU). fp16 is not supported.
  • Use SDPA attention (the default in eg2_model.py). Eager attention in transformers 5.19.0 gives wrong outputs.
  • Output is Devanagari without punctuation or digits. English words are written in Devanagari.

7. Reproduce the Vaani score

python scripts/vaani_eval.py --pkg . --data <Vaani-Benchmark-V1.0 snapshot> \
    --toolkit <Vaani-Benchmark-Evaluation-Toolkit> --out out/
python run_eval.py --model epoch-discovery/ep-hindi-asr --mode score --predictions out/predictions_beam_lm.json

The second command is from the official toolkit.

Training

Setting Value
Stage 1 300 h IndicVoices Hindi, 24,000 steps from google/embeddinggemma-2
Stage 2 continued from stage 1: Vaani 40 %, IndicVoices 40 %, Kathbath + Gram Vaani 20 % per batch; ~1,460 h available
Trained parts top 2 encoder layers, layer mix, reader, CTC head (99.5M parameters)
Augmentation SpecAugment, speed perturbation, MUSAN noise/music/babble, room reverb, telephone band-limiting
Selection best mean WER on dev sets; no test data used for training, tuning or selection
Hardware 1x NVIDIA A10 24 GB; ~4 h (stage 1) + ~8 h (stage 2)

Training scripts for stage 1 are in scripts/.

Usage and Limitations

Intended Usage

Transcription of Hindi speech to Devanagari text: voice notes, interviews, call and meeting recordings, and batch transcription of audio archives where throughput matters.

Limitations

  • Language and script: Hindi only. English and other Latin-script words are written in Devanagari or missed; there is no romanised or code-mixed output.
  • Numbers: the training transcripts spell numbers as words, so the model does not output digits. Test sets that write numbers as digits (for example FLEURS) count these as errors.
  • Formatting: no punctuation or capitalisation.
  • Accents and audio: accuracy varies by region; on Vaani, greedy WER per state ranges from 7.2 to 22.6. Rural telephone speech (Gram Vaani) remains the hardest domain.
  • Streaming: not supported; each window uses its full context.
  • Language model: the KenLM is built from IndicVoices transcripts only and has a limited vocabulary for formal or technical text.

License and Acknowledgements

The fine-tuned weights and code are released under Apache 2.0. Use of the base model is subject to the terms of google/embeddinggemma-2. Training data: IndicVoices and Kathbath (AI4Bharat), Vaani (ARTPARK, IISc) and Gram Vaani (OpenSLR 118), each under its own terms. Noise augmentation uses MUSAN and simulated room impulse responses (OpenSLR 28). The KenLM text comes from IndicVoices.

The recipe follows QUAN-Transcribe and the idea of transcribing with the EmbeddingGemma 2 audio encoder from Embedding Gemma Transcribe.

Identity and Version

Repository
epoch-discovery/ep-hindi-asr
Publisher
Epoch Discovery
Task
Speech recognition
Modality
Audio
Library
pytorch
Parameters
354M parameters
Languages
hi
Revision
df499ee64c9a4146b4d462d9070d30c87fbc13ed
First published
2026-10-15
Last updated
2026-10-16

Files and Weights

26 files, 754.6 MB in total. The weights are 2 files totalling 753.0 MB in bin, safetensors.

Weights2 files · 753.0 MB
Configuration19 files · 538.7 KB
Documentation1 file · 9.6 KB
Other3 files · 1.0 MB
Repository1 file · 1.5 KB
Every file
FileTypeSizeSHA-256
hi_train_noheldout_4gram.binWeights45.0 MB —
model.safetensorsWeights708.0 MB —
.eval_results/ARTPARK-IISc-Vaani-Benchmark-V1-0.yamlConfiguration111 B —
config.jsonConfiguration100.6 KB —
decode_configs.jsonConfiguration223 B —
eg2_model.pyConfiguration13.8 KB —
normalize.pyConfiguration5.7 KB —
scripts/build_vocab.pyConfiguration4.8 KB —
scripts/decode.pyConfiguration10.3 KB —
scripts/decode_lm.pyConfiguration14.0 KB —
scripts/dl_meta.pyConfiguration2.3 KB —
scripts/eval.pyConfiguration6.5 KB —
scripts/export_slim.pyConfiguration1.3 KB —
scripts/export_st.pyConfiguration3.0 KB —
scripts/lm_text_filtered.pyConfiguration1.5 KB —
scripts/make_subsets.pyConfiguration1.4 KB —
scripts/prep_lang.pyConfiguration8.6 KB —
scripts/train_ctc.pyConfiguration24.6 KB —
scripts/vaani_eval.pyConfiguration4.8 KB —
transcribe.pyConfiguration7.0 KB —
units_hi.jsonConfiguration328.1 KB —
README.mdDocumentation9.6 KB —
requirements.txtOther148 B —
scripts/build_lm_filtered.shOther1.2 KB —
unigrams_noheldout.txtOther1.0 MB —
.gitattributesRepository1.5 KB —

License and Download

License
apache-2.0
Access
Access requested at publisher
Download size
753.0 MB
Request access from Epoch Discovery

Epoch Discovery grants access through its official repository on Hugging Face. Read the license.

Built From

  • Derived from google/embeddinggemma-2
  • Trained on (disclosed) ARTPARK-IISc/Vaani-transcription-part
  • Trained on (disclosed) ai4bharat/IndicVoices
  • Trained on (disclosed) ai4bharat/Kathbath

Evaluations

Each result is shown as reported, with the conditions its reporter stated. None is a SAVRN measurement. A comparison lines two results up only when their configuration, unit and setup are all stated and identical.

BenchmarkConditionsResultReported byRevisionDate
ARTPARK-IISc/Vaani-Benchmark-V1.0 Task Hindi_WERMetric Hindi_WERComparison conditions not established 13.5 Not named
Reported by a third party
Evaluated revision not stated 2026-10-16

Memory Requirements

PrecisionWeights in memory
As published753.0 MB
16-bit0.7 GB
8-bit0.4 GB
4-bit0.2 GB

Weights only, from the published parameter count; the key-value cache and runtime add to this.

Questions About ep-hindi-asr

How much GPU memory does ep-hindi-asr need?

About 0.8 GB at 16-bit and 0.2 GB at 4-bit: the weights (354M parameters) plus a working margin. A long context needs more.

What is the cheapest GPU to run ep-hindi-asr on?

At 16-bit, 1x MI300X from $1.85 an hour; at 4-bit, 1x MI300X from $1.85 an hour, at the lowest on-demand prices the SAVRN Index lists.

Can I use ep-hindi-asr commercially?

Yes. ep-hindi-asr is released under Apache License 2.0. The Apache License 2.0 is a permissive open-source license. It permits commercial use, modification and redistribution. It requires keeping the license and copyright notices and any NOTICE file, stating significant changes, and it includes an express patent grant from contributors.

Similar Models

Model · Speech recognition

Wav2Vec2-large-xlsr-hindi

Shyam Sunder Kumar

Fine-tuned facebook/wav2vec2-large-xlsr-53 hindi using the Multilingual and code-switching ASR challenges for low resource Indian languages. When using this model, make sure that your speech input is sampled at 16kHz. The model can be used directly (without a language model) as follows: The model can be evaluated as follows on the hindi test data of Common Voice. The script used for training can be found Hindi ASR Fine Tuning Wav2Vec2

Open weights 316M parameters transformers

Model · Speech recognition

wav2vec2-large-xlsr-mvc-swahili

Eddie Gulay

This model is a finetuned version of facebook/wav2vec2-large-xlsr-53. There was an issue with vocab, seems like there are special characters included and they were not considered during training You could try

Open weights apache-2.0 315M parameters transformers

Model · Speech recognition

wav2vec2-large-xls-r-300m-Urdu

Abid Ali Awan

A fine-tuned XLS-R 300M CTC model for Urdu automatic speech recognition. It transcribes 16 kHz mono audio and includes an optional 5-gram KenLM decoder. Best reported result: 39.89% WER / 16.70% CER with KenLM decoding on the Urdu Common Voice 8.0 test set. See the Kaggle evaluation notebook for a reproducible example. The repository contains a 5-gram KenLM language model. The Kaggle notebook evaluates a five-sample streaming smoke test from fixie-ai/commonvoice170 (ur, test). Results are reported on the Urdu test split of Mozilla Common Voice 8.0. The language-model row is the model-card score; compare each result only with the same decoding strategy. To reproduce language-model evaluation…

Open weights apache-2.0 315M parameters transformers

Model · Speech recognition

koelsch-wav2vec2-ipa

Chem

IPA phoneme recognition for Kölsch (Ripuarian German, Cologne). Fine-tuned from facebook/wav2vec2-xls-r-300m with a CTC head over a 48-symbol IPA inventory. This is also the forced-alignment model. Its frame-level CTC posteriors drive torchaudio.functional.forcedalign to produce Praat TextGrids with word and phone tiers — see notebook 9 in the repository. Trained during the CIF Tandem Fellowship at IfL-Phonetik, University of Cologne, on Alles Kölsch (Bhatt & Lindlar 1998) — 4,670 utterances, 4.5 hours of spontaneous Cologne dialect speech from 105 speakers aged 10–88 across 49 neighbourhoods. Kölsch is Ripuarian German. It has no public speech dataset and no standardised spelling: 94.1 %…

Open weights cc-by-nc-sa-4.0 315M parameters transformers

This model for Croatian ASR is based on the facebook/wav2vec2-xls-r-300m model and was fine-tuned with 300 hours of recordings and transcripts from the ASR Croatian parliament dataset ParlaSpeech-HR v1.0. If you use this model, please cite the following paper: Nikola Ljubešić, Danijel Koržinek, Peter Rupnik, Ivo-Pavao Jazbec. ParlaSpeech-HR -- a freely available ASR dataset for Croatian bootstrapped from the ParlaMint corpus. http://www.lrec-conf.org/proceedings/lrec2022/workshops/ParlaCLARINIII/pdf/2022.parlaclariniii-1.16.pdf Evaluation is performed on the dev and test portions of the ParlaSpeech-HR v1.0 dataset. There are multiple models available, and in terms of CER and WER, the…

Open weights 315M parameters transformers