
vLLM-Omni 中 Ming-omni-tts 密集 0.5B 离线推理实战指南【免费下载链接】vllm-omniA framework for efficient model inference with omni-modality models项目地址: https://gitcode.com/GitHub_Trending/vl/vllm-omni本文以 vLLM-Omni 仓库内置的 Ming 密集 0.5B 离线推理示例为主线系统讲解如何通过end2end.py驱动两阶段 TTS 流水线覆盖 11 种内置用例风格合成、零样本克隆、播客多说话人生成、BGM 音乐生成、文本转音频事件等的完整配置与运行方式。读完本文你将掌握 Ming-omni-tts 的提示词组装原理、ming_tts.yaml部署配置的每个字段含义、阻塞/异步流式两种执行路径的差异以及如何产出 WAV 音频、统计日志与运行清单manifest。示例概览一条命令跑通端到端 Ming 语音合成examples/offline_inference/text_to_speech/ming_tts/目录下的示例与仓库其余 TTS 示例如 qwen3_tts、cosyvoice3不同它直接复用仓库内的 Ming prompt 组装辅助函数build_ming_dense_prompt而不是示例自带的简化封装因此请求结构与真实集成路径完全一致。该目录共包含三个文件文件用途end2end.py驱动脚本CLI 参数解析、用例加载、提示词构造、整体编排约 150 行cases.yaml全部 11 个内置用例定义prompt、text、instruction、参考音频标志、流程控制项runner.py引擎管理与音频输出流式 阻塞两条路径从入口脚本可以看到整体执行链路解析参数 → 用AutoTokenizer.from_pretrained加载分词器 →_build_prompt_payload组装提示词 →build_sampling_params构造两阶段采样参数 →run_generation分发到阻塞或流式路径 → 写 WAV 文件 → 可选写出 manifest JSON。模型与两阶段流水线架构Ming dense 0.5B默认模型为inclusionAI/Ming-omni-tts-0.5B在本示例中被组织为两阶段离线流水线Stage 0基于 Qwen2 的自回归AR生成带 Ming prompt 格式与内联流程控制Stage 1音频 VAE 解码输出单声道 44.1 kHz波形config_ming_tts.py负责将检查点的 HuggingFace 配置字段LLM、DiT、聚合器、AudioVAE、token id适配为 vLLM-Omni 可用的扁平配置。从config_ming_tts.py 可以看到MingTTSConfig会读取llm_config、ditar_config、aggregator_config、audio_tokenizer_config四个子配置并根据 Stage-0 LLM 骨干家族自动判定变体denseQwen2或 moebailing_moemodel_typedense的 HuggingFace 兼容性保留在MingDenseConfig中。关键架构常量来自 constants.py常量值含义SAMPLE_RATE44100输出采样率HzAUDIO_FRAME_HOP882AudioVAE 编码帧 hopLATENT_DIM64音频 latent 维度PATCH_SIZE/VAE_PATCH_SIZE4 / 4AR patch 与 VAE patch 尺寸HISTORY_PATCH_SIZE32历史 patch 窗口SPEAKER_EMBEDDING_DIM192CampPlus 说话人嵌入维度LLM_HIDDEN_SIZE896Stage-0 LLM 隐藏层宽度DEFAULT_CFG/DEFAULT_SIGMA/DEFAULT_TEMPERATURE2.0 / 0.25 / 0.0FlowLoss 采样默认值部署配置vllm_omni/deploy/ming_tts.yamlvllm_omni/deploy/ming_tts.yaml 是示例唯一的部署配置文件它选择 vLLM-Omni 流水线与阶段运行时拓扑连接器、异步分块、内存限制、采样默认值同时支持两种执行模式阻塞 eagerasync_chunk: false语义下的阻塞路径与异步分块 eager默认async_chunk: true。核心字段解读pipeline: ming_ttsHF config 报告model_typedense且无architectures自动探测会失效此键直接路由到正确的流水线注册项见StageConfigFactory.create_from_model的 deploy-config 探测逻辑async_chunk: true默认开启异步分块流式传输dtype: bfloat16全流水线使用 bf16 精度connectors.connector_of_shared_memorySharedMemoryConnectorlatent_chunk_size: 25、initial_latent_chunk_size: 4、latent_left_context: 0负责 Stage 0 → Stage 1 的 latent 分块搬运stages[0]max_num_seqs: 1、gpu_memory_utilization: 0.45、max_model_len: 8192、devices: 0默认采样temperature: 0.0 / top_p: 1.0 / top_k: -1 / max_tokens: 512 / detokenize: truestages[1]gpu_memory_utilization: 0.25、max_tokens: 1、detokenize: false纯解码不反 tokenize。环境准备与依赖按平台要求安装 vLLM-Omniuv pip install -e .Ming 离线示例不要求单独安装上游 Ming 包。参考音频用例复用仓库依赖完成音频加载、重采样与 CampPlus 说话人提取在文档记录的 ROCm 环境中包括soundfile、torchaudio、onnxruntime-rocm。测试环境的完整摘要见仓库配方 recipes/inclusionAI/Ming-omni-tts.md其中记录了 1×AMD MI300X / ROCm 7.2 与 1×H100 / CUDA 13.0 两种已验证环境的软件版本、Docker 镜像与启动命令。11 种内置用例详解cases.yaml覆盖了上游 dense 0.5B cookbook 中可干净映射到当前示例的全部面每个用例由prompt系统提示前缀、text生成文本、instructionMing 指令可为字符串或结构化 dict、max_decode_steps最大解码步数以及若干流程控制字段组成。以下按零说话人与参考音频两类展开用例类型说明参考输入style零说话人风格化语音ASMR 耳语等创意风格无ip零说话人IP 音色合成如“灵小甄”无bgm零说话人纯音乐生成含 Genre/Mood/Instrument/Theme/Duration 描述无tta零说话人文本转音频事件带 FlowLoss 控制无emotion参考音频语音 情感控制1 个basic参考音频语速/基频/音量控制1 个dialect参考音频方言控制如“广粤话”1 个zero_shot参考音频带显式转写的零样本克隆1 个音频 1 段转写podcast参考音频多参考对话生成自动提取说话人嵌入≥2 个speech_bgm参考音频语音 背景音乐条件BGM 含 Genre/Mood/Instrument/Theme/SNR1 个speech_sound参考音频语音 环境音条件BGM.ENV如 Birds chirping1 个从 cases.yaml 可以看到各用例的具体指令设计例如style用自由文本指令描述 ASMR 耳语风格basic用结构化指令{语速:快速,基频:中,音量:中}podcast的prompt_text中通过speaker_1:/speaker_2:标签对齐多说话人转写。tta额外指定了cfg: 4.5、sigma: 0.3、temperature: 2.5三个 FlowLoss 采样控制项会通过运行时控制字典透传。指令组装与提示词构造原理end2end.py中的_build_prompt_payload见 end2end.py会把用例字段、CLI 覆盖项、参考波形与说话人嵌入一起交给 prompt_assembly.py 的build_ming_dense_prompt处理指令序列化create_instruction将 dict 指令填充到BASE_CAPTION_TEMPLATE含 序号/说话人/方言/风格/语速/基频/音量/情感/BGM/IP 等槽位后序列化为 JSON时长感知的解码步数resolve_effective_runtime_controls会从text中解析Duration: Ns正则Duration:\s*([0-9](?:\.[0-9])?)\s*s并按samples_per_decode_step AUDIO_FRAME_HOP × PATCH_SIZE × VAE_PATCH_SIZE估算min/max_decode_steps窗口目标步数 ±3prompt token 序列build_dense_prompt_token_ids组装system/user轮次、说话人占位speaker_N:|vision_start||vision_pad||vision_end|、指令末尾接|endoftext|、参考转写 token、audio起始符与audioPatch占位 latent token说话人嵌入coerce_speaker_embeddings统一处理单个/多个 192 维向量use_zero_spk_emb: true时style、ip使用零嵌入走零说话人路径运行时控制max_decode_steps/cfg/sigma/temperature等被打入additional_information张量随请求一起传给 Stage-0。快速开始各用例运行命令零说话人风格合成python examples/offline_inference/text_to_speech/ming_tts/end2end.py \ --case style \ --deploy-config vllm_omni/deploy/ming_tts.yaml \ --enforce-eager带转写的零样本克隆python examples/offline_inference/text_to_speech/ming_tts/end2end.py \ --case zero_shot \ --ref-audio /path/to/10002287-00000094.wav \ --ref-text 在此奉劝大家别乱打美白针。 \ --deploy-config vllm_omni/deploy/ming_tts.yaml \ --enforce-eager情感控制语音python examples/offline_inference/text_to_speech/ming_tts/end2end.py \ --case emotion \ --ref-audio /path/to/emotion_prompt.wav \ --deploy-config vllm_omni/deploy/ming_tts.yaml \ --enforce-eager播客多说话人生成python examples/offline_inference/text_to_speech/ming_tts/end2end.py \ --case podcast \ --ref-audio-paths /path/to/CTS-CN-F2F-2019-11-11-423-012-A.wav /path/to/CTS-CN-F2F-2019-11-11-423-012-B.wav \ --deploy-config vllm_omni/deploy/ming_tts.yaml \ --enforce-eager脚本会使用 Ming 模型的campplus.onnx自动为每段参考 WAV 提取一个 192 维说话人嵌入。若已有预计算的说话人嵌入可用如下参数覆盖提取过程--speaker-embedding /path/to/podcast_speaker_embeddings.json其中 JSON 是一个说话人嵌入列表每位说话人对应一个 192 维向量。底层实现在 end2end.pySpeakerEmbeddingExtractor(args.model, allow_downloadTrue).extract_many(paths)在引擎构建前完成提取此时尚未预取campplus.onnx。文本转音频事件TTApython examples/offline_inference/text_to_speech/ming_tts/end2end.py \ --case tta \ --deploy-config vllm_omni/deploy/ming_tts.yaml \ --enforce-eager异步分块流式输出python examples/offline_inference/text_to_speech/ming_tts/end2end.py \ --case basic \ --ref-audio /path/to/10002287-00000095.wav \ --streaming \ --deploy-config vllm_omni/deploy/ming_tts.yaml \ --enforce-eager--streaming使用AsyncOmni与异步分块部署配置通过async for stage_output in engine.generate(...)增量消费音频块见 runner.py并统计首包延迟TTFP与块间平均间隔。注意流式模式当前仅支持单进程单 prompt--num-prompts 1时请使用阻塞模式。收集运行时统计与运行清单python examples/offline_inference/text_to_speech/ming_tts/end2end.py \ --case style \ --deploy-config vllm_omni/deploy/ming_tts.yaml \ --enforce-eager \ --enable-stats \ --stats-log-file output_audio/ming_style_pipeline.log \ --metadata-json output_audio/ming_style_manifest.json启用统计后脚本可额外写出统计日志文件与 manifest JSON含每个输出的元数据、阶段耗时、峰值内存流式模式下还包含客户端延迟指标manifest 的字段结构见 runner.py 的build_manifest。参考音频素材Reference Fixtures上游 Ming cookbook 使用inclusionAI/Ming-omni-tts/data/wavs中的公开音频素材各用例对应关系如下素材适用用例10002287-00000094.wavzero_shot10002287-00000095.wavbasicemotion_prompt.wavemotionyue_prompt.wavdialect00000309-00000300.wavspeech_bgm、speech_soundCTS-CN-F2F-2019-11-11-423-012-A.wav/...-B.wavpodcast验证矩阵与实测输出仓库面向自身的示例旨在覆盖本地 Ming 验证脚本使用的同一套 dense TTS 工作流各用例在两种执行模式下的覆盖情况如下用例阻塞deploy/ming_tts.yaml异步分块deploy/ming_tts.yaml额外输入style是可选冒烟测试无ip是可选冒烟测试无bgm是可选冒烟测试无tta是可选冒烟测试无emotion是是--ref-audio emotion_prompt.wavbasic是是--ref-audio 10002287-00000095.wavdialect是是--ref-audio yue_prompt.wavzero_shot是是--ref-audio 10002287-00000094.wav --ref-text ...podcast是是两个--ref-audio-pathsspeech_bgm是是--ref-audio 00000309-00000300.wavspeech_sound是是--ref-audio 00000309-00000300.wav以下测量值来自早期的L4 CUDA 验证非 ROCm 基准结果。默认async_chunk模式在每个用例上都与阻塞模式保持了完全一致的输出帧数与 Stage-1 patch 数用例阻塞 frames / patches / sec异步分块 frames / patches / secstyle409248 / 29 / 9.28409248 / 29 / 9.28ip183456 / 13 / 4.16183456 / 13 / 4.16bgm1326528 / 94 / 30.081326528 / 94 / 30.08tta465696 / 33 / 10.56465696 / 33 / 10.56emotion324576 / 23 / 7.36324576 / 23 / 7.36basic211680 / 15 / 4.80211680 / 15 / 4.80dialect239904 / 17 / 5.44239904 / 17 / 5.44zero_shot409248 / 29 / 9.28409248 / 29 / 9.28podcast437472 / 31 / 9.92437472 / 31 / 9.92speech_bgm296352 / 21 / 6.72296352 / 21 / 6.72speech_sound352800 / 25 / 8.00352800 / 25 / 8.00这些数字仅作为两条执行路径输出一致性的验证记录不代表特定硬件的性能基准。此外配方文档中记录了一次 ROCm 7.2 / MI300X 的离线冒烟运行basic用例产出 44.1 kHz 单声道 WAV、时长 4.80 秒、RMS 0.1449、峰值绝对振幅 0.8621首请求耗时 20.406 秒实时因子 4.25两个阶段的权重加载分别占用 1.31 GiB 与 1.47 GiB全设备单秒最大内存采样 91.05 GiB含预留 KV cacheAR 阶段选择了TRITON_ATTN。关键命令行参数参数说明--modelHuggingFace 仓库名或本地 Ming 检查点路径默认inclusionAI/Ming-omni-tts-0.5B--deploy-config部署配置 YAML使用vllm_omni/deploy/ming_tts.yaml--case内置演示用例style为默认值--ref-audio单个参考 wav 路径克隆类用例--ref-audio-paths多个参考 wav 路径podcast使用--ref-text参考转写zero_shot必需--instructions自由格式 Ming 指令字符串--instruction-json结构化 Ming 指令 JSON如{方言:广粤话}--speaker-embedding包含 192 维说话人嵌入的 JSON 文件--extract-speaker-embeddings强制从给定参考音频路径执行 CampPlus 说话人提取--max-decode-steps覆盖ming_max_decode_steps--num-prompts同一用例重复 N 次N1 时输出文件带索引--streaming使用AsyncOmni与 async_chunk 传输--enforce-eager推荐用于 Ming dense非 eager 超出支持范围--enable-stats/--log-stats启用 vLLM-Omni 每请求统计日志--stats-log-file统计日志可选路径--metadata-json运行清单 JSON 可选路径--stage-init-timeout每阶段初始化超时秒默认 300--init-timeout总初始化超时秒默认 600--batch-timeout批处理超时秒默认 5--worker-backendmulti_process或ray--ray-address使用--worker-backend ray时的 Ray 集群地址其余可用参数来自 end2end.py 的解析器还包括--text覆盖用例文本、--prompt覆盖系统提示前缀、--output-dir默认output_audio、--output-name自定义输出文件名、--trust-remote-code、--shm-threshold-bytes默认 65536等。引擎侧参数语义--stage-init-timeout/--init-timeout/--batch-timeout会经build_engine_kwargs见 runner.py传入Omni/AsyncOmni引擎构造--log-stats开启时还会追加log_file。两阶段采样参数由build_sampling_params构造Stage-0 为temperature0.0、max_tokensmax_decode_steps1、stop_token_ids[TEXT_EOS_TOKEN_ID]即151669的text_eosStage-1 为temperature0.0、max_tokens1对应 VAE 解码的单步输出。注意end2end.py在main()中会设置VLLM_WORKER_MULTIPROC_METHODspawn。输出产物约定每次运行写一个单声道 44.1 kHz WAV文件默认输出目录output_audio/默认文件名ming_case.wav--num-prompts 1时按ming_case_00000.wav、ming_case_00001.wav… 索引音频写出时先 clamp 到 [-1, 1] 再量化到 16-bit PCM见write_wavrunner.py启用统计时还可写出统计日志文件如ming_style_pipeline.log与 manifest JSON——后者包含每个输出的元数据request_id、stage_id、stage 耗时、峰值内存、采样率/样本数/时长/最大振幅、prompt 信息与说话人嵌入形状以及流式模式下的客户端延迟指标。使用注意事项style与ip是零说话人路径不需要参考片段emotion、basic、dialect、speech_bgm、speech_sound各需一个参考片段zero_shot需要同时提供--ref-audio与--ref-textpodcast至少需要两个参考片段通过--ref-audio-paths并自动为每个参考片段提取一个说话人嵌入--speaker-embedding既可包含单个 192 维向量也可包含多个 192 维向量的列表已验证运行均使用--enforce-eager早期 L4 验证中 Ming 音频 VAE 使用 SDPA 而非 FlashAttention2——后者是可用时的首选默认后端流式模式--streaming每次进程调用仅支持一个 prompt多 prompt 请使用阻塞模式。如需在线服务形态OpenAI 兼容/v1/audio/speechAPI与 16.8B MoE 变体部署可进一步参考 recipes/inclusionAI/Ming-omni-tts.md 与仓库内同名在线示例若需深入模型实现可查看 vllm_omni/model_executor/models/ming_tts/ 下的ming_tts.py模型组装、ming_tts_llm.pyStage-0 AR LLM、ming_tts_audio_vae.pyStage-1 VAE 解码与speaker_extractor.pyCampPlus 说话人嵌入等模块。【免费下载链接】vllm-omniA framework for efficient model inference with omni-modality models项目地址: https://gitcode.com/GitHub_Trending/vl/vllm-omni创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考