IndicConformer-600M β€” ONNX Runtime dynamic INT8

An INT8-quantized checkpoint of ai4bharat/indic-conformer-600m-multilingual β€” full credit to AI4Bharat for the base model, training, and the 22-language coverage of official Indian languages this checkpoint inherits entirely. This repo only quantizes the released weights; it introduces no new training data or architecture.

What's quantized: the shared 24-layer Conformer encoder (encoder.onnx, 97.5% of the model's parameters) via onnxruntime.quantization.quantize_dynamic (weight-only INT8, no calibration data). The CTC decoder, RNNT decoder/joint network, and the 22 per-language output heads are unchanged fp32 β€” their combined weight mass (~90MB) was small enough not to be worth the added risk on a first pass.

Results vs. the fp32 baseline (264-example stratified half-sample across 22 languages, both decoding heads β€” see the full methodology below):

Metric fp32 baseline INT8 (this repo)
WER vs. text (CTC) 0.2081 0.2053
WER vs. text (RNNT) 0.1966 0.1998
Resident memory after load 3.34 GB 2.50 GB (-25%)
On-disk size ~2.4 GB 0.74 GB (-69%)
CPU inference time / audio duration (CTC) 0.319 0.286 (faster)
CPU inference time / audio duration (RNNT) 0.448 0.561 β†’ 0.448 (faster)

Aggregate WER is essentially unchanged on both decoding heads, and quantization also made CPU inference faster, not just smaller. WER-vs-baseline-transcript (a direct diff against the fp32 model's own output on the same audio, isolating behavioral drift from absolute quality) is 0.067 (CTC) / 0.055 (RNNT) β€” nonzero, meaning some individual transcriptions did shift wording even though the aggregate didn't get worse. Full per-language breakdown and methodology: see TECHNICAL_REPORT.md in github.com/hazardscarn/vyoma_hackathon (asr branch).

Developed by David Babu.

Usage

This is not a standard transformers architecture β€” like the base model, it's served through ONNX Runtime sessions plus a TorchScript preprocessor, wired together by the base model's own model_onnx.py. Use the asr_exports module from the GitHub repo above (handles this automatically, including a quick load()/unload() cycle for memory-constrained deployments), or directly:

from asr_exports import QuantizedIndicConformer, ASRTranscriber

engine = QuantizedIndicConformer()   # downloads + caches this repo automatically
engine.load()

asr = ASRTranscriber(engine)
text = asr.transcribe_file("audio.wav", language="Hindi", decoding="ctc")   # or decoding="rnnt"
print(text)

engine.unload()

Supports all 22 languages the base model covers (Assamese, Bengali, Bodo, Dogri, Gujarati, Hindi, Kannada, Kashmiri, Konkani, Maithili, Malayalam, Manipuri, Marathi, Nepali, Odia, Punjabi, Sanskrit, Santali, Sindhi, Tamil, Telugu, Urdu) β€” no English support, same as the base model.

Offline / one-time-download deployment (e.g. Jetson)

huggingface-cli download hazardscarn10/indic-conformer-600m-int8 --local-dir ./checkpoint

then QuantizedIndicConformer(checkpoint_dir="./checkpoint") skips the Hub entirely on every subsequent load β€” only the base model's tiny model_onnx.py glue code (~8KB) still resolves through huggingface_hub's own local cache, no re-download after the first run.

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 hazardscarn10/indic-conformer-600m-int8

Quantized
(9)
this model