核心架构
sglang_omni/ # 主要业务逻辑
├── models/ # 模型实现(Qwen3-Omni 等)
├── preprocessing/ # 多媒体预处理(视频、音频、图像)
├── serve/ # OpenAI 兼容 API 服务
└── client/ # 客户端 SDK
主要能力
| 模态输入 | 模态输出 | 说明 |
|---|---|---|
| 文本 + 图像 | 文本 | MMMU 评测 |
| 文本 + 音频 | 文本 | MMSU 评测 |
| 文本 + 视频 | 文本 | Video-MME 评测 |
| 视频 + 音频问题 | 文本 | Video-AMME 评测 |
| 任意 | 文本 + 音频 | Talker(TTS)模式 |
关键模块说明
1. 模型层(qwen3_omni)
- Preprocessor:负责多媒体输入的加载、缓存 key 计算、HF 处理器调用
- ImageEncoder:视觉编码,支持图像和视频帧
- Thinker:主干 LLM,融合多模态 embedding
- Talker(可选):语音合成模块,实现文本→音频输出
- Pipeline Merge :在
merge.py中将各编码器输出对齐合并
2. 预处理层(preprocessing)
- 视频支持 torchcodec/torchvision 双后端,自动 fallback
- 支持从视频中提取音频(
use_audio_in_video) - 异步批量加载 URL/本地文件,基于内容哈希的缓存 key
3. 服务层(openai_api.py)
- 兼容 OpenAI
/v1/chat/completions接口 - 扩展参数:
video_fps、video_max_frames、video_min_pixels等
评测体系(benchmarks)
eval/
├── benchmark_omni_videomme.py # Video-MME
├── benchmark_omni_videoamme.py # Video-AMME(活动文件)
├── benchmark_omni_mmmu.py # 图像理解
├── benchmark_omni_mmsu.py # 音频理解
└── benchmark_omni_seedtts.py # 语音克隆/TTS
评测维度:准确率(ACC)+ 语音一致性(WER)+ 速度(QPS/RTF)
CI 流程(test-qwen3-omni-ci.yaml)
分多 stage 并行运行,每个 stage 独立 GPU 容器:
- Stage 1: Thinker only(基础推理)
- Stage 8: Video-MME Talker(视频+音频输出)
- Stage 9: Video-AMME(视频+音频输入)
- Stage 10: Video-AMME Talker(全链路)
当前活动文件
benchmark_omni_videoamme.py 是 Video-AMME 基准测试入口 ,其逻辑完全复用 run_video_eval 框架,区别在于:
- 强制启用音频输入(
enable_audio_input=True) - 使用固定提示词
VIDEOAMME_REQUEST_TEXT(仅包含格式指令,问题内容在音频中)