适用边界
先判断它是否适合你的生产约束
适合
- 需要标准 /v1/audio/transcriptions 接口
- Fun-ASR-Nano 批量或并发转写
- 已有 NVIDIA GPU 和 Linux 服务环境
不适合
- 未经重新验证就直接替换下方固定版本 checkpoint
- 纯 CPU 或边缘设备
- 尚未完成显存、并发与业务音频压测的公网服务
| 模型 | FunAudioLLM/Fun-ASR-Nano-2512-vllm (official checkpoint) |
|---|---|
| 硬件 | nvidia-gpu / kubernetes |
| 操作系统 | Linux |
| 接口 | OpenAI-compatible HTTP |
运行路径
从安装到已知音频验证
以下命令来自当前验证清单;上线前固定依赖、模型和硬件。
安装
export VLLM_PYTHON="$PWD/.venv/bin/python"
export VALIDATION_DIR="$PWD/.official-native-validation"
export MODEL_DIR="$VALIDATION_DIR/official-model/a4362c943d48951f98ca2a62181cc028970270c5"
"$VLLM_PYTHON" - <<'PY'
import importlib.metadata as metadata
import torch
import vllm.model_executor.models.funasr
for name, expected in {"vllm": "0.27.1+cu129", "torch": "2.13.0+cu129",
"transformers": "5.15.0"}.items():
assert metadata.version(name) == expected, (name, metadata.version(name))
assert torch.version.cuda == "12.9" and torch.cuda.is_available()
PY
HF_HUB_DISABLE_TELEMETRY=1 HF_XET_CACHE="$VALIDATION_DIR/isolated-xet-cache" "$VLLM_PYTHON" - <<'PY'
import hashlib
import json
import os
from pathlib import Path
from huggingface_hub import HfApi, snapshot_download
model_id = "FunAudioLLM/Fun-ASR-Nano-2512-vllm"
revision = "a4362c943d48951f98ca2a62181cc028970270c5"
root = Path(os.environ["MODEL_DIR"])
info = HfApi().model_info(model_id, revision=revision, files_metadata=True)
assert info.sha == revision and len(info.siblings) == 23
snapshot_download(model_id, revision=revision, local_dir=str(root),
cache_dir=str(Path(os.environ["VALIDATION_DIR"]) / "isolated-hf-cache"),
max_workers=4)
files = []
for item in info.siblings:
content = (root / item.rfilename).read_bytes()
digest = hashlib.sha256(content).hexdigest()
assert len(content) == item.size, item.rfilename
if item.lfs:
assert digest == item.lfs.sha256, item.rfilename
else:
assert hashlib.sha1(f"blob {len(content)}\0".encode() + content).hexdigest() == item.blob_id
files.append({"path": item.rfilename, "size": len(content), "sha256": digest})
assert json.loads((root / "config.json").read_text())["architectures"] == ["FunASRForConditionalGeneration"]
(root.parent / "download-manifest.json").write_text(json.dumps(files, indent=2) + "\n")
PY
启动
CUDA_VISIBLE_DEVICES=0 PYTHONDONTWRITEBYTECODE=1 \
HF_HUB_OFFLINE=1 TRANSFORMERS_OFFLINE=1 \
HF_HUB_DISABLE_IMPLICIT_TOKEN=1 HF_HUB_DISABLE_TELEMETRY=1 VLLM_NO_USAGE_STATS=1 \
VLLM_CACHE_ROOT="$VALIDATION_DIR/runtime-cache" TRITON_CACHE_DIR="$VALIDATION_DIR/triton-cache" \
"$VLLM_PYTHON" -B -m vllm.entrypoints.openai.api_server \
--model "$MODEL_DIR" --served-model-name fun-asr-nano-official-a4362c94 \
--host 127.0.0.1 --port 57185 --dtype float32 \
--gpu-memory-utilization 0.40 --enforce-eager
健康检查
curl --max-time 15 -fsS http://127.0.0.1:57185/health
curl --max-time 15 -fsS http://127.0.0.1:57185/v1/models
Smoke test
发布前必须通过的最小验证
curl --max-time 45 -fsS http://127.0.0.1:57185/v1/audio/transcriptions -F "file=@$MODEL_DIR/example/zh.mp3;type=audio/mpeg" -F model=fun-asr-nano-official-a4362c94 -F language=zh -F response_format=json
curl --max-time 45 -fsS http://127.0.0.1:57185/v1/audio/transcriptions -F "file=@$MODEL_DIR/example/en.mp3;type=audio/mpeg" -F model=fun-asr-nano-official-a4362c94 -F language=en -F response_format=json
curl --max-time 45 -fsS http://127.0.0.1:57185/v1/audio/transcriptions -F "file=@$MODEL_DIR/example/ja.mp3;type=audio/mpeg" -F model=fun-asr-nano-official-a4362c94 -F language=ja -F response_format=json
curl --max-time 45 -fsS http://127.0.0.1:57185/v1/audio/transcriptions -F "file=@$MODEL_DIR/example/zh.mp3;type=audio/mpeg" -F model=fun-asr-nano-official-a4362c94 -F language=zh -F 'hotwords=开放时间,开放时间,开放时间' -F response_format=json
运行与容量
把可运行推进到可运营
运行检查
- 固定官方模型 revision 与本地文件摘要,以及 vLLM 0.27.1+cu129、Torch 2.13.0+cu129、Transformers 5.15.0、CUDA 12.9;不要将模型 revision 当成 FunASR 包版本
- 等待 /health 就绪并完成预热后再采集容量数据
- 记录队列等待、最终结果延迟、显存和热词命中率
容量变量
- 音频时长、语言、声道和 VAD 分段分布
- 并发、队列等待、预热与模型缓存状态
- 精确硬件、驱动、运行时和线程配置
故障排查
- 音频返回 400 时确认安装了 vllm[audio]
- 启动时 KV cache 不足则提高显存利用率或在业务允许时降低 max-model-len
- 非英文请求必须显式传 language;热词用逗号分隔并以真实业务样本验证偏置强度
安全边界
生产入口默认不信任
- 在 API 网关实现认证、TLS、限流和音频大小/时长限制
- worker 仅绑定 127.0.0.1;网关未在本次 smoke 中验证,不直接暴露公网
- 校验 wheel、模型 revision 和示例音频摘要,隔离模型缓存与上传临时目录
已知限制
当前命令对应官方 a4362c943d48951f98ca2a62181cc028970270c5,2026-09-07 在既有 vLLM 0.27.1+cu129 / Torch 2.13.0+cu129 / Transformers 5.15.0 / CUDA 12.9 环境验证,不是全新安装验证。准备步骤只检查版本和下载本地快照,不重新安装依赖。8 个 HTTP 请求均为功能验证;首次中文未预热,两请求 0.911 s 不代表容量。下方 2026-08-13 benchmark 仍是社区 checkpoint 的历史数据,没有重命名或与新结果比较。#54944 仅更新 main 的文档/测试 registry;审计时 v0.28.0 仍引用社区产物,不代表官方引用已发布。
公开基准仅用于复现起点,不替代目标业务负载测试。
证据与反馈
从原始资料核对部署合同
- 2026-09-07 official checkpoint native HTTP functional validation
- 2026-09-07 官方 checkpoint 原生 HTTP 功能验证(中文)
- 23-file manifest and 8 HTTP response digests (private paths redacted)
- 2026-08-13 historical community checkpoint validation (unchanged)
- Official reference in upstream docs/test registry; merged main, not a release claim (#54944)
- Official checkpoint at immutable a4362c94 (validated separately on 2026-09-07)
- vLLM 0.27.1 release and CUDA 12.9 wheel
- native FunASR model integration
- native FunASR hotword support
- FunASR initialization fix
- validated community conversion at e718b36e
- official FunASR split-engine guide
- FunASR deployment matrix