文档智能专题:HunyuanOCR-1.5用DFlash把整页解码压到1.4秒

(1)《三年面试五年模拟》AIGC / LLM / AI Agent 算法工程师与开发工程师求职面试秘籍,独家资源见 WeThinkIn/AIGC-Interview-Book,欢迎 Star!

(2)AIGC / LLM / AI Agent 算法岗与开发岗求职面试内推学习社群 ,涵盖 AIGC、LLM 大模型、AI Agent、传统深度学习、自动驾驶、机器学习、计算机视觉、自然语言处理、强化学习、大数据挖掘、具身智能、元宇宙、AGI 等方向的最新面试干货与核心知识,欢迎加入(https://t.zsxq.com/33pJ0)!


论文标题:HunyuanOCR-1.5: Making Lightweight OCR VLMs Faster and Better

论文作者:中国科学院信息工程研究所、腾讯混元、南开大学

发表时间:2026年7月6日


目录

本文要点

(1)HunyuanOCR-1.5是中科院信工所、腾讯混元和南开2026年7月发布的1B端到端OCR模型,现行论文为9月17日的v3。

(2)vLLM单请求整页平均延迟从3.032秒降到1.408 秒,加速比2.14× ,对照组里最快。

(3)骨架沿用1.0,分辨率提到4K、上下文提到128K,解码加速靠约90.7M参数的DFlash块扩散草稿。

(4)OmniDocBench v1.6端到端组94.74,总榜已被PaddleOCR-VL-1.6和后来的OvisOCR2超过。CHAOS-Bench页均召回14.15,绝对值仍低。

(5)文末附官方模型卡的Transformers、vLLM、DFlash服务和llama.cpp命令。


中科院信工所、腾讯混元和南开大学在2026年7月6日放出HunyuanOCR-1.5的技术报告。我把报告、GitHub README和Hugging Face模型卡对了一遍,现行版本是9月17日的v3。

端到端OCR慢在解码。密文档、表格、公式要吐很长一段结构化文本。报告没重做骨干,输入抬到4K和128K,解码靠DFlash。vLLM单请求从3.032秒降到1.408 秒,吞吐从466.9 token/s升到1002.3 token/s,加速比2.14×。Transformers朴素对照是6.37×,线上更该看vLLM。

一、Hunyuan-ViT升到4K与128K上下文

HunyuanOCR-1.0已经验证过这条轻量端到端路线,1.5沿用同一套三件套。最底下是原生分辨率视觉编码器Hunyuan-ViT,中间是自适应MLP连接器,上面是带XD-RoPE的Hunyuan-0.5B语言模型。评测表里整模按1B计。

1.5在骨干上几乎只动了一处。视觉输入上限从2K提到4K ,上下文窗口提到128K。高分辨率用来保住密排文档、超大表和复杂图的细节,长窗口用来接多页、多图和长结构化输出。

连接器把高分辨率特征压成更短的视觉token,输出直接是Markdown、HTML表格或LaTeX公式,没有任务专用后处理。宽高比按原图走。XD-RoPE按文本、高、宽、时间四个维度编位置,多图和视频字幕靠这一项接进同一套语言器。

二、DFlash用块扩散一次起草16个token

端到端OCR的延迟,大头在自回归解码。投机解码让小草稿模型先猜一段候选,目标模型一次核对,接受最长合法前缀,输出分布不变。

很多投机方法的草稿仍是逐token写的,候选越长草稿越贵。DFlash换成块扩散,一次前向吐出整块B=16,目标模型并行验证。

训练时目标模型冻结,只优化草稿。每条序列先跑一遍目标模型缓存隐状态,再随机抽K=16个锚点,K块拼在一次前向里训,注意力用FlexAttention的块对角掩码。

每个block只看见锚点 a j a_j aj之前的目标隐状态和自己块内的mask token,块与块之间切断,所以K个起草任务可以并行。草稿大约90.7M 参数,5层Transformer,从目标模型最后5层解码器初始化。损失是带位置权重的下一词交叉熵,锚点本身不计入, γ = 7.0 \gamma=7.0 γ=7.0,远处token权重更低。

单请求或低并发时,目标模型的自回归往往卡在显存带宽上,算力有一截闲着。DFlash拿这截闲算力一次写出16个草稿token,目标模型一次核对就能往前走好几个位置。HTML表格、公式、结构化Markdown局部规律强,接受前缀往往更长。

三、vLLM上整页1.408秒,表格页加速最大

速度测在OmniDocBench上,batch size为1。vLLM数字按930条样本的SOTA速度对照来报。双阶段系统报的是整页流水线延迟,含版面分析、区域识别和结果合并。各家分词器和输出格式不同,跨模型token/s不好比,主要看页延迟和页吞吐。

系统 路线 解码 平均延迟(秒/页) 页/秒 相对Hunyuan AR
dots.ocr 端到端 自回归 7.154 0.136 0.41×
DeepSeek-OCR 2 端到端 自回归 5.460 0.179 0.54×
Unlimited-OCR 端到端 自回归 3.659 0.255 0.77×
HunyuanOCR-1.5 端到端 自回归 3.032 0.330 1.00×
PaddleOCR-VL-1.6 双阶段 级联 1.744 0.562 1.71×
GLM-OCR 双阶段 级联 1.649 0.604 1.83×
HunyuanOCR-1.5 端到端 DFlash 1.408 0.706 2.14×

没开DFlash时,1.5的vLLM自回归比PaddleOCR-VL-1.6的1.744秒和GLM-OCR的1.649秒都慢。打开之后才反超,大约比GLM-OCR快1.17倍,比PaddleOCR-VL-1.6快1.24倍,比dots.ocr快5.08倍。端到端要在延迟上追上流水线,靠的就是这一步。

Transformers从34.850秒降到5.474秒,加速比6.37×,有效接受长度8.89。vLLM有效接受长度8.36,一次写16个位置,实际接受大约八到九个。

输出越长加速比越高。vLLM上0到256 token只有1.31×,2048以上到2.30×。短输出的时间多半耗在预填充和固定开销上,投机解码摊不平。

按OmniDocBench版面标注分成文本、公式、表格三类,表格页加速最大。vLLM上表格页2.39×、有效接受长度10.45,公式页2.06×,文本页1.81×。Transformers上表格页到7.81×。HTML表标签规律太强,草稿更容易猜中下一截。

并发从1到32,加速比一直高于1.8×,并发4时到2.26×,并发32仍有1.80×。GPU打满后闲算力变少,草稿那次并行前向就不那么划算。

四、OmniDocBench端到端94.74,总榜已经不是第一

文档解析看OmniDocBench v1.6。HunyuanOCR-1.5总分94.74,在报告自己的端到端专家组里最高,1.0是92.03,Unlimited-OCR是93.92。

模型 参数 Overall↑ 文本Edit↓ 公式CDM↑ 表格TEDS↑ 顺序Edit↓
HunyuanOCR 1B 92.03 0.048 88.60 92.37 0.138
Unlimited-OCR 3B-A0.5B 93.92 0.042 95.79 90.16 0.129
HunyuanOCR-1.5 1B 94.74 0.039 94.50 93.67 0.129

公式CDM 94.50,没过Unlimited-OCR的95.79。报告说自家倾向用begin/end一次写完多行公式,现行匹配会先拆成单行,端到端输出可能被低估。这个口径争议写在正文里,没有另开附录辩解。

后来的OvisOCR2报告里,PaddleOCR-VL-1.6是96.33,OvisOCR2是96.58。Hunyuan赢的是端到端组和速度,解析分不是全场第一。报告摘要写的是top-tier end-to-end,不宜写成OmniDocBench总冠军。

古文Chronicles-OCR古文字0.54、成熟书体0.79。MORE总分91.90,对照表里最高,表格子项80.77仍低于GLM-OCR的82.48。ChartArena英文平均48.9、中文64.1。TableVerse-5K的TEDS 79.37、TEDS-S 86.05,专家OCR里最高,结构分仍低于Gemini 2.5 Pro的87.13。

DUDE验证集54.64,没超过Qwen3.5-0.8B的56.41。Spotting内部榜71.40,无文字负样本从78.1%到99.8%,艺术字从56.76掉到53.21,屏幕和视频也略降。卡片92.40、票据92.55、字幕93.07,OCRBench 861,相对1.0只多1分。

CHAOS-Bench把渲染页上两三个词改成无意义形近词,看模型会按看见的写,还是按语言习惯改回词典词。页均召回14.15,对照里最高,DeepSeek-OCR 2和MinerU2.5-Pro只有6.33。绝对值仍低。

数据侧叫Agentic Data Flow。算法工程师用自然语言点出短板,智能体去搜语料和字体、调1.0和Qwen3.5做质检、写渲染脚本。低资源OCR覆盖331种语言,古文对汉字七种历史形态做合成。预训练只重做Stage3,把这些数据和1.0的历史OCR数据混在一起。合成细节放到MinerU和PaddleOCR那两篇。

后训练把难题留给RL,算法换成IcePop,按token校准训练引擎和推理引擎的概率比,落在0.2, 5.0之外的token不更新。SFT检查点OmniDocBench 92.92,RL之后94.74,这一段贡献了1.82分。

五、本地部署与推理实践

权重在Hugging Face的tencent/HunyuanOCR,根目录是1.5,DFlash草稿在dflash/,1.0归档在v1.0/。协议是腾讯混元社区许可,和1.0相同,不是Apache,商用前要自己读LICENSE。

官方统一环境要求CUDA 13,同一套安装覆盖vLLM自回归、DFlash和原生Transformers。缺CUDA 13时,仓库docs/inference/inference.md指向更轻的分配置安装。

bash 复制代码
pip install uv
uv venv --python 3.12.11 && source .venv/bin/activate
uv pip install "vllm>=0.25.1"
uv pip install --no-build-isolation --no-cache-dir "flash-attn==2.8.3"

pip install -U "huggingface_hub[cli]"
huggingface-cli download tencent/HunyuanOCR --local-dir ./HunyuanOCR --exclude "v1.0/*"
git clone https://github.com/Tencent-Hunyuan/HunyuanOCR.git
cd HunyuanOCR

三种配置共用同一套权重、任务提示和采样。模型卡锁定temperature=0.0、top_p=1.0、top_k=-1、repetition_penalty=1.08。文档解析要确定性输出,温度给0说得通,1.08用来压长输出里的循环重复。

Transformers要求transformers>=5.13.0,类名HunYuanVLForConditionalGeneration。模型卡最小示例如下。

python 复制代码
import torch
from transformers import AutoProcessor, HunYuanVLForConditionalGeneration

MODEL_ID = "tencent/HunyuanOCR"
processor = AutoProcessor.from_pretrained(MODEL_ID, trust_remote_code=True, use_fast=False)
model = HunYuanVLForConditionalGeneration.from_pretrained(
    MODEL_ID, torch_dtype=torch.bfloat16, device_map="auto",
    trust_remote_code=True,
).eval()

prompt = (
    "提取文档图片中正文的所有信息用markdown格式表示,其中页眉、页脚部分忽略,"
    "表格用html格式表达,文档中公式用latex格式表示,按照阅读顺序组织进行解析。"
)
messages = [{
    "role": "user",
    "content": [
        {"type": "image", "image": "/path/to/document.png"},
        {"type": "text",  "text":  prompt},
    ],
}]
inputs = processor.apply_chat_template(
    messages, add_generation_prompt=True, tokenize=True,
    return_dict=True, return_tensors="pt",
).to(model.device)
with torch.inference_mode():
    out = model.generate(**inputs, max_new_tokens=8000, do_sample=False)
gen = out[:, inputs["input_ids"].shape[1]:]
print(processor.batch_decode(gen, skip_special_tokens=True)[0])

最小示例max_new_tokens=8000。仓库脚本上限32768,服务端--max-model-len 131072。

vLLM自回归和DFlash共用客户端。

bash 复制代码
MODEL_PATH=./HunyuanOCR GPU=0 PORT=8000 bash inference/vLLM/serve.sh
# DFlash草稿已在 ./HunyuanOCR/dflash ,默认不用再拷
MODEL_PATH=./HunyuanOCR GPU=0 PORT=8000 bash inference/DFlash/serve_DFlash.sh

python inference/vLLM/infer_vllm_client.py \
    --host 127.0.0.1 --port 8000 \
    --model tencent/HunyuanOCR \
    --image /path/to/document.png \
    --task-type doc_parse \
    --max-tokens 32768

--task-type锁官方任务,--list-tasks可看全表,常见的有doc_parse、spotting_json、chart_parse、doc_trans_en2zh。流式客户端带尾部重复提前停止和文档解析Markdown规范化。

PC端走llama.cpp。社区版能跑基座,DFlash要用wendadawen/llama.cpp的dflash-adapt-hunyuanocr-hunyuanstyle。

bash 复制代码
git clone https://github.com/ggml-org/llama.cpp.git && cd llama.cpp
cmake -B build -DLLAMA_BUILD_EXAMPLES=ON
cmake --build ./build --config Release -j

hf download tencent/HunyuanOCR --local-dir ./HunyuanOCR --exclude "v1.0/*"
python3 convert_hf_to_gguf.py --outfile ./HunyuanOCR/hyocr-f16.gguf --outtype f16 ./HunyuanOCR
python3 convert_hf_to_gguf.py --outfile ./HunyuanOCR/mmproj-hyocr-f16.gguf --outtype f16 --mmproj ./HunyuanOCR

build/bin/llama-server \
  --model ./HunyuanOCR/hyocr-f16.gguf \
  --mmproj ./HunyuanOCR/mmproj-hyocr-f16.gguf \
  --host 0.0.0.0 --port 8080 --alias HYVL \
  --ctx-size 10240 --n-predict 4096

这里--ctx-size 10240、--n-predict 4096,和论文宣传的128K不是一档。端侧示例按这个窗口来,不要默认笔记本上也能喂满长文档。DFlash版和完整说明在仓库docs/llama_cpp.md。

六、总结与思考

HunyuanOCR-1.5把端到端OCR的部署问题拆成两半。一半是让已有小模型在长结构化输出上少走自回归步,DFlash吃的是表格、公式、HTML这种局部可预测的输出。另一半是把输入规格抬到4K和128K。

速度数字里,我更信vLLM的2.14×,不把Transformers的6.37×当成线上口径。没开DFlash时它比Paddle和GLM慢,打开之后才是对照里最快的端到端系统。投机解码靠闲算力,并发打满加速比会掉。

短板也清楚。OmniDocBench总榜已被流水线和后来的OvisOCR2拿走。CHAOS-Bench召回14.15,多数冲突仍听语言模型。多图问答没超过同尺寸通用VLM。协议也不是Apache。llama.cpp公开示例只有10240上下文,部署按脚本窗口来。


参考链接

相关推荐
AI棒棒牛13 小时前
YOLO26 改进:融合 LW-DETR 思想的轻量 TokenMixer,让 Neck 从局部堆叠走向局部-全局协同!嘎嘎创新!
人工智能·深度学习·yolo·目标检测
Hello.Reader13 小时前
REA 深度实战让 AI Agent 学会逆向工程,从软件行为分析到二进制原理还原
人工智能
William一直在路上13 小时前
垂直领域大模型训练的一点思考和探索
人工智能·大模型·llm
腾讯云大数据13 小时前
本体立骨架,语义供刻度——DataBuddy对企业AI语义架构的一次完整回答
大数据·人工智能·架构·云计算·腾讯云
武汉星际互动13 小时前
从“一件事”到“一类事”,政务服务改革的“下一站”在哪里?
大数据·人工智能·政务
朝朝辞暮i13 小时前
VLA 系统学习第 20 课——Diffusion Policy 为什么要先给动作加噪,再学习把噪声去掉?
人工智能·python·深度学习·transformer·vla
七夜zippoe13 小时前
Agent 权限边界:别让 AI 误删你的生产库(安全设计)
数据库·人工智能·安全·ai·权限边界·安全设计
田里的水稻13 小时前
RL_强化学习概述---具身机器人
人工智能·深度学习·神经网络·机器学习
朝朝辞暮i13 小时前
第一部分:ACT 阶段总结——从 Behavior Cloning 到完整的 Transformer Action Policy
人工智能·pytorch·深度学习·transformer·vla
Allen_LVyingbo13 小时前
生命过程的分子语言:AI 解析范式与场景应用全景研究(上)
大数据·人工智能·知识图谱·健康医疗·数据库开发·数据库架构