This repository demonstrates approaches to deploy NVIDIA's Nemotron-Speech ASR and Parakeet ASR models on Modal for batch and streaming transcription.
Make an account with Modal if you haven't already.
pip install modal
Authenticate your Modal account:
modal setup
Nemotron-Speech ASR is a powerful open weights model that can stream high numbers of concurrent clients. It outputs partial and final transcripts, capitlization and punctuation, and has word boosting capabilities for domain-specific vocabulary.
NeMO does not currently provide an implementation for asynchronous, concurrent clients. This codebase includes extensions to
NeMO that enable batched, cache-aware inference on asynchronous streaming clients. It is based on NeMO's inference Pipeline.
modal deploy -m nemotron_asr.nemotron_asr
parakeet/parakeet.py)The core Parakeet transcriber runs on GPU and handles both single audio files and batches:
bytes or list[bytes]BATCH_SIZE = 128 for efficient GPU utilizationparakeet/vad_segmenter.py)For Parakeet models that don't natively support streaming, we use Voice Activity Detection (VAD) to segment the stream:
Audio Stream → VAD Segmenter (CPU) → Parakeet Transcriber (GPU)
The VAD segmenter:
Why separate the VAD from transcription? This architecture enables independent autoscaling and better GPU utilization. Multiple VAD segmenters (cheap CPU) can feed a smaller pool of GPU transcribers, so GPUs only run when there's actual speech to transcribe.
parakeet/parakeet_streaming.py)The newest approach uses NVIDIA's Parakeet Realtime model (nvidia/parakeet_realtime_eou_120m-v1) with native streaming support:
Audio Stream → Parakeet Realtime (GPU) → Transcription
Key features:
NemoStreamingASRService with built-in end-of-utterance (EOU) detectionThis approach offers the lowest latency and simplest architecture since everything runs in one place, but requires GPU for the entire audio stream (not just during speech).
parakeet/parakeet_multitalker.py)The most advanced approach combines real-time speaker diarization with multi-talker ASR for streaming transcription with speaker labels:
Audio Stream → Sortformer Diarization + Multi-talker Parakeet (GPU) → Speaker-tagged Transcription
Key features:
multitalker-parakeet-streaming-0.6b-v1 model with diar_streaming_sortformer_4spk-v2.1 diarizationThis approach is ideal for scenarios with multiple speakers (meetings, conversations, interviews) where you need to know "who said what" in real-time.
# 1. Batch transcription
modal deploy -m parakeet.parakeet
# 2. Streaming with VAD segmentation
modal deploy -m parakeet.vad_segmenter
# 3. Native streaming transcription (Parakeet Realtime)
modal deploy -m parakeet.parakeet_streaming
# 4. Multi-speaker native streaming transcription
modal deploy -m parakeet.parakeet_multitalker
The parakeet-frontend/ directory contains a simple web interface for testing streaming transcription via WebSocket.
When you deploy any streaming version:
vad_segmenter): Frontend URL will be printed to console with format:
https://{workspace}-{environment}--silero-vad-segmenter-webserver-web.modal.run
parakeet_streaming): Frontend URL will be printed to console with format:
https://{workspace}-{environment}--parakeet-streaming-transcription-{shorten-id}.modal.run
parakeet_multitalker): Frontend URL will be printed to console with format:
https://{workspace}-{environment}--parakeet-multitalker-webserver-web.modal.run
Python
87.3%
JavaScript
9.5%
HTML
3.2%
This repository demonstrates approaches to deploy NVIDIA's Nemotron-Speech ASR and Parakeet ASR models on Modal for batch and streaming transcription.
Make an account with Modal if you haven't already.
pip install modal
Authenticate your Modal account:
modal setup
Nemotron-Speech ASR is a powerful open weights model that can stream high numbers of concurrent clients. It outputs partial and final transcripts, capitlization and punctuation, and has word boosting capabilities for domain-specific vocabulary.
NeMO does not currently provide an implementation for asynchronous, concurrent clients. This codebase includes extensions to
NeMO that enable batched, cache-aware inference on asynchronous streaming clients. It is based on NeMO's inference Pipeline.
modal deploy -m nemotron_asr.nemotron_asr
parakeet/parakeet.py)The core Parakeet transcriber runs on GPU and handles both single audio files and batches:
bytes or list[bytes]BATCH_SIZE = 128 for efficient GPU utilizationparakeet/vad_segmenter.py)For Parakeet models that don't natively support streaming, we use Voice Activity Detection (VAD) to segment the stream:
Audio Stream → VAD Segmenter (CPU) → Parakeet Transcriber (GPU)
The VAD segmenter:
Why separate the VAD from transcription? This architecture enables independent autoscaling and better GPU utilization. Multiple VAD segmenters (cheap CPU) can feed a smaller pool of GPU transcribers, so GPUs only run when there's actual speech to transcribe.
parakeet/parakeet_streaming.py)The newest approach uses NVIDIA's Parakeet Realtime model (nvidia/parakeet_realtime_eou_120m-v1) with native streaming support:
Audio Stream → Parakeet Realtime (GPU) → Transcription
Key features:
NemoStreamingASRService with built-in end-of-utterance (EOU) detectionThis approach offers the lowest latency and simplest architecture since everything runs in one place, but requires GPU for the entire audio stream (not just during speech).
parakeet/parakeet_multitalker.py)The most advanced approach combines real-time speaker diarization with multi-talker ASR for streaming transcription with speaker labels:
Audio Stream → Sortformer Diarization + Multi-talker Parakeet (GPU) → Speaker-tagged Transcription
Key features:
multitalker-parakeet-streaming-0.6b-v1 model with diar_streaming_sortformer_4spk-v2.1 diarizationThis approach is ideal for scenarios with multiple speakers (meetings, conversations, interviews) where you need to know "who said what" in real-time.
# 1. Batch transcription
modal deploy -m parakeet.parakeet
# 2. Streaming with VAD segmentation
modal deploy -m parakeet.vad_segmenter
# 3. Native streaming transcription (Parakeet Realtime)
modal deploy -m parakeet.parakeet_streaming
# 4. Multi-speaker native streaming transcription
modal deploy -m parakeet.parakeet_multitalker
The parakeet-frontend/ directory contains a simple web interface for testing streaming transcription via WebSocket.
When you deploy any streaming version:
vad_segmenter): Frontend URL will be printed to console with format:
https://{workspace}-{environment}--silero-vad-segmenter-webserver-web.modal.run
parakeet_streaming): Frontend URL will be printed to console with format:
https://{workspace}-{environment}--parakeet-streaming-transcription-{shorten-id}.modal.run
parakeet_multitalker): Frontend URL will be printed to console with format:
https://{workspace}-{environment}--parakeet-multitalker-webserver-web.modal.run
Python
87.3%
JavaScript
9.5%
HTML
3.2%