Speech recognition
Self-hosting Paraformer: 220M params, one RTX 3090 is overkill
Single-step non-autoregressive decoding gets Paraformer to 120x realtime on a GPU, and the whole chain — ASR plus VAD, punctuation and diarization — is under 520M parameters. Here are the versions, the VRAM, the commands and the bill.
Paraformer · self-hosted
Paraformer comes out of Alibaba DAMO Academy (now the FunAudioLLM team) and an INTERSPEECH 2022 paper by Zhifu Gao, Shiliang Zhang, Ian McLoughlin and Zhijie Yan. It attacks the obvious weakness of autoregressive transformers — emitting one token at a time is slow. A CIF (continuous integrate-and-fire) predictor first estimates how many tokens this audio should produce, a glancing language model sampler injects semantic embeddings back in to strengthen context modelling, and a single-step non-autoregressive decoder resolves the whole utterance in one pass. The paper evaluates on AISHELL-1, AISHELL-2 and a 20,000-hour industrial corpus, reporting more than 10x inference speedup over autoregressive baselines.
By 2026 Paraformer is no longer the headline act in the FunASR model zoo. Above it sit LLM-style recognisers — Fun-ASR-Nano (800M), Qwen3-ASR (1.7B), GLM-ASR-Nano (1.5B) — and beside it SenseVoiceSmall (234M), which also emits emotion and audio-event tags. But the official model-selection guide is blunt about it: if your scenario is pure Mandarin and you need character-level timestamps or hotword customisation, pick Paraformer. It is the mature non-autoregressive path — 220M params, Apache-2.0 weights on Hugging Face, 60,000+ hours of training audio, no engineering surprises. In production, boring is a feature.
VRAM was never Paraformer's constraint — throughput and pipeline plumbing are. Because it is non-autoregressive with no LLM decoder, FunASR's own vLLM guide states plainly that the vLLM acceleration path does not support Paraformer (vLLM serves only architectures with an LLM decoder, such as Fun-ASR-Nano and GLM-ASR-Nano). So renting an H100 buys you no continuous-batching dividend. The right move is cheap cards, many processes, and batch_size_s cranked up. On NexGPU an RTX 3090 24GB is $0.193/GPU-hour, billed per second with no minimum — transcribing ten thousand hours of backlog audio can cost less than lunch.
01 —
Which Paraformer variants exist, and what each one needs
Taken from the FunASR v1.4.3 model registry — stop copying model IDs from 2024 blog posts
| Version | Parameters | VRAM | Context | Notes |
|---|---|---|---|---|
| paraformer-zh (actually resolves to SeACo-Paraformer-large) | 220M | ~0.9GB fp32 weights / ~0.45GB fp16; budget 4GB for single-card inference | Segmented by fsmn-vad, default max segment 60s (max_single_segment_time=60000) | Passing model="paraformer-zh" to FunASR actually fetches iic/speech_seaco_paraformer_large_asr_nat-zh-cn-16k-common-vocab8404-pytorch — the ICASSP 2024 SeACo-Paraformer with its hotword branch. For the plain model, pass model="paraformer". |
| paraformer (Paraformer-large, vocab8404) | 220M | ~0.9GB fp32 weights; runs in 2GB | Also relies on VAD segmentation for long audio | The original single-step NAR large model: Mandarin with code-switched English, character-level timestamps, no hotword branch. Easiest entry point for ONNX export. |
| paraformer-zh-streaming (...vocab8404-online) | 220M | ~2GB resident per stream, scaling linearly with concurrent sessions | chunk_size=[0, 10, 5], i.e. 600ms output granularity; encoder_chunk_look_back=4, decoder_chunk_look_back=1 | This is the one for live dictation. chunk_stride = chunk_size[1] * 960 — your feed stride must match it or the output drifts. |
| paraformer-en (vad-punc, vocab10020) | 220M | ~2GB (VAD and punctuation are baked into the pipeline) | VAD + PUNC built in, long audio works out of the box | English offline transcription. Note that FunASR only fixed this alias's resolution on Hugging Face in v1.4.1 (2026/08/04); older versions pull the wrong weights. |
| Companion chain: fsmn-vad + ct-punc + cam++ | 0.4M + 290M + 7.2M ≈ 298M | ~1.2GB fp32 weights combined, co-resident with the ASR model | VAD segments, punctuation restores sentence boundaries, cam++ labels speakers | The full stack is ~518M params, ~2.1GB of fp32 weights. ct-punc is larger than the ASR model itself — people who only size the ASR model miss half the footprint. |
| Newer siblings: SenseVoiceSmall / Fun-ASR-Nano-2512 | 234M / 800M | ~0.9GB / ~3.2GB fp32 | SenseVoice covers zh/en/ja/yue/ko; Fun-ASR-Nano covers zh/en/ja plus 7 Chinese dialects and 26 regional accents | If you need multilingual coverage, emotion and audio-event tags, or dialect and accent robustness, Paraformer is not the right pick — go straight to these. Fun-ASR-Nano also runs on vLLM, benchmarked at RTFx 340. |
02 —
Which GPU to rent for Paraformer
A 220M model does not need a flagship card — spend the money on card count and throughput instead
Single card running the full paraformer-zh pipeline for batch transcription and quality checks
RTX 3090 24GB$0.193/GPU-hr
The whole chain is ~2.1GB of fp32 weights, so 24GB is barely a tenth used — and the 3090 is the cheapest modern CUDA card on NexGPU, which decides it.
Always-on streaming dictation service with paraformer-zh-streaming and concurrent sessions
A10 24GB$0.414/GPU-hr
A datacentre card built for 24/7 duty. Each stream costs about 2GB, so 24GB comfortably holds ten-plus concurrent sessions without thermal throttling under sustained load.
Bulk-transcribing a backlog of thousands of hours with batch_size_s maxed and multiple worker processes
RTX 4090 24GB$0.540/GPU-hr
Paraformer cannot use vLLM, so throughput comes purely from raw per-card speed and parallelism — the 4090's shorter wall-clock usually beats the 3090's lower hourly rate here.
Fine-tuning SeACo-Paraformer on domain hotwords with train_ds.py across multiple GPUs
RTX A6000 48GB$0.817/GPU-hr
Training holds weights, gradients, optimiser state and activations at once; 48GB lets you raise the batch instead of fiddling with accumulation steps. Nodes take up to 14 GPUs, so torchrun scales in-box.
03 —
Four steps to a running Paraformer on NexGPU
From an empty instance to an OpenAI-compatible transcription endpoint
- 01
Spin up an instance and install FunASR
Pick a PyTorch prebuilt image, start an RTX 3090, SSH in and install funasr. FunASR requires Python 3.8-3.13 and PyTorch >= 1.11.0; the prebuilt image already ships a CUDA-matched torch, so do not reinstall it on top and clobber the build.
pip3 install -U funasr modelscope && python -c "import torch; print(torch.cuda.is_available())" - 02
Bring up the full offline pipeline in one call
AutoModel chains ASR, VAD, punctuation and diarization together. vad_kwargs caps each segment at 60 seconds, and batch_size_s batches dynamically by total audio duration (not by file count) — pushing it past 300 is where long-audio batch jobs get their gains. device accepts cuda:0, cpu, mps or xpu.
from funasr import AutoModel model = AutoModel(model="paraformer-zh", vad_model="fsmn-vad", vad_kwargs={"max_single_segment_time": 60000}, punc_model="ct-punc", spk_model="cam++", device="cuda:0") print(model.generate(input="meeting.wav", batch_size_s=300)[0]["text"]) - 03
Expose it: OpenAI-compatible endpoint or streaming WebSocket
funasr-server stands up a POST /v1/audio/transcriptions endpoint on port 8000, so existing Whisper API code only needs a new base_url. For live captions switch to paraformer-zh-streaming: chunk_size=[0, 10, 5] gives 600ms granularity, your feed stride must equal chunk_size[1] * 960, and audio must be 16kHz mono PCM16 — format mismatches are the single most common failure in the realtime WebSocket path.
pip install fastapi uvicorn python-multipart && funasr-server --model paraformer-zh --device cuda - 04
Fine-tune for hotwords, or export ONNX to push inference onto CPU
If jargon, names and product terms come back wrong, fine-tune SeACo-Paraformer's hotword branch with train_ds.py under torchrun. If the final serving target is high-concurrency CPU, export to ONNX and serve via funasr-onnx, using the GPU only for training and validation — that split is the cheapest way to run this model.
torchrun --nnodes 1 --nproc_per_node 2 funasr/bin/train_ds.py ++model=paraformer-zh ++train_data_set_list=train.jsonl ++train_conf.max_epoch=20
What it costs to transcribe a thousand hours
Real numbers. Say you have 1,000 hours of Mandarin meeting recordings to transcribe — 3,600,000 seconds of audio. The funasr/paraformer-zh model card on Hugging Face states 120x realtime on GPU, so 3,600,000 / 120 = 30,000 seconds ≈ 8.33 hours of wall clock. On an RTX 3090 24GB at $0.193/GPU-hour that is 8.33 x $0.193 ≈ $1.61. Want it faster? An RTX 4090 24GB at $0.540/GPU-hour, estimated conservatively at 200x realtime, gives 3,600,000 / 200 = 18,000 seconds = 5 hours, so 5 x $0.540 = $2.70 — 40% faster for 60% more money; your call. The real trick is parallelism: run 8 x RTX 3090 at once and wall clock drops to 8.33 / 8 ≈ 1.04 hours while total GPU-hours stay at 8.33, so the cost is still $1.61. Per-second billing means parallelism is free. Add the edges: 300GB of source audio parked for a day is $0.414/GB-month / 30 x 300 ≈ $4.14; pulling back ~200MB of JSONL transcripts is 0.2 x $0.0081 ≈ $0.002. Under $6 for the whole run — and compute billing stops the moment you stop the instance, storage the moment you destroy the volume. No minimum, no setup fee, no quota request.
04 —
FAQ
How much VRAM does Paraformer actually need to self-host?
Are model="paraformer-zh" and model="paraformer" the same model?
Can Paraformer be accelerated with vLLM? Is an H100 worth renting?
In 2026, should I pick Paraformer, SenseVoice or Fun-ASR-Nano for Chinese ASR?
How low can Paraformer streaming latency go, and how do I set chunk_size?
Can I use Paraformer commercially? What is the licence?
Start building on NexGPU
Enterprise R&D team or solo developer — either way, your first job can be running in minutes.
Sign up to browse live network pricing. No payment method required.
