nano-parakeet
Pure-PyTorch inference for NVIDIA Parakeet TDT — no NeMo required.
from nano_parakeet import from_pretrained
model = from_pretrained()
print(model.transcribe("audio.wav"))
Why?
The official NeMo inference stack pulls in ~180 packages — PyTorch Lightning, Hydra, OmegaConf, apex, distributed training scaffolding — none of which are needed at inference time. This makes it painful to integrate Parakeet into existing projects: version conflicts, long installs, and a 30-second cold-start on every process launch.
nano-parakeet reimplements the full inference pipeline in plain PyTorch. The only dependencies are things you probably already have:
| nano-parakeet | NeMo | |
|---|---|---|
| Dependencies | 5 (torch, numpy, soundfile, sentencepiece, huggingface-hub) | ~180 |
| Cold start | ~3s (weights only) | ~30s (framework init + CUDA kernel compile) |
| Warm RTF (Jetson AGX Orin) | 93× | 73× |
Transcriptions are byte-identical to NeMo's output.
Install
pip install nano-parakeet
Requires Python 3.10+, PyTorch with CUDA, and ffmpeg.
Usage
Python API
from nano_parakeet import from_pretrained
model = from_pretrained() # downloads ~1.1GB on first run
text = model.transcribe("audio.wav") # path, numpy array, or tensor
print(text)
CLI
nano-parakeet audio.wav
# or
python -m nano_parakeet audio.wav
Accepts OGG, WAV, M4A, or any format ffmpeg can read.
Benchmark
RTF > 1.0 = faster than real-time. 5 timed runs after a warm-up; best time reported.
Warm throughput
| GPU | Audio | NeMo RTF | nano-parakeet RTF | Speedup |
|---|---|---|---|---|
| RTX 4090 | 12s | ~207× | ~519× | 2.5× |
| Jetson AGX Orin 64GB | 12s | ~84× | ~112× | 1.3× |
Note (RTX 4090): NeMo is run with
strategy='greedy'(single-item, not batch). The defaultgreedy_batchstrategy uses TDT label-looping CUDA graphs that fail to compile on NeMo 2.6.2 + cuda-python 12.9 (NVRTC is not permitted inside a graph capture context).strategy='greedy'uses a different CUDA graph path that works fine.
Cold start (first inference, including framework load)
| GPU | NeMo | nano-parakeet |
|---|---|---|
| RTX 4090 | ~30s | ~3s |
| Jetson AGX Orin 64GB | ~30s | ~3s |
Run both yourself:
git clone https://github.com/andimarafioti/nano-parakeet
cd parakeet-stt
./benchmark.sh sample.wav
How It Works
The full pipeline in plain PyTorch — no NeMo at runtime:
Audio (16 kHz, mono)
│
▼ pre-emphasis (α=0.97) → STFT (n_fft=512, hop=160, win=400)
→ Mel filterbank (128 bins) → log → per-feature normalisation
│
▼ FastConformer Encoder (24 layers, d_model=1024, 8 heads)
└─ ConvSubsampling (3× stride-2 → 8× time reduction)
└─ RelPositionalEncoding (Transformer-XL style)
└─ 24 × FastConformerLayer:
FF₁ (×0.5) → Self-Attn (rel-pos) → Conv (k=9) → FF₂ (×0.5) → LN
│
▼ TDT Decoder
└─ RNNT Prediction: Embed(8193, 640) + 2-layer LSTM(640)
└─ Joint: Linear(1024→640) + Linear(640→640) → ReLU → Linear(640→8198)
└─ TDT greedy decode (durations [0,1,2,3,4], blank_id=8192)
│
▼ SentencePiece decode → text
Weights are loaded directly from the .nemo file (a ZIP archive) without importing any NeMo module.
Optimisations
| Encoder | Decoder | Effect | |
|---|---|---|---|
| bfloat16 (auto, Ampere+) | ✓ | ✓ | native low-precision on modern GPUs; fp16 autocast fallback on older devices |
| CUDA graph | ✗ | ✓ | ~20 kernel launches per decode step → 1 graph replay |
Jetson Setup
The PyPI wheel works on standard x86 CUDA machines. For Jetson (JetPack 6), PyTorch needs to be installed from NVIDIA's distribution first:
# Install CUDA-enabled PyTorch for JetPack 6
UV_SKIP_WHEEL_FILENAME_CHECK=1 uv pip install \
https://developer.download.nvidia.com/compute/redist/jp/v61/pytorch/torch-2.5.0a0+872d972e41.nv24.08.17622132-cp310-cp310-linux_aarch64.whl
# Then install nano-parakeet (skipping torch since it's already installed)
pip install nano-parakeet --no-deps
pip install numpy soundfile sentencepiece huggingface-hub
Metadata
Release files for nano_parakeet 0.2.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| nano_parakeet-0.2.1.tar.gz | 212.3 kB | Without provenance | Details for nano_parakeet-0.2.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| nano_parakeet-0.2.1-py3-none-any.whl | Python 3 | none | any | Details for nano_parakeet-0.2.1-py3-none-any.whl |
Total release size: 417.4 kB
Release files / nano_parakeet-0.2.1.tar.gz
| Download URL | nano_parakeet-0.2.1.tar.gz |
|---|---|
| Size | 212.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
bb8f5e2a976faf48bccdb300598c057b152acef881e133096fa61d9e169e44ca
|
|
BLAKE2b-256 checksum How to use checksums |
b88b784acbff1e2de6284ca9d7c7c50bc5b1b3060ff5cc1cbd0c717ce8d799f4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.10.2 {"installer":{"name":"uv","version":"0.10.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"22.04","id":"jammy","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / nano_parakeet-0.2.1-py3-none-any.whl
| Download URL | nano_parakeet-0.2.1-py3-none-any.whl |
|---|---|
| Size | 205.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f5a379882769239d18127da0d2cdf13e25665da72c4240a6e9f0b49cb2bdbba5
|
|
BLAKE2b-256 checksum How to use checksums |
3ad4f834568d8243c4a349c5b706c071d04c0a120db4ebf9d1bfeef9f9ede255
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.10.2 {"installer":{"name":"uv","version":"0.10.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"22.04","id":"jammy","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Security for nano_parakeet 0.2.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.