5.2 KiB
Fun-ASR-Nano
audio.cpp runs Fun-ASR-Nano-2512 as a native offline ASR model on CPU and CUDA. The runtime accepts the official Hugging Face safetensors checkpoint and standalone F16 or Q8_0 GGUF files.
| Field | Value |
|---|---|
| Family | fun_asr_nano |
| Task | asr |
| Mode | offline |
| Languages | auto, zh, en, ja |
| Audio | WAV; converted to mono 16 kHz internally |
| Output | Transcript text |
| Streaming | Not exposed |
| Timestamps | Not exposed |
Install
The model-spec manager installs the Q8_0 standalone GGUF by default:
python3 tools/model_manager_v2.py install fun_asr_nano
Select another published format explicitly:
python3 tools/model_manager_v2.py install fun_asr_nano_2512_f16
python3 tools/model_manager_v2.py install fun_asr_nano_2512_safetensors
Published GGUF files and their SHA256 manifest are available at FunAudioLLM/Fun-ASR-Nano-2512-GGUF. The package catalog pins an immutable Hub revision.
CLI
audiocpp_cli \
--task asr \
--family fun_asr_nano \
--model models/Fun-ASR-Nano-2512-GGUF/fun-asr-nano-2512-q8_0.gguf \
--backend cuda \
--audio speech.wav \
--text-out transcript.txt
The same command accepts the F16 GGUF file or the official safetensors model directory.
Common Options (use directly)
| Option | Values | Default | Meaning |
|---|---|---|---|
--language |
auto, zh, en, ja |
auto |
Recognition language hint. |
--max-tokens |
positive integer | 512 |
Maximum transcript tokens generated per chunk. |
--audio-chunk-mode |
auto, fixed, none |
auto |
Offline audio chunking policy. |
--audio-chunk-seconds |
positive seconds | 30 |
Chunk duration for fixed/automatic chunking. |
Request Options (use with --request-option)
| Option | Values | Default | Meaning |
|---|---|---|---|
language |
auto, zh, en, ja |
auto |
Recognition language hint. |
enable_itn |
true, false |
true |
Enable inverse text normalization in the prompt. |
max_tokens |
positive integer | 512 |
Maximum transcript tokens generated per chunk. |
audio_chunk_mode |
auto, fixed, none |
auto |
Offline audio chunking policy. |
audio_chunk_duration_sec |
positive seconds | 30 |
Fixed chunk duration in seconds. Must be finite and positive, rounding to at least one input sample. |
Session Options (use with --session-option)
| Option | Values | Default | Meaning |
|---|---|---|---|
fun_asr_nano.weight_type |
native, f32, f16, bf16, q8_0 |
native |
Shared model weight storage type. |
fun_asr_nano.encoder_weight_type |
native, f32, f16, bf16, q8_0 |
weight_type |
Encoder matmul weight storage type. |
fun_asr_nano.adaptor_weight_type |
native, f32, f16, bf16, q8_0 |
weight_type |
Adaptor matmul weight storage type. |
fun_asr_nano.decoder_weight_type |
native, f32, f16, bf16, q8_0 |
weight_type |
Decoder matmul weight storage type. |
On CUDA, native, F16, and Q8 shared preferences are promoted to BF16 for the
decoder to keep logits stable. Encoder and adaptor weights retain the shared
type, so a Q8_0 GGUF keeps those large matrix paths quantized. An explicit
fun_asr_nano.decoder_weight_type forces that component's storage type. CPU
uses the requested or native stored types without promotion.
For example:
audiocpp_cli --task asr --family fun_asr_nano \
--model models/Fun-ASR-Nano-2512-GGUF/fun-asr-nano-2512-q8_0.gguf \
--backend cuda --audio meeting.wav \
--language zh \
--request-option enable_itn=true \
--audio-chunk-mode fixed \
--audio-chunk-seconds 30
Server
server.json:
{
"host": "127.0.0.1",
"port": 8080,
"backend": "cuda",
"device": 0,
"threads": 4,
"lazy_load": true,
"models": [
{
"id": "fun-asr-nano",
"family": "fun_asr_nano",
"path": "models/Fun-ASR-Nano-2512-GGUF/fun-asr-nano-2512-q8_0.gguf",
"task": "asr",
"mode": "offline"
}
]
}
audiocpp_server --config server.json
curl http://127.0.0.1:8080/v1/audio/transcriptions \
-F model=fun-asr-nano \
-F language=auto \
-F file=@speech.wav
The endpoint follows the OpenAI multipart transcription shape and returns
{"text":"...","timing":{...}}.
GGUF Conversion
audiocpp_gguf \
--input /path/to/Fun-ASR-Nano-2512-hf/model.safetensors \
--root /path/to/Fun-ASR-Nano-2512-hf \
--output fun-asr-nano-2512-q8_0.gguf \
--type q8_0 \
--family fun_asr_nano \
--model-spec model_specs/fun_asr_nano.json
The standalone output embeds the config, processor config, tokenizer, chat template, and model package specification. Inspect it with:
audiocpp_gguf --inspect fun-asr-nano-2512-q8_0.gguf
Validation
The published F16 and Q8_0 files were checked with the same 14.07-second reference WAV on CPU and NVIDIA H100 CUDA. CLI and OpenAI-compatible server transcripts matched the official safetensors path. The Q8_0 server validation completed at approximately 0.0725 RTF on H100.
License
The checkpoint and converted weights are governed by the FunASR Model Open Source License Agreement v1.1 distributed with the official model. Review that agreement before use or redistribution.