danielbodart/nemotron-speech-600m-onnx
By danielbodart · ↓ 0 · ♥ 0 · Updated 2026-03-22
What's in this repo
This page lists the files in danielbodart/nemotron-speech-600m-onnx, including decoder_model.onnx, encoder_model.onnx and more.
- 6 ONNX models (.onnx files)
- 19 files, including 6 .onnx, 6 .data, 1 .md, 1 .json, 1 .bin, 1 .meta
- Last updated 2026-03-22
ONNX files
| File | Size | Download |
|---|---|---|
| fp16/decoder_model.onnx | — | Download |
| fp16/encoder_model.onnx | — | Download |
| fp32/decoder_model.onnx | — | Download |
| fp32/encoder_model.onnx | — | Download |
| int8/decoder_model.onnx | — | Download |
| int8/encoder_model.onnx | — | Download |
How to use
These ONNX files can be loaded with ONNX Runtime. To inspect a model graph, upload the file to the Netron viewer. Download links point to the original files on Hugging Face.
README
Nemotron Speech 600M — ONNX (Streaming)
ONNX export of nvidia/nemotron-speech-streaming-en-0.6b, a 600M-parameter streaming ASR model using FastConformer encoder + RNNT decoder.
Exported directly from the original NeMo checkpoint (not from a third-party conversion) to ensure numerical fidelity.
Available Precisions
| Variant | Encoder Weights | Decoder Weights | Total | Target Hardware | Notes |
|---|---|---|---|---|---|
fp32/ |
2.3 GB | 34 MB | 2.4 GB | Any | Original precision |
fp16/ |
1.2 GB | 17 MB | 1.2 GB | NVIDIA GPU (tensor cores), Apple Silicon (ANE/GPU) | Recommended for GPU inference |
int8/ |
799 MB | 34 MB | 876 MB | Intel CPU (VNNI/AMX) | Dynamic quantization, encoder MatMul weights only |
Model Architecture
- Encoder: Cache-aware streaming FastConformer (24 layers, 1024 dim)
- Decoder: RNNT with LSTM prediction network (2 layers, 640 hidden)
- Vocabulary: 1025 SentencePiece tokens (1024 + blank)
- Audio input: 128-channel mel spectrogram, 16kHz, 560ms chunks (56 mel frames + 9 cache frames)
Runtime Configuration
All parameters needed to run the model are documented in config.json. Key values:
Audio Preprocessing
| Parameter | Value |
|---|---|
| Sample rate | 16000 Hz |
| Sample format | S16_LE (16-bit signed little-endian) |
| Pre-emphasis | 0.97 |
| FFT size | 512 |
| Hop length | 160 samples (10ms) |
| Window length | 400 samples (25ms) |
| Window type | Hann |
| Mel bands | 128 |
| Mel norm | Slaney |
| Mel layout | Band-major [n_mels, n_frames] (not frame-major) |
Mel filterbank weights are provided in shared/filterbank.bin (shape [1, 128, 257]).
Encoder Streaming
| Parameter | Value |
|---|---|
| Chunk size | 56 mel frames (560ms audio) |
| Pre-encode cache | 9 mel frames (prepended from previous chunk) |
| Total input frames | 65 per chunk (56 + 9) |
| Layers | 24 |
| Dimension | 1024 |
cache_last_channel shape |
[1, 24, 70, 1024] (init zeros) |
cache_last_time shape |
[1, 24, 1024, 8] (init zeros) |
cache_last_channel_len |
[1] int64 (init zero) |
Feed cache outputs back as next chunk's cache inputs.
RNNT Decoder
| Parameter | Value |
|---|---|
| Blank token ID | 1024 |
| Vocab size | 1025 (1024 tokens + blank) |
| Max symbols per frame | 10 |
| Prediction layers | 2 (LSTM) |
| Prediction hidden | 640 |
input_states_1/2 shape |
[2, 1, 640] float32 (init zeros) |
For each encoder output frame: feed single frame [1, 1024, 1] to decoder, argmax logits over 1025 vocab, if not blank emit token and loop (up to 10), if blank move to next frame. Feed decoder states back for next symbol/frame.
Files
config.json # Machine-readable runtime parameters (all values above)
shared/
├── filterbank.bin # Mel filterbank weights [1, 128, 257] Slaney norm
├── filterbank.meta # Shape metadata
├── tokens.txt # SentencePiece vocabulary (1024 tokens)
└── preprocessor.config # Feature extraction parameters
fp32/ # FP32 precision
├── encoder_model.onnx # Streaming encoder graph
├── encoder_model.onnx.data # Encoder weights
├── decoder_model.onnx # RNNT decoder+joint graph
└── decoder_model.onnx.data # Decoder weights
fp16/ # FP16 precision (same structure)
├── encoder_model.onnx
├── encoder_model.onnx.data
├── decoder_model.onnx
└── decoder_model.onnx.data
int8/ # INT8 dynamic quantization (same structure)
├── encoder_model.onnx # MatMulInteger ops for encoder weights
├── encoder_model.onnx.data
├── decoder_model.onnx # Decoder stays FP32
└── decoder_model.onnx.data
Usage
Download a specific precision:
# FP16 (recommended for GPU)
hf download danielbodart/nemotron-speech-600m-onnx fp16/ shared/ config.json --local-dir ./model
# INT8 (recommended for Intel CPU)
hf download danielbodart/nemotron-speech-600m-onnx int8/ shared/ config.json --local-dir ./model
# FP32 (reference)
hf download danielbodart/nemotron-speech-600m-onnx fp32/ shared/ config.json --local-dir ./model
Load with ONNX Runtime:
import onnxruntime as ort
# GPU inference (FP16 recommended)
encoder = ort.InferenceSession("model/fp16/encoder_model.onnx",
providers=["CUDAExecutionProvider"])
decoder = ort.InferenceSession("model/fp16/decoder_model.onnx",
providers=["CUDAExecutionProvider"])
# CPU inference (INT8 recommended)
encoder = ort.InferenceSession("model/int8/encoder_model.onnx",
providers=["CPUExecutionProvider"])
decoder = ort.InferenceSession("model/int8/decoder_model.onnx",
providers=["CPUExecutionProvider"])
Export Reproducibility
All export, conversion, quantization, and validation scripts are in the companion GitHub repo: danielbodart/nemotron-speech-600m-onnx
nemo_export_onnx.py— Export from original NeMo checkpointonnx_fp16_convert.py— FP32 → FP16 conversion with I/O Cast wrappersonnx_fp16_validate.py— Numerical validation (encoder max abs diff 99%)onnx_int8_quantize.py— Dynamic INT8 quantization (MatMul weights only)onnx_int8_validate.py— INT8 validationonnx_package_for_hf.py— Consolidate and package for Hub upload
License
The original model is licensed under CC-BY-4.0 by NVIDIA.
Model info
Created: 2026-03-21
Updated: 2026-03-22
View on Hugging FaceFiles (19)
Related models
More from danielbodart
No other models by this author.