Xinference 内置音频模型全景指南:ASR 语音识别、TTS 语音合成与音乐生成的统一启动与调用
【免费下载链接】inferenceSwap GPT for any LLM by changing a single line of code. Xinference lets you run open-source, speech, and multimodal models on cloud, on-prem, or your laptop — all through one unified, production-ready inference API.项目地址: https://gitcode.com/GitHub_Trending/in/inference
Xinference 在仓库 doc/source/models/builtin/audio/index.rst 中集中登记了一批开箱即用的内置音频模型,覆盖语音识别(audio2text)、语音合成(text2audio)、音乐生成(text2music)与说话人嵌入等能力。本文将以此清单为骨架,结合 模型能力文档 的用法说明与 音频模型源码 的实现细节,完整讲解内置音频模型的分类、多引擎选择机制、启动命令以及四种 OpenAI 兼容音频 API 的调用方式,帮助你直接用一条命令完成 ASR/TTS 模型的上线。
内置音频模型总览:从 Whisper 到 Qwen3 的一站式模型库
Xinference 的音频模型内置清单(见 doc/source/models/builtin/audio/index.rst)目前收录了约 60 个内置模型规格,每个规格对应一个独立的文档页面(如 whisper-large-v3.rst、cosyvoice2-0.5b.rst),这些页面为统一格式生成,包含模型名、模型族、能力(Abilities)、多语言标记(Multilingual)、模型 ID 与推荐启动命令。
按能力划分,内置音频模型可归为四大类(分类依据见 model_abilities/audio.rst):
| 能力类别 | 代表模型 | 典型用途 |
|---|---|---|
| Audio to Text(语音识别/ASR) | whisper 全系列(tiny/base/small/medium/large-v3/large-v3-turbo)、Belle-whisper-large-v3-zh、SenseVoiceSmall、Paraformer 系列、Fun-ASR 系列、Qwen3-ASR | 把音频转录为文本、翻译为英文 |
| Text to Audio(TTS 语音合成) | ChatTTS、CosyVoice 全系列、MeloTTS 全语种、Kokoro-82M、MegaTTS3、F5-TTS、FishSpeech-1.5、IndexTTS2、VoxCPM2、Qwen3-TTS、Breeze-TTS-2、FireRedTTS3 等 | 根据文本合成语音,支持零样本、音色克隆、情感控制等 |
| 音乐生成 | ACE-Step1.5、MiniMax-Music3(仅 NVIDIA CUDA) | 根据歌词与音乐描述生成音乐 |
| 说话人嵌入 | speech_campplus_sv_zh-cn_16k-common、speech_campplus_sv_zh_en_16k-common_advanced | 从音频中提取 192 维说话人向量 |
从源码看,这些能力标记直接定义在模型规格文件 xinference/model/audio/model_spec.json 中,例如 Whisper 系列的model_ability为["audio2text"],CosyVoice2-0.5B 为["text2audio", "text2audio_zero_shot", "text2audio_voice_cloning"]。AudioModelFamilyV2(定义于 xinference/model/audio/core.py)会将这些规格解析为运行时可查询的描述,前端在“启动模型”对话框中即依据该描述展示能力与引擎选项。
多引擎架构:一个模型名,多种运行时
Xinference 音频模型的一个重要设计是"一模型多引擎":同一个模型名可以通过--model-engine参数选择不同的推理后端。规格页中明确标注了可用引擎,例如:
- whisper-large-v3:
transformers(默认)与MLX - Qwen3-ASR-1.7B:
transformers(默认)、MLX;在 Linux + NVIDIA GPU 上还可使用vLLM - F5-TTS:
PyTorch(默认)与MLX - Kokoro-82M:
PyTorch与MLX - Fun-ASR-Nano-2512:
PyTorch与MLX - Qwen3-TTS 系列:
PyTorch与MLX
引擎分发的底层实现位于 xinference/model/audio/engine_family.py。其中AUDIO_ENGINES字典维护"模型名 → 引擎名 → 实现类"的注册关系,check_engine_by_model_name_and_engine负责把用户传入的引擎名映射到具体实现类;当用户不指定引擎时,core.py 会取注册表中第一个引擎作为默认值。引擎探测还通过is_model_family_supported做精确过滤,避免无关引擎出现在启动选项中。
值得注意的兼容性设计(见 core.py 与 audio.rst 的 "Audio engines" 一节):历史上形如whisper-large-v3-mlx的模型名依然可以作为启动别名使用,但会被自动解析为规范名whisper-large-v3加上--model-engine MLX;注册、缓存、版本查询和虚拟环境查找都统一使用规范模型名,新集成应优先使用--model-engine MLX的写法。
启动内置音频模型:一条命令完成部署
命令行启动
内置音频模型的统一启动入口是xinference launch,基本形态为:
xinference launch --model-name <模型名> --model-type audio [--model-engine <引擎>]结合各规格页,常见示例:
# Whisper 语音识别(默认 transformers 引擎) xinference launch --model-name whisper-large-v3 --model-type audio --model-engine transformers # Apple Silicon 上使用 MLX 引擎 xinference launch --model-name whisper-large-v3 --model-type audio --model-engine MLX # Linux + NVIDIA GPU 上使用 vLLM 加速 Qwen3-ASR 转录 xinference launch --model-name Qwen3-ASR-1.7B --model-type audio --model-engine vLLM # TTS:Kokoro-82M(PyTorch 引擎) xinference launch --model-name Kokoro-82M --model-type audio --model-engine PyTorch # TTS:CosyVoice2-0.5B(单引擎,无需指定) xinference launch --model-name CosyVoice2-0.5B --model-type audio # ASR:Paraformer-zh(单引擎) xinference launch --model-name paraformer-zh --model-type audio # 中文 TTS:MeloTTS-Chinese xinference launch --model-name MeloTTS-Chinese --model-type audio带特殊参数的启动
部分模型在启动时需要额外的模型级参数(--key value形式),这些参数最终会通过 create_audio_model_instance 的**kwargs通道传给模型实现:
- Kokoro 中文支持:先执行
pip install misaki[zh],启动时传lang_code='z';推理时 voice 需以z开头(如zf_xiaoyi)。 - SenseVoiceSmall 离线 VAD:提前下载
fsmn-vad模型后,启动时传--vad_model /path/to/fsmn-vad。 - Paraformer 说话人信息:使用
paraformer-zh-long或seaco-paraformer-zh时,追加--spk_model cam++才能输出说话人信息。 - IndexTTS2 离线小模型:将 w2v-bert-2.0、campplus、bigvgan、MaskGCT 四个模型下载到同一目录后,启动时传
--small_models_dir /path/to/small_models。 - ACE-Step1.5 启用 LM 规划:
--lm_model_path acestep-5Hz-lm-1.7B,lm_backend可选pt/vllm/mlx。 - Breeze-TTS-2 加速:
--fast_all true,或单独启用fast_text_encoder、fast_backbone_prefill等 CUDA Graph 选项。
四种 OpenAI 兼容音频 API
路由注册位于 xinference/api/routers/audio.py,四个端点与 OpenAI Audio API 对齐(启用认证时均需要models:read权限):
| 能力 | 端点 |
|---|---|
| 转录(Transcription) | /v1/audio/transcriptions |
| 翻译(Translation,转英文) | /v1/audio/translations |
| 语音合成(Speech) | /v1/audio/speech |
| 说话人嵌入(Speaker Embedding) | /v1/audio/embeddings |
语音识别(转录与翻译)
转录把音频转为原文语言,翻译则统一转成英文。两者请求体一致,均可使用 cURL、OpenAI Python Client 或 Xinference Python Client:
curl -X 'POST' \ 'http://<XINFERENCE_HOST>:<XINFERENCE_PORT>/v1/audio/transcriptions' \ -H 'accept: application/json' \ -H 'Content-Type: application/json' \ -d '{ "model": "<MODEL_UID>", "file": "<audio bytes>" }'import openai client = openai.Client( api_key="cannot be empty", base_url="http://<XINFERENCE_HOST>:<XINFERENCE_PORT>/v1" ) with open("speech.mp3", "rb") as audio_file: client.audio.transcriptions.create(model="<MODEL_UID>", file=audio_file)Xinference Python Client 等价写法:
from xinference.client import Client client = Client("http://<XINFERENCE_HOST>:<XINFERENCE_PORT>") model = client.get_model("<MODEL_UID>") with open("speech.mp3", "rb") as audio_file: model.transcriptions(audio=audio_file.read())响应为包含text字段的 JSON。翻译端点把路径换成/v1/audio/translations,客户端方法改为model.translations(...)或client.audio.translations.create(...)即可。
语音合成(Speech)
Speech 端点接收文本并返回音频二进制,默认非流式输出。基本用法:
curl -X 'POST' \ 'http://<XINFERENCE_HOST>:<XINFERENCE_PORT>/v1/audio/speech' \ -H 'accept: application/json' \ -H 'Content-Type: application/json' \ -d '{ "model": "<MODEL_UID>", "input": "<The text to generate audio for>", "voice": "echo", "stream": true }'import openai client = openai.Client( api_key="cannot be empty", base_url="http://<XINFERENCE_HOST>:<XINFERENCE_PORT>/v1" ) client.audio.speech.create(model="<MODEL_UID>", input="<text>", voice="echo")Xinference Python Client:
from xinference.client import Client client = Client("http://<XINFERENCE_HOST>:<XINFERENCE_PORT>") model = client.get_model("<MODEL_UID>") speech_bytes = model.speech(input="<text>", voice="echo")除了通用参数,不同 TTS 模型还通过kwargs通道支持扩展能力(原文档在 audio.rst 中逐模型说明,原始 REST 请求需将kwargs编码为 JSON 字符串):
- CosyVoice 系列:
CosyVoice-300M-SFT提供预置音色['中文女', '中文男', '日语男', '粤语女', '英文女', '英文男', '韩语女'];CosyVoice-300M支持音色克隆,需传prompt_speech(WAV 格式,建议 16 kHz,其他采样率会被重采样到 16 kHz)与prompt_text;CosyVoice-300M-Instruct额外支持instruct_text指令控制;CosyVoice2-0.5B集三者于一身,并支持stream=True原生流式。 - FishSpeech-1.5:音色克隆参数对齐 CosyVoice,使用
prompt_speech与prompt_text。 - Breeze-TTS-2:支持自然语言音色设计(只传
instruct)、音色克隆(prompt_speech+prompt_text)与"语音导演"(三者同传);cfg_scale默认 1,推荐 4,seed默认 42,仅支持 Linux + NVIDIA CUDA。 - IndexTTS2:支持情感控制——
emo_audio_prompt(情感参考音频)、emo_alpha(0.0~1.0,默认 1.0)、emo_vector(8 维情感强度列表,顺序为[happy, angry, sad, afraid, disgusted, melancholic, surprised, calm])、use_emo_text/emo_text(文本情感引导,建议emo_alpha约 0.6)以及use_random随机性开关;IndexTTS-2.5额外支持ZH/EN/JA/ES/AR语言参数、speed(0.5~2.0)与<词|读音>注音记号。 - ACE-Step1.5(音乐生成):歌词放
input,音乐描述放instruct;duration默认 60 秒(可传-1或 10~600);seed=-1随机、非负整数可复现;输出格式支持aac/flac/mp3/ogg/opus/wav/wav32;需要 Python 3.11/3.12,运行在独立虚拟环境中(源码约束见 core.py)。 - MiniMax-Music3(音乐生成):同样复用 Speech 端点,
duration范围 0.04~360 秒(默认 60,作为audio_duration直传 Diffusers),输出flac/mp3/ogg/wav;仅支持 NVIDIA CUDA(源码在 core.py 中显式校验)。
说话人嵌入(Speaker Embedding)
该端点一次输入一个音频文件,返回一个 192 维的说话人向量(内置 CAMPPlus 模型),设计上无状态,适合存储向量后用余弦相似度做说话人验证或 1:N 识别。请求使用multipart/form-data:
curl -X POST \ 'http://<XINFERENCE_HOST>:<XINFERENCE_PORT>/v1/audio/embeddings' \ -H 'accept: application/json' \ -F 'model=<MODEL_UID>' \ -F 'file=@speaker.wav'from xinference.client import Client client = Client("http://<XINFERENCE_HOST>:<XINFERENCE_PORT>") model = client.get_model("<MODEL_UID>") with open("speaker.wav", "rb") as audio_file: result = model.create_embedding(audio_file.read()) embedding = result["embedding"] # 192 维向量响应示例:
{ "object": "embedding", "model": "<MODEL_UID>", "dimensions": 192, "embedding": [0.0123, -0.0456, 0.0789] }输入音频会被解码、转单声道并重采样到 16 kHz;比较两个向量时使用余弦相似度,阈值需结合自身场景数据标定。
从模型规格到实例化:内置音频模型的分发链路
要理解"为什么一条启动命令就能拉起任意音频模型",可以追踪 create_audio_model_instance 的完整流程:
- 解析引擎:
resolve_audio_model_name_and_engine先把*-mlx旧别名归一化为"规范名 + MLX 引擎"。 - 匹配规格:
match_audio在BUILTIN_AUDIO_MODELS(由model_spec.json注册)中按模型名、引擎、量化等级、下载源(HuggingFace / ModelScope / OpenMind Hub / CSGHub)筛选出AudioModelFamilyV2规格。 - 引擎分发:若该模型注册了多引擎,则通过
check_engine_by_model_name_and_engine找到具体实现类;若启用了虚拟环境(enable_virtual_env),走check_engine_by_model_name_and_engine_with_virtual_env绕过兼容性检查。 - 缓存下载:通过
CacheManager把权重缓存到本地再实例化。 - 按模型族创建实例:未走引擎分发的模型族按
model_spec.model_family分支创建对应实现类(如whisper族在 MLX 引擎下创建WhisperMLXModel,否则WhisperModel;funasr族对应FunASRModel/MLXAudioSTTModel;qwen3_tts族对应Qwen3TTSModel/MLXAudioTTSModel等)。
每个内置模型规格还带有virtualenv依赖声明(如 Whisper 依赖transformers、accelerate、系统 torch/numpy,见 model_spec.json),配合 虚拟环境机制 可实现依赖隔离。若需要接入清单之外的模型,可参考 自定义音频模型 与 xinference/model/audio/custom.py 注册自有模型族。
结语
从 内置音频模型索引 出发,Xinference 以"一份模型规格 + 一条启动命令 + 四类 OpenAI 兼容 API"的方式封装了当今主流的开源音频模型。无论是用 Whisper/Qwen3-ASR 做多语种转录、用 CosyVoice/F5-TTS/IndexTTS2 做音色克隆与情感语音、还是用 ACE-Step/MiniMax-Music3 生成音乐,核心动作都收敛为一次xinference launch --model-type audio与一次标准 HTTP 调用,工程侧则可通过--model-engine在 CPU/GPU/Apple Silicon 之间灵活切换运行时。
【免费下载链接】inferenceSwap GPT for any LLM by changing a single line of code. Xinference lets you run open-source, speech, and multimodal models on cloud, on-prem, or your laptop — all through one unified, production-ready inference API.项目地址: https://gitcode.com/GitHub_Trending/in/inference
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考