FunASR Model Selection Guide

June 22, 2026 · View on GitHub

Use this guide when you are choosing a first model, comparing FunASR with Whisper or a cloud ASR provider, or deciding which model alias to expose through the OpenAI-compatible API.

Fast default path

If you have a GPU, start with the flagship Fun-ASR-Nano — an LLM-based ASR model (SenseVoice encoder + a Qwen3 decoder) covering 31 languages, with the strongest accuracy on hard cases, context, and proper nouns:

from funasr import AutoModel

model = AutoModel(model="FunAudioLLM/Fun-ASR-Nano-2512", device="cuda")
result = model.generate(input="meeting.wav")
print(result[0]["text"])

On CPU, or when you want multilingual + emotion/event tags and speaker-aware meeting transcripts in one fast non-autoregressive pass, use SenseVoice-Small:

from funasr import AutoModel

model = AutoModel(
    model="iic/SenseVoiceSmall",
    vad_model="fsmn-vad",
    spk_model="cam++",
    device="cuda",  # use "cpu" for a portable smoke test
)
result = model.generate(input="meeting.wav")

Switch to Paraformer when your workload is Mandarin-only and you want character-level timestamps or hotwords.

Decision table

NeedStart withWhyNext doc
Fast multilingual private transcriptionSenseVoice-SmallStrong default with ASR, emotion tags, audio event tags, and CPU viability.README quick start
Mandarin production ASRParaformer-LargeMature Chinese ASR path with VAD and punctuation.Tutorial
English-only route in the OpenAI API exampleparaformer-en aliasSmaller English route for API compatibility checks.OpenAI API example
LLM-based ASR or 31-language experimentsFun-ASR-NanoLLM-based model path; use vLLM when decoder throughput matters.vLLM guide
Live captions or call-center streamsRuntime WebSocket serviceDesigned for long-lived streaming sessions and partial results.Runtime service docs
Batch archive processingSenseVoice-Small or Paraformer-LargeStable offline transcription path; caller owns manifests, retries, and logs.Batch ASR example
Migration from Whisper/cloud ASRSenseVoice-Small first, then benchmark alternativesGives a strong baseline before deeper model-specific tuning.Migration guide

OpenAI-compatible API aliases

The examples/openai_api server exposes short aliases so application teams do not need to know model repository IDs:

AliasUnderlying pathUse when
sensevoiceiic/SenseVoiceSmallYou want the default private speech API with multilingual ASR, event tags, and good CPU/GPU behavior.
paraformerparaformer-zh with VAD and punctuationYou want a Mandarin-oriented production route.
paraformer-enparaformer-en with VADYou want a compact English route in OpenAI-style clients.
fun-asr-nanoFunAudioLLM/Fun-ASR-Nano-2512You are evaluating LLM-based ASR, 31-language coverage, or vLLM acceleration.

Check the live service before wiring clients:

curl http://localhost:8000/v1/models
python examples/openai_api/smoke_test.py --base-url http://localhost:8000 --model sensevoice

For SDK, JavaScript, workflow, Postman, OpenAPI, Docker, and Kubernetes paths, start from the OpenAI API example.

Runtime choice by workload

WorkloadRuntime pathNotes
Notebook or one-off evaluationPython AutoModelShortest path for install, model download, and output-shape checks.
Internal HTTP serviceOpenAI-compatible APIReuse OpenAI-style clients, Dify, n8n, LangChain, AutoGen, and HTTP nodes.
Repeatable local container demoDocker Compose APICPU-first smoke test; adapt the image before using CUDA.
Internal cluster serviceKubernetes API templatePrivate ClusterIP, persistent model cache, /health probes, and port-forward smoke test.
Live audioRuntime WebSocket serviceValidate chunk size, VAD, endpointing, reconnects, and client backpressure with real audio.
LLM-based ASR throughputvLLM path for Fun-ASR-NanovLLM accelerates autoregressive decoding; it does not apply to non-autoregressive Paraformer.

See the deployment matrix when you are choosing between these paths.

Benchmark before committing

Do not choose a model from a single clean demo file. Use a small representative set first:

  • 20-50 audio files that cover short clips, long meetings, silence, noise, overlapping speakers, domain vocabulary, and target languages.
  • Record model name, model revision, FunASR version, device, CPU/GPU type, CUDA/PyTorch version, runtime path, batch size, and whether warmup/model download time is excluded.
  • Track quality with your normal WER/CER or human review process, not only transcript readability.
  • Track latency, throughput, memory, failures, and upload size limits together.
  • Keep at least one public sample for smoke tests and at least one private realistic sample for deployment validation.

For migration work, use the migration benchmark example and the migration guide.

Practical recommendations

  • With a GPU, default to Fun-ASR-Nano — the flagship LLM-based model (31 languages), strongest on hard, contextual, and proper-noun-heavy audio.
  • On CPU, or for multilingual + emotion workloads, use SenseVoice-Small (fast non-autoregressive, CPU-viable).
  • Use Paraformer when your production traffic is primarily Mandarin and you want timestamps or hotwords.
  • Use the streaming runtime when partial results and long-lived connections matter more than a single final transcript.
  • Keep model aliases stable in production runbooks so benchmark results and bug reports are reproducible.
  • Open a Deployment Help issue with model, device, command, logs, audio duration, and runtime path when you get stuck.