Youtu-Parsing-Omni快速上手:从环境部署到解析第一份文档的完整指南
【免费下载链接】Youtu-Parsing-Omni项目地址: https://ai.gitcode.com/tencent_hunyuan/Youtu-Parsing-Omni
Youtu-Parsing-Omni 是腾讯优图开源的 5B 参数全模态文档解析模型,一个模型即可将文档页、自然图像、图表、几何图、音频和视频解析为统一的结构化 JSON,在 OmniDocBench v1.6 上取得 96.96 的总体分。本文带你从零完成环境部署、启动解析服务,并成功解析出第一份文档。
🧩 认识 Youtu-Parsing-Omni:一个模型搞定 8 类解析任务
与其他 OCR 工具只做文字识别不同,Youtu-Parsing-Omni 采用单一全模态编码器 + 统一 JSON 输出(OmniSchema)的设计,8 类输入只需切换一个--task参数:
| 输入类型 | --task参数 | 主要输出内容 |
|---|---|---|
| 文档页 | document | 带 bbox 的版面元素、文本 / LaTeX 公式 / 表格、阅读顺序 |
| 自然图像 | natural_image | 实体与文字(带 bbox)、标签、描述 |
| 统计图表 | graphics_chart | Markdown 表格、注释、图题 |
| 流程图 | graphics_flowchart | Mermaid 流程图代码 |
| 几何图形 | graphics_geometric | 点、线、弧、形状与几何关系 |
| 音频 | audio | 分段时间戳、说话人、ASR 文本、声学事件 |
| 自然视频 | natural_video | 动作片段、交互、镜头运动、音轨 |
| 富文本视频 | textrich_video | OCR + ASR 片段与整段视频的 Markdown 报告 |
模型规模仅 5B 参数(bfloat16),却能比肩甚至超越部分 30B+ 的通用模型——这正是"快速部署、高性价比"的来源。
✅ 环境要求与快速环境配置
运行前提:
- Python >= 3.10
- NVIDIA CUDA GPU
ffmpeg(音频/视频输入必需)
关键约束:官方提供两种推理方式,各自锁定不同的transformers版本,必须装在两个独立的 Python 环境中:
| 推理方式 | transformers 版本 | 特点 |
|---|---|---|
| vLLM 服务部署 | 5.2.0 | 高吞吐、OpenAI 兼容接口,推荐 |
| Transformers 直接推理 | 5.10.2 | 更简单,适合本地单卡验证 |
一键安装步骤:
git clone https://gitcode.com/tencent_hunyuan/Youtu-Parsing-Omni cd Youtu-Parsing-Omni bash scripts/setup_env.sh # 方式一:vLLM 服务环境(transformers==5.2.0) bash scripts/setup_env.sh --transformers # 方式二:Transformers 推理环境(transformers==5.10.2)💡 注意:vLLM 服务环境中
peft必须被移除(安装脚本已自动处理),否则服务无法启动。
手动安装(vLLM 方式):
pip install -r requirements/vllm.txt pip install transformers==5.2.0 pip uninstall -y peft pip install --no-deps ./vllm-plugin-vita-omni🚀 三步启动 vLLM 解析服务
服务化部署只需设置变量并执行一条命令:
MODEL=tencent/Youtu-Parsing-Omni DATA_ROOT=/path/to/media GPU=0 bash scripts/vllm.sh| 变量 | 默认值 | 含义 |
|---|---|---|
MODEL | 必填 | 模型 ID 或本地 checkpoint 目录 |
DATA_ROOT | 必填 | 服务端唯一允许读取的媒体文件根目录 |
GPU | 0 | 指定运行 GPU(CUDA_VISIBLE_DEVICES) |
PORT | 8000 | 服务端口 |
启动成功后,服务监听在http://127.0.0.1:8000/v1,完全兼容 OpenAI API,模型名为Youtu-Parsing-Omni。官方已固定好与论文结果一致的推理参数(bfloat16、--max-model-len 65536、--gpu-memory-utilization 0.70),无需自行调参。
📄 解析你的第一份文档
将文档页面图片放入DATA_ROOT目录下,然后执行:
python examples/infer_vllm.py --task document --media /path/to/media/page.png其他任务同理,只改--task和--media:
python examples/infer_vllm.py --task audio --media /path/to/media/speech.wav python examples/infer_vllm.py --task natural_image --media /path/to/media/photo.jpg python examples/infer_vllm.py --task textrich_video --media /path/to/media/lecture.mp4直接用 OpenAI API 调用时的 3 个要点:
messages中媒体内容必须排在文本之前;- 在
extra_body中开启解析模式:chat_template_kwargs = {"enable_thinking": false, "enable_parsing": true},该模板会把媒体 token 与任务提示直接拼接(见 chat_template.jinja); - 保持
skip_special_tokens = False——坐标信息就承载在特殊 token 中,丢弃后 bbox 会缺失。
🔁 备选路线:Transformers 直接推理
不想起服务?在transformers==5.10.2的环境中一条命令即可:
MODEL=tencent/Youtu-Parsing-Omni python examples/infer_transformers.py --model $MODEL --task document --media /path/to/media/page.png- 推理时以
trust_remote_code=True加载,执行的就是本仓库随模型一起发布的 Python 代码(如 modeling_youtu_vita.py); - 使用 Hub 模型名时,建议用
--revision <commit-hash>固定经过审查的版本; - 模型权重会下载到
--download-dir(默认~/.cache/youtu-parsing-omni)。
🧾 读懂输出:结构化 JSON 怎么解析
模型永远回答一个 JSON 代码块,示例(自然图像任务):
{ "modality": "image", "subtype": "natural_image", "elements": [ {"id": "e_000", "category": "entity", "bbox": "<box><x_350><y_465><x_590><y_715></box>", "tag": "snake bookmark"} ], "global_description": {"caption": "..."} }解析输出的 4 个要点:
| 要素 | 说明 |
|---|---|
bbox | 专用 token 编码,基于 0–1000 归一化网格,如<x_85><y_275>表示左上角 x/y |
| 时间戳 | 统一HH:MM:SS格式 |
elements/segments | 图像任务返回elements(文档类另有reading_order);音频/视频返回按时间排列的segments |
global_description | 所有任务都包含的全局描述(caption / narrative / report) |
解码采用贪心策略(temperature=0),在EOS/<|end_of_text|>处停止,因此输出稳定可直接入库。
📁 项目文件导航:快速定位核心代码
| 文件 | 作用 |
|---|---|
| config.json | 模型主配置:hidden_size 2560、40 层 decoder、model_type: youtu_vita |
| modeling_youtu_vita.py | 模型实现(YoutuVITAForCausalLM) |
| configuration_youtu_vita.py | 配置类(AutoConfig) |
| processing_youtu_vita.py | 多模态处理器(AutoProcessor) |
| image_processing_youtu_vita.py | 图像预处理 |
| video_processing_youtu_vita.py | 视频帧处理 |
| feature_extraction_youtu_vita.py | 音频特征提取(log-mel,128 bins) |
| tokenization_youtu_vita.py、tokenizer.json | 分词器与词表 |
| chat_template.jinja | 含解析模式的对话模板 |
| generation_config.json | 生成参数(EOS 等) |
| model.safetensors | 5B 模型权重 |
🛠 常见问题速查
| 现象 | 原因与解决办法 |
|---|---|
| 两种模式互相干扰 / 版本冲突 | vLLM(transformers 5.2.0)与 Transformers 推理(5.10.2)必须分开装在两个 Python 环境 |
服务启动报peft相关错误 | vLLM 服务环境不允许安装peft,执行pip uninstall -y peft |
| 音频/视频解析失败 | 系统缺少ffmpeg,先安装后再试 |
| 提示找不到本地媒体文件 | 文件必须位于DATA_ROOT之下,否则服务端拒绝读取 |
| 结果里没有坐标 | 请求时误开了skip_special_tokens,需设为False |
| 多卡想并发跑评测 | 用GPUS变量指定多卡,官方评测脚本会为每张卡各起一个 vLLM 服务 |
写在最后
从git clone到解析出第一份文档,整个过程不到 10 分钟:配置一个 Python 环境 → 启动 vLLM 服务 → 运行一条--task document命令。拿到结构化 JSON 后,你可以把它直接接入自己的知识库、RAG 流水线或文档数字化系统。更多任务提示词、评测脚本与结果细节,欢迎继续深入 README.md 查阅。
【免费下载链接】Youtu-Parsing-Omni项目地址: https://ai.gitcode.com/tencent_hunyuan/Youtu-Parsing-Omni
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考