Deep Research Report

vLLM-Omni 深度研究:
使用方法完全指南

项目介绍、安装、核心 API、CLI、API 服务器、扩散模型、多阶段 LLM

📅 2026-05-06 📦 v0.18.0 🔗 github.com/vllm-project/vllm-omni

2. 安装与入门

2.1 三种安装方式对比

方式 命令 适用场景 版本 来源验证
pip 安装
(预编译 wheels)
pip install vllm-omni 快速部署、生产环境 稳定版 A / C
源码安装 git clone && pip install -e . 开发调试、尝鲜最新特性 最新 A / B / C
Docker 部署 docker pull vllm/vllm-omni 容器化生产部署 稳定版 C
显式设备安装 VLLM_OMNI_TARGET_DEVICE=rocm pip install vllm-omni AMD / NPU / CPU 等非 CUDA 设备 稳定版 C

推荐: 生产环境优先使用 pip install vllm-omni;开发调试使用源码安装。

2.2 系统要求

要求 说明
操作系统Linux(推荐,不支持原生 Windows)
Python3.10 – 3.13(推荐 3.12)
GPU (CUDA)计算能力 7.0+(V100, T4, RTX20xx, A100, L4, H100)
GPU (ROCm)已验证 gfx942 (MI300)
NPU华为 Ascend (CANN)

2.3 快速入门三步走

步骤 1 — 安装

pip install vllm-omni

步骤 2 — Python API 调用(离线推理)

# 创建编排器并执行推理
from vllm_omni import Omni
omni = Omni(model="Qwen/Qwen3-Omni-30B-A3B-Instruct", omni=True)
outputs = omni.generate({"prompt": "你好,请介绍一下自己"})
print(outputs)

步骤 3 — 启动在线服务

# 通过 CLI 启动 OpenAI 兼容 API 服务
vllm serve Qwen/Qwen3-Omni-30B-A3B-Instruct --omni --port 8091
⚠️ 重要警告:Qwen2.5-Omni 需要特殊分支

官方文档明确指出,Qwen2.5-Omni 需要使用特定的 vLLM 分支 qwen2_omni_public_v1不能直接使用标准 vLLM-Omni。 本报告在 Web 搜索结果和源码分析中均未发现此限制,这是一个可能导致用户踩坑 的重要信息。如果计划使用 Qwen2.5-Omni,请务必确认已切换到正确分支。

3. 核心 API 使用(Omni / AsyncOmni)

3.1 架构层次

三源交叉验证确认的一致架构层次:

包入口: from vllm_omni import Omni, AsyncOmni(惰性导入) 编排层: Omni / AsyncOmni(继承自 OmniBase) 引擎层: AsyncOmniEngine → StageEngineCoreClient x N 模型执行: OmniLLM(自回归) / OmniDiffusion(扩散)

3.2 Omni(同步编排器)vs AsyncOmni(异步编排器)

对比维度 Omni AsyncOmni 来源
主要用途 离线批处理、CLI 工具 在线 serving、FastAPI 集成 A / B / C
接口类型 同步 Generator 异步 AsyncGenerator B / C
请求处理 批量(多个 prompts) 单请求每次调用 A / B
输出模式 强制 FINAL_ONLY 支持流式增量 B
请求取消 不支持 abort() 方法 A / B
暂停 / 恢复 不支持 pause_generation() / resume_generation() B / C
进度条 use_tqdm 参数 B
引擎交互 轮询 try_get_output() 异步通知 AsyncOmniEngine B

3.3 Omni.generate() 参数详解

# 函数签名
def generate(
    self,
    prompts: OmniPromptType | Sequence[OmniPromptType],   # 输入类型
    sampling_params_list: OmniSamplingParams
                         | Sequence[OmniSamplingParams]
                         | None = None,
    *,
    py_generator: bool = False,        # True=流式, False=批量
    use_tqdm: bool | Callable = True,  # 进度条
) -> Generator[OmniRequestOutput, None, None] | list[OmniRequestOutput]:
参数 类型 说明
promptsOmniPromptType | Sequence[OmniPromptType]单个提示或批量提示。支持文本字符串或多模态字典。
sampling_params_listOmniSamplingParams | Sequence[...] | None采样参数,可单组或按 prompt 分别指定。
py_generatorboolTrue 时返回流式 Generator;False 时一次性返回列表。
use_tqdmbool | Callable是否显示进度条(默认启用),亦可传入自定义回调。

3.4 AsyncOmni.generate() 参数详解

# 函数签名
async def generate(
    self,
    prompt: OmniPromptType
            | AsyncGenerator[StreamingInput, None]
            | list[OmniPromptType],
    sampling_params: Any = None,
    request_id: str = "",
    *,
    prompt_text: str | None = None,
    lora_request: Any = None,
    tokenization_kwargs: dict[str, Any] | None = None,
    sampling_params_list: Sequence[OmniSamplingParams] | None = None,
    output_modalities: list[str] | None = None,  # 如 ["text", "audio"]
    trace_headers: Mapping[str, str] | None = None,
    priority: int = 0,
    data_parallel_rank: int | None = None,
    reasoning_ended: bool | None = None,
) -> AsyncGenerator[OmniRequestOutput, None]:

3.5 多模态输入格式

Prompt 字典结构,支持文本、图像、音频、视频的任意组合:

prompt = {
    # 文本提示(含对话模板标记)
    "prompt": "<|im_start|>system\n...<|im_end|>\n"
              "<|im_start|>user\n...<|im_end|>\n"
              "<|im_start|>assistant\n",

    # 多模态数据
    "multi_modal_data": {
        "image": pil_image,                # PIL.Image (RGB)
        "audio": (audio_signal, sr),       # Tuple[np.ndarray, int]
        "video": video_frames,             # np.ndarray
    },

    # 输出模态控制
    "modalities": ["text", "audio"],

    # 多模态处理器参数
    "mm_processor_kwargs": {
        "use_audio_in_video": True,
    },

    # 扩散模型专用:负提示词
    "negative_prompt": "...",

    # 每 prompt 模态数量限制
    "limit_mm_per_prompt": {"image": 1, "audio": 1, "video": 1},
}

3.6 输出数据结构

OmniRequestOutput 包含 17 个核心字段:

@dataclass
class OmniRequestOutput:
    request_id: str
    finished: bool
    stage_id: int | None
    final_output_type: str            # "text" | "image" | "audio" | "latents"
    request_output: RequestOutput | None    # 管道模式输出
    images: list[Image.Image]         # 扩散模式输出
    prompt: OmniPromptType | None
    latents: torch.Tensor | None
    trajectory_latents: torch.Tensor | None
    trajectory_timesteps: torch.Tensor | None
    metrics: dict[str, Any]
    stage_durations: dict[str, float]
    peak_memory_mb: float
    error: str | None

便利属性(由核心字段派生): multimodal_outputcustom_outputnum_imagesis_diffusion_outputis_pipeline_output

3.7 采样参数类型

阶段类型 参数类 来源
LLM 阶段 vllm.sampling_params.SamplingParams A / B / C
扩散阶段 vllm_omni.inputs.data.OmniDiffusionSamplingParams A / B

OmniDiffusionSamplingParams 参数说明

参数 说明
height / width图像尺寸(像素)
num_inference_steps去噪步数
guidance_scaleCFG 引导系数
true_cfg_scaleQwen-Image 专用引导系数
generatortorch.Generator(随机种子控制)
num_outputs_per_prompt每 prompt 输出数量
extra_args附加参数(timesteps_shiftlora_request 等)

4. CLI 命令行详解

4.1 命令入口

CLI 入口位于 vllm_omni/entrypoints/cli/main.py,通过 --omni 标志触发 Omni 模式。当未检测到 --omni 时,拦截器将命令转发给标准 vLLM CLI。

vllm serve Qwen/Qwen3-Omni-30B-A3B-Instruct --omni

子命令:servebenchmark

4.2 参数分类速查

基础服务参数

参数类型默认值说明
--omniflagfalse启用 Omni 模式(必选)
--portint8000HTTP 服务端口
--hoststrlocalhost监听地址
--task-typestrNoneTTS 类型: CustomVoice / VoiceDesign / Base

阶段配置参数

参数类型默认值说明
--stage-configs-pathstrNone[已废弃] 阶段配置 YAML 路径
--deploy-configstrNone新格式部署配置 YAML 路径
--stage-overridesJSONNone逐阶段 JSON 覆盖
--async-chunkboolNone覆盖部署 YAML 的 async_chunk
--stage-idintNone选择启动单个阶段(headless)
--stage-init-timeoutint300单阶段初始化超时(秒)
--init-timeoutint600总初始化超时(秒)

分布式参数

参数缩写类型默认值说明
--worker-backend-strmulti_processmulti_process / ray
--ray-address-strNoneRay 集群地址
--omni-master-address-omastrNone编排器主机名
--omni-master-port-ompintNone编排器端口
--shm-threshold-bytes-int65536共享内存阈值
--headless-flag-无头模式

扩散模型并行参数

参数别名类型默认值说明
--num-gpus-intNone扩散 GPU 数量
--usp--ulysses-degreeint1Ulysses 序列并行度
--ulysses-mode-strstrictUlysses 模式
--ring--ring-degreeint1环形序列并行度
--cfg-parallel-size-int1CFG 并行度(1 或 2)
--tensor-parallel-size-int1张量并行度
--vae-patch-parallel-size-int1VAE Patch 并行度
--use-hsdp-flagfalse启用混合分片数据并行
--hsdp-shard-size-int-1分片 GPU 数(-1 = auto)
--hsdp-replicate-size-int1副本组数

缓存优化参数

参数类型默认值说明
--cache-backendstrnonetea_cache / cache_dit / none
--cache-configJSONNone缓存配置 JSON
--enable-cache-dit-summaryflagfalse启用 Cache-DiT 统计
--step-executionflagfalse逐步扩散执行
--enable-sleep-modeflagfalse睡眠模式 GPU 内存池

内存优化参数

参数类型默认值说明
--vae-use-slicingflagfalseVAE 切片(防 OOM)
--vae-use-tilingflagfalseVAE 平铺(防 OOM)
--enable-cpu-offloadflagfalseCPU 卸载
--enable-layerwise-offloadflagfalse逐层 DiT 卸载

视频模型参数

参数类型默认值说明
--boundary-ratiofloatNone视频高低 DiT 分割比
--flow-shiftfloatNone调度器 flow_shift

4.3 常用 CLI 命令示例

# 1. 启动文本/多模态 LLM 服务
vllm serve Qwen/Qwen3-Omni-30B-A3B-Instruct --omni --port 8091

# 2. 启动文生图服务
vllm serve Qwen/Qwen-Image --omni --port 8091

# 3. 启动文生视频服务(Wan2.2)
vllm serve Wan-AI/Wan2.2-T2V-A14B-Diffusers --omni --port 8098 \
    --boundary-ratio 0.875 --flow-shift 5.0

# 4. 启动 TTS 服务
vllm-omni serve Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice \
    --deploy-config vllm_omni/deploy/qwen3_tts.yaml \
    --host 0.0.0.0 --port 8091 --gpu-memory-utilization 0.9 \
    --trust-remote-code --omni

# 5. 多 GPU 并行扩散模型
vllm serve Qwen/Qwen-Image --omni \
    --num-gpus 4 \
    --tensor-parallel-size 2 \
    --ulysses-degree 2 \
    --cfg-parallel-size 2 \
    --use-hsdp

# 6. Headless 模式(运行单个阶段)
vllm serve Qwen/Qwen2.5-Omni-7B --omni --headless --stage-id 0 \
    --omni-master-address 192.168.1.10 --omni-master-port 50051

5. OpenAI 兼容 API

5.1 完整端点列表

端点方法功能适用模式
/v1/chat/completionsPOST文本/多模态聊天所有模式
/v1/images/generationsPOST文生图(DALL-E 兼容)Diffusion / Multi-stage
/v1/images/editsPOST图生图编辑Diffusion / Multi-stage
/v1/videos/generationsPOST视频生成Diffusion
/v1/audio/speechPOST文本转语音 (TTS)LLM / Multi-stage
/v1/audio/speech/batchPOST批量语音生成LLM
/v1/audio/generatePOST音频生成Diffusion
/healthGET健康检查所有模式
/v1/modelsGET列出可用模型所有模式

5.2 Chat Completions API 详解

文本对话

curl -s http://localhost:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "Qwen/Qwen2.5-Omni-7B",
    "messages": [{"role": "user", "content": "What is 2+2?"}],
    "max_tokens": 50,
    "stream": false
  }'

多模态输入

支持 image_urlaudio_urlvideo_urltext 四种内容类型。

{
  "model": "Qwen/Qwen3-Omni-30B-A3B-Instruct",
  "messages": [
    {"role": "system", "content": [{"type": "text", "text": "You are Qwen, a virtual human..."}]},
    {"role": "user", "content": [
      {"type": "audio_url", "audio_url": {"url": "https://example.com/audio.wav"}},
      {"type": "image_url", "image_url": {"url": "data:image/jpeg;base64,XXXXX"}},
      {"type": "text", "text": "What is this content?"}
    ]}
  ],
  "modalities": ["text", "audio"],
  "stream": false
}

Omni 扩展参数

参数位置类型说明
modalities请求体list[str]输出模态: ["text"], ["audio"], ["text","audio"]
speakerextra_bodystringTTS 说话人选择
mm_processor_kwargsextra_bodydict多模态处理器参数
stream请求体bool启用流式输出

5.3 图像生成 API (DALL-E 兼容)

curl 示例

curl -X POST http://localhost:8091/v1/images/generations \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "a dragon laying over the spine of the Green Mountains of Vermont",
    "size": "1024x1024",
    "n": 1,
    "seed": 42,
    "num_inference_steps": 30,
    "guidance_scale": 7.5,
    "response_format": "b64_json"
  }'

参数说明

参数类型默认值说明
promptstring必填图像描述
sizestring模型默认如 "1024x1024"
nint1生成数量 (1-10)
response_formatstring"b64_json"仅支持 b64_json
negative_promptstringnull负面提示
num_inference_stepsint模型默认扩散步数
guidance_scalefloat模型默认CFG 引导尺度
true_cfg_scalefloat模型默认True CFG 尺度
seedintnull随机种子

Python SDK 示例

from openai import OpenAI

client = OpenAI(base_url="http://localhost:8091/v1", api_key="EMPTY")
response = client.images.generate(
    model="Qwen/Qwen-Image",
    prompt="A cat sitting on a windowsill",
    n=1, size="1024x1024", response_format="b64_json",
)

5.4 视频生成 API

vLLM-Omni 的 /v1/videos 端点支持异步视频生成,分为三步流程。

步骤一:提交生成请求

curl -sS -X POST "${BASE_URL}/v1/videos" \
  -F "prompt=Two anthropomorphic cats in comfy boxing gear fighting on a spotlighted stage." \
  -F "seconds=2" -F "size=832x480" -F "fps=16" \
  -F "num_inference_steps=40" -F "guidance_scale=4.0" \
  -F "boundary_ratio=0.875" -F "flow_shift=5.0" -F "seed=42"

步骤二:查询生成状态

curl -sS "${BASE_URL}/v1/videos/${video_id}"

步骤三:下载生成的视频

curl -sS -L "${BASE_URL}/v1/videos/${video_id}/content" -o output.mp4

5.5 TTS API

三种任务类型

task_type参数说明示例模型
CustomVoicevoice, language预定义音色Qwen3-TTS-CustomVoice
VoiceDesigninstructions描述想要的音色Qwen3-TTS-VoiceDesign
Baseref_audio, ref_text声音克隆Qwen3-TTS-Base

curl 示例(CustomVoice)

curl -X POST http://localhost:8091/v1/audio/speech \
  -H "Content-Type: application/json" \
  -d '{"input": "Hello, how are you?", "voice": "vivian", "language": "English"}' \
  --output output.wav

支持格式:wav, mp3, pcm, flac, aac, opus

5.6 图像编辑 API

curl -X POST http://localhost:8000/v1/images/edits \
  -F "model=xxx" -F "image=@gift-basket.png" \
  -F "mask=@mask.png" -F "prompt='a bear wearing sportwear, holding a basketball'" \
  -F "size=1024x1024" -F "output_format=png"

5.7 流式响应处理

from openai import OpenAI
import base64

client = OpenAI(base_url="http://localhost:8091/v1", api_key="EMPTY")
response = client.chat.completions.create(
    messages=[system_msg, user_msg],
    model="Qwen/Qwen3-Omni-30B-A3B-Instruct",
    modalities=["text", "audio"],
    stream=True,
)

for chunk in response:
    for choice in chunk.choices:
        if chunk.modality == "audio":
            audio_data = base64.b64decode(choice.delta.content)
            with open("output.wav", "wb") as f:
                f.write(audio_data)
        elif chunk.modality == "text":
            print(choice.delta.content, end="")

6. 扩散模型(图像/视频/音频)

6.1 完整支持模型列表

三方来源综合:B(源码注册表)最为完整,收录 30+ Pipeline 类。A 覆盖约 20 个常用模型,C 覆盖约 25 个。

图像生成模型

模型 Pipeline 类 特点 来源
Qwen-Image QwenImagePipeline 双流 Transformer,完整特性 A/B/C
Qwen-Image-Edit QwenImageEditPipeline 图像编辑 B/C
Z-Image-Turbo ZImagePipeline 仅需 9 步推理 A/B
FLUX.1-dev FluxPipeline Stable Diffusion 变体 A/B/C
FLUX.2-klein Flux2KleinPipeline 最新版本 B/C
Stable-Diffusion-3.5 StableDiffusion3Pipeline SD3.5 中等模型 A/B
HunyuanImage-3.0 HunyuanImage3ForCausalMM 支持专家并行 A/B/C
Ovis-Image OvisImagePipeline 文本到图像 A/B
GLM-Image GlmImagePipeline 双阶段 pipeline A
BAGEL BagelPipeline MoT 架构 B/C
LongCat-Image - 长文本理解 A
DreamID-Omni DreamIDOmniPipeline 图像生成 B
DiffusersAdapter DiffusersAdapterPipeline HF 适配器 B

视频生成模型

模型 Pipeline 类 类型 来源
Wan2.2-T2V WanPipeline 文生视频 A/B/C
Wan2.2-I2V WanImageToVideoPipeline 图生视频 A/B/C
HunyuanVideo-1.5 HunyuanVideo15Pipeline 文生视频 B/C
LTX-2 LTX2Pipeline 文生视频 B/C
Helios HeliosPipeline 文生视频 B/C

音频 / TTS 模型

模型 架构类 类型 来源
Qwen3-TTS Qwen3TTSForConditionalGeneration 文本转语音 B/C
CosyVoice3 CosyVoice3Model 文本转语音 B/C
MiMo-Audio MiMoAudioForConditionalGeneration 音频理解/生成 B/C
Fish Speech S2 Pro FishSpeechSlowARForConditionalGeneration 文本转语音 B/C
Voxtral TTS VoxtralTTSForConditionalGeneration 文本转语音 B/C
Stable-Audio-Open StableAudioPipeline 文本到音频 B/C
AudioX AudioXPipeline 文本到音频 B
OmniVoice OmniVoicePipeline 语音生成 B

验证结论:B(源码注册表)最为完整,收录 30+ Pipeline 类。A 覆盖约 20 个常用模型。C 覆盖约 25 个。

6.2 扩散模型离线推理

以下示例演示使用 Omni 接口进行 Qwen-Image 图像生成推理:

from vllm_omni.entrypoints.omni import Omni
from vllm_omni.inputs.data import OmniDiffusionSamplingParams
import torch

omni = Omni(model="Qwen/Qwen-Image")

outputs = omni.generate(
    {
        "prompt": "a cup of coffee on the table",
        "negative_prompt": None,
    },
    OmniDiffusionSamplingParams(
        height=1024,
        width=1024,
        generator=torch.Generator("cuda").manual_seed(42),
        true_cfg_scale=4.0,
        guidance_scale=4.0,
        num_inference_steps=50,
        num_outputs_per_prompt=1,
    ),
)

# 提取图像
images = outputs[0].request_output.images
images[0].save("coffee.png")

来源:A/B 提供完整示例,C 确认 API 可用性。

6.3 扩散模型加速组件

加速类别 具体方法 效果 来源
缓存加速 Cache-DiT 显存减少 42%(1080P 视频) A/C
TeaCache 延迟降低 28%,内存效率 3x A/C
序列并行 Ulysses SP (all-to-all) 高分辨率图像 >1536px A/C
Ring Attention (P2P) 8 GPU 通信降低 60% A/C
模型并行 CFG-Parallel 正负分支跨设备 A/B
Tensor Parallelism 大模型分片 A/C
HSDP (FSDP2) 14B+ 超大模型 A/B
Expert Parallelism MoE 专家分片 B
编译优化 Torch.compile 算子融合,每步减少 15% A
内存优化 VAE Slicing/Tiling 防 OOM A/B/C
CPU Offload 减少显存 A/B/C
FP8/INT8/GGUF 量化 低精度推理 B

6.4 Cache-DiT & TeaCache 配置

Cache-DiT 配置

cache_config = {
    # DBCache 参数
    "Fn_compute_blocks": 1,
    "Bn_compute_blocks": 0,
    "max_warmup_steps": 4,
    "residual_diff_threshold": 0.24,     # 越高缓存越激进
    "max_continuous_cached_steps": 3,
    # TaylorSeer 参数
    "enable_taylorseer": False,
    "taylorseer_order": 1,
    # SCM (Step Computation Masking)
    "scm_steps_mask_policy": None,       # slow/medium/fast/ultra
    "scm_steps_policy": "dynamic",
}

TeaCache 配置

cache_config = {
    "rel_l1_thresh": 0.2,  # 累积相对 L1 距离阈值
}

来源:A 提供详细配置参数,C 提供背景说明。

7. 多阶段 LLM(Qwen2.5-Omni / Qwen3-Omni)

7.1 架构对比

维度 Qwen2.5-Omni Qwen3-Omni 来源
参数 7B 30B-A3B(每次激活 ~3B) A
架构 Dense Transformer MoE(专家混合) A/C
vLLM-Omni 兼容性 需特殊分支qwen2_omni_public_v1 原生支持 C 独有
安装复杂程度 复杂(需手动编译) 简单(pip install) C
阶段数 3 3 A/B/C

重要警告:C(官方文档)明确说明 Qwen2.5-Omni 需要特定的 vLLM 分支(qwen2_omni_public_v1),而 A 和 B 均未提及此限制。用户如果按照 A 或 B 的指南直接 pip install vllm-omni 并使用 Qwen2.5-Omni,可能会遇到兼容性问题。

7.2 三阶段推理流程

阶段 ID 名称 功能 输入 -> 输出 worker_type
0 Thinker 多模态理解(文本/图像/视频/音频) 多模态输入 -> 文本生成 ar
1 Talker 语音码生成 文本嵌入 -> RVQ 码 ar
2 Code2Wav 音频波形生成 RVQ 码 -> 24kHz 音频 generation

来源:A/B/C 一致。B 补充了 worker_type 细节。

7.3 完整离线推理示例

from vllm_omni.entrypoints.omni import Omni
from vllm.sampling_params import SamplingParams

# 初始化 Omni(Qwen3-Omni)
omni = Omni.from_cli_args(args, model="Qwen/Qwen3-Omni-30B-A3B-Instruct")

# 配置每阶段采样参数
thinker_sampling_params = SamplingParams(
    temperature=0.9, top_p=0.9, max_tokens=1200, seed=42,
)
talker_sampling_params = SamplingParams(
    temperature=0.9, top_k=50, max_tokens=4096, seed=42,
    detokenize=False, stop_token_ids=[2150],
)
code2wav_sampling_params = SamplingParams(
    temperature=0.0, max_tokens=4096*16, seed=42, detokenize=True,
)

sampling_params_list = [thinker_sampling_params, talker_sampling_params, code2wav_sampling_params]

# 执行生成(流式输出)
omni_generator = omni.generate(prompts, sampling_params_list, py_generator=True)

for stage_outputs in omni_generator:
    output = stage_outputs.request_output
    if stage_outputs.final_output_type == "text":
        text_output = output.outputs[0].text
        print(f"Text: {text_output}")
    elif stage_outputs.final_output_type == "audio":
        audio_tensor = output.outputs[0].multimodal_output["audio"]
        sf.write("output.wav", audio_tensor.detach().cpu().numpy(), samplerate=24000)

omni.close()

来源:A/B/C 一致,B 提供最完整的代码分析。

7.4 多模态标记格式

模型 图像标记 音频标记 视频标记
Qwen2.5-Omni <|vision_bos|><|IMAGE|><|vision_eos|> <|audio_bos|><|AUDIO|><|audio_eos|> <|vision_bos|><|VIDEO|><|vision_eos|>
Qwen3-Omni <|vision_start|><|image_pad|><|vision_end|> <|audio_start|><|audio_pad|><|audio_end|> <|vision_start|><|video_pad|><|vision_end|>

来源:A/B 一致。

7.5 阶段配置 YAML 结构

# qwen3_omni_moe.yaml
async_chunk: true
stages:
  - stage_id: 0
    model_stage: "thinker"
    model_arch: "Qwen3OmniMoeThinkerForConditionalGeneration"
    engine_input_source: []
    final_output: false
    worker_type: "ar"
  - stage_id: 1
    model_stage: "talker"
    model_arch: "Qwen3OmniMoeTalkerForConditionalGeneration"
    engine_input_source: [0]
    custom_process_input_func: "thinker2talker"
    final_output: false
    worker_type: "ar"
  - stage_id: 2
    model_stage: "code2wav"
    model_arch: "Qwen3OmniMoeCode2Wav"
    engine_input_source: [1]
    custom_process_input_func: "talker2code2wav"
    final_output: true
    final_output_type: "audio"
    worker_type: "generation"

来源:A/B 一致。注意 stage-configs-path 已废弃,新格式使用 deploy-config

7.6 Async Chunk 模式

Async Chunk 让下游阶段在上游阶段完成之前开始处理(阶段级并发),从而显著减少端到端延迟:

# 单 prompt
bash run_single_prompt_async_chunk.sh

# 多 prompt 带并发控制
bash run_multiple_prompts_async_chunk.sh --max-in-flight 4

# 自定义阶段配置
python end2end_async_chunk.py --query-type use_audio --deploy-config /path/to/config.yaml

来源:A 提供最完整的说明和示例。

8. 配置与调优

8.1 OmniModelConfig 扩展字段

源代码分析确认 OmniModelConfig 继承自 vLLM 的 ModelConfig,添加了以下关键字段:

字段 类型 默认值 说明
stage_idint0阶段标识符
async_chunkboolFalse异步块传输
model_stagestr"thinker"thinker / talker / code2wav
model_archstrNone模型架构名
worker_typestrNonear / generation
engine_output_typestrNone引擎输出类型
stage_connector_configdictSharedMemoryConnector阶段连接器配置
enable_sleep_modeboolFalse睡眠模式
task_typestrNoneTTS 任务类型

8.2 性能数据

指标 数据 来源
8xA100 集群,1B 参数文本+图像模型吞吐比传统串行方案提高 2.1xC
端到端延迟下降 35%C
任务完成时间 (JCT) 对比基线最高缩短 91.4%C
端到端吞吐提升 5.8xC
显存利用率提升最高 40%C

8.3 性能调优参数速查

参数 作用 推荐值 来源
--gpu-memory-utilizationGPU 显存利用率0.5 – 0.9A / C
--max-num-seqs最大序列数根据显存调整A / C
--enforce-eager禁用 CUDA 图(防止 OOM)显存不足时启用C
--swap-spaceCPU 交换空间0(禁用)C
micro_batch_size流水线并行微批大小8 – 32C
max_concurrent_requests最大并发请求数2x GPU 数量C

8.4 缓存策略选择推荐

模型类型 推荐缓存 配置方式
高分辨率图像 (>1536px) Ulysses SP + TeaCache --cache-backend tea_cache --usp
长视频 (1080P+) Cache-DiT --cache-backend cache_dit --enable-cache-dit-summary
大模型 (14B+) HSDP --use-hsdp
MoE 模型 Expert Parallelism --enable-expert-parallel
小模型 (<7B) 无需特殊配置 默认即可

9. 分布式部署与 OmniConnector

9.1 连接器类型与选择

连接器 适用场景 通信协议 来源
SharedMemoryConnector 单节点(默认) POSIX 共享内存(零拷贝) A / B / C
ZmqConnector Ray / Headless 模式 ZMQ + 握手服务器 C(B 未提及)
MooncakeStoreConnector 多节点 TCP TCP via Mooncake A / B / C
MooncakeTransferEngineConnector 多节点最快 RDMA / TCP + 托管内存池 A / B / C
YuanrongConnector 多节点 TCP / RDMA + etcd A / C(B 未提及)

9.2 自动选择逻辑

三方验证一致的自动选择规则:

条件 默认连接器
worker_backend == "multi_process" 且共址 SharedMemoryConnector
worker_backend == "ray"--headless ZmqConnector

9.3 连接器 YAML 配置示例

MooncakeTransferEngineConnector 的完整配置格式(来源 C):

runtime:
  connectors:
    mooncake_connector:
      name: MooncakeTransferEngineConnector
      extra:
        host: "192.168.1.10"
        metadata_server: "http://metadata:8000"
        master: "192.168.1.100:8001"
        segment: 1073741824    # 1GB
        localbuf: 536870912    # 512MB
        proto: "rdma"          # 或 "tcp"

9.4 分布式部署命令

主节点(结合 Ray)

vllm serve Qwen/Qwen3-Omni-30B-A3B-Instruct \
  --omni --worker-backend ray \
  --tensor-parallel-size 4 --pipeline-parallel-size 2

远程阶段(Headless 模式)

vllm serve Qwen/Qwen3-Omni-30B-A3B-Instruct \
  --omni --omni-master-address 192.168.1.100 \
  --omni-master-port 8000 --stage-id 2 --headless

分离式推理(Disaggregated)

# 启动路由器(前端)
python -m dynamo.vllm.omni --omni-router --stage-configs-path ./stage_configs/glm_image.yaml

# Stage 0 (AR) on GPU 0
CUDA_VISIBLE_DEVICES=0 python -m dynamo.vllm.omni \
  --omni --stage-id 0 --stage-configs-path ./stage_configs/glm_image.yaml

# Stage 1 (DiT) on GPU 1
CUDA_VISIBLE_DEVICES=1 python -m dynamo.vllm.omni \
  --omni --stage-id 1 --stage-configs-path ./stage_configs/glm_image.yaml

来源 A 提供了分离式推理最完整的示例。

9.5 EPDG 全分离路线图

来源 A 提及的 2026 Q1 路线图:

  • P0: Prefill-Decode (PD) 分离,适用于 Thinker / Talker 阶段
  • P1: Encoder-Prefill (E->P) 分离

10. 横纵交汇洞察

10.1 纵向发展脉络

vLLM-Omni 的发展路径清晰体现了从单一 LLM 推理到多模态统一 serving 的演进:

  1. v0.12.0rc1:多模态推理引擎的全面进化—首次整合 Qwen2.5-Omni 支持
  2. v0.18.0(2026 年 3 月):里程碑版本—重新基于上游 vLLM v0.18.0,重构 serving 入口架构,为 PD 解耦和多模态输出解耦奠定基础。增强音频/语音生产 serving,扩展至更多模型

这一演变路径表明:vLLM-Omni 正从"支持特定几款多模态模型"走向"通用多模态 serving 基础设施"。

10.2 横向竞争定位

vLLM-Omni 在多模态推理框架领域处于独特位置:

  • vLLM(纯文本推理)相比:vLLM-Omni 是多模态扩展,而非替代
  • Hugging Face diffusers(纯扩散推理)相比:vLLM-Omni 提供统一化 serving + 高性能优化
  • OpenAI API(商业服务)相比:vLLM-Omni 是开源自部署方案

vLLM-Omni 的核心差异化优势:

  1. 解耦流水线:与现有流水线框架(如 NVIDIA Dynamo)本质不同—完全解耦的设计让各阶段可独立扩展
  2. OmniConnector:灵活的张量传输层,支持共享内存、RDMA、Mooncake 等多种后端
  3. 多阶段协同:自回归 + 非自回归混合流水线(如 Thinker->Talker->Code2Wav)

10.3 优势与短板

优势

  • 架构创新度高(解耦流水线 + 动态路由 + 统一中间表示)
  • 模型覆盖范围持续扩大(30+ Pipeline 类)
  • 性能优化手段丰富(缓存、并行、量化、编译)
  • 开源 + Apache 2.0 许可证
  • 与 vLLM 生态深度集成

短板

  • Qwen2.5-Omni 兼容性受限:需要手动编译特殊分支,增加了用户的使用门槛
  • 文档完善度不足:中文文档滞后,部分 API 变更未及时更新(如 stage-configs-pathdeploy-config
  • 安装复杂度:从源码安装需要编译 CUDA 代码,对新手不够友好
  • 缺少统一的管理控制台

10.4 风险评估

风险 可能性 影响 说明
模型兼容性断裂 Qwen2.5-Omni 需要特殊分支,后续版本可能再次出现
上游 vLLM API 变更 vLLM-Omni 强依赖上游 vLLM,API 变更会导致连锁反应
文档滞后 参数废弃(如 stage-configs-path)未及时反映在文档中
社区生态碎片化 社区驱动 vllm-omni-skills 等第三方项目可能与主线不同步

10.5 未来推演

  • 最可能的剧本:vLLM-Omni 将持续跟随 vLLM 版本迭代,逐步实现 EPDG 全分离架构(PD 分离 → E->P 分离 → 全面跨节点),模型支持列表进一步扩大,成为多模态 serving 的事实标准。
  • 最危险的剧本:如果多模态模型架构快速分化(如各厂商采用不兼容的 Stage 定义),vLLM-Omni 的统一抽象层需要同步演进,可能导致架构复杂度大幅上升。
  • 最乐观的剧本:vLLM-Omni 完成 EPDG 全分离后,成为云原生多模态 AI 基础设施的核心组件,与 NVIDIA Dynamo 等方案形成互补生态。开源社区贡献活跃,模型支持达到 100+。

10.6 使用建议

  1. 首选 Qwen3-Omni:如果使用多阶段 LLM,优先选择 Qwen3-Omni(原生兼容 vLLM-Omni),避免 Qwen2.5-Omni 的特殊分支问题
  2. 使用 pip 安装:除非需要最新特性或进行开发,否则优先使用 pip install vllm-omni
  3. 优先使用 deploy-config:阶段配置使用新格式 --deploy-config 而非已废弃的 --stage-configs-path
  4. 视频生成注意参数:使用 Wan2.2 时务必设置 --boundary-ratio 0.875 --flow-shift 5.0
  5. 缓存加速按需启用:高分辨率图像/视频场景启用 Cache-DiT 或 TeaCache,可显著提升性能
  6. 分布式从单机开始:先验证单机 SharedMemoryConnector 工作正常,再扩展到多机 Mooncake/RDMA

分析结论

vLLM-Omni 是目前开源社区中最具潜力的全模态推理框架,其解耦流水线架构和丰富的模型支持使其在多模态 serving 领域占据独特定位。使用时应特别注意 Qwen2.5-Omni 的兼容性限制,优先选择原生支持的模型。文档和参数变更方面存在一定滞后,建议以源码分析为最终参考依据。

数据局限性说明

本报告的分析基于截至 2026 年 5 月的 vLLM-Omni 源码、官方文档及社区讨论。性能数据主要来源于项目内 Benchmark(来源 C),在特定硬件配置(8xA100)下测得,实际表现可能因硬件、模型版本及工作负载而异。文档内容可能滞后于代码变更,部分 API 参数可能已废弃或更新。

参考文献 / 来源致谢

  • 来源 A:vLLM-Omni 官方文档及 README 文件
  • 来源 B:vLLM-Omni 源码分析(model_executor / diffusion / distributed 模块)
  • 来源 C:vLLM-Omni 内部 Benchmark 及性能评估报告
  • 上游项目vLLM — 高性能 LLM 推理引擎
  • 社区vLLM-Omni GitHub 仓库