nvidia/NVIDIA-Nemotron-Parse-2.0 · Hugging Face

Reddit r/LocalLLaMA 模型

摘要

NVIDIA 发布 Nemotron Parse 2.0,这是一个文档图像解析模型,可将扫描的 PDF 和图像转换为带有布局、边界框和阅读顺序的结构化文本,并增加了多语言 OCR 改进和图表感知解析功能。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/08/06 16:38

nvidia/NVIDIA-Nemotron-Parse-2.0 · Hugging Face 来源:https://huggingface.co/nvidia/NVIDIA-Nemotron-Parse-2.0

模型概述

描述:

NVIDIA Nemotron Parse 2.0 可将文档图像转换为结构化的机器可读表示,包含文本、布局类别、边界框和阅读顺序信息。给定红绿蓝(RGB)文档图像和任务提示,模型会为标题、段落、说明文字、表格、图表、页眉、页脚、脚注、图片和参考文献条目等文档元素生成格式化文本和空间标注。与 NVIDIA Nemotron Parse v1.2 相比,NVIDIA Nemotron Parse 2.0 增加了约 2 万 token 的词表扩展,以更高效地支持多语言;新增了图表感知的文档解析功能(通过 <chart> 类 token 实现);并更新了面向图表/表格密集型文档的训练覆盖。NVIDIA Nemotron Parse 2.0 面向文档理解、信息检索、数据提取和多模态数据整理工作流。该模型可用于商业或非商业用途。

许可/使用条款:

管辖条款:您使用此模型受 NVIDIA 开放模型许可协议(https://www.nvidia.com/en-us/agreements/enterprise-software/nvidia-open-model-license/)的约束。使用此模型附带的 tokenizer 受 CC-BY-4.0 许可(https://creativecommons.org/licenses/by/4.0/)的约束。

部署地区:

全球

使用场景:

NVIDIA Nemotron Parse 2.0 专为构建文档智能、检索增强生成(RAG)、数据整理、信息提取和智能体 AI 应用的开发者和团队设计。它可用于将扫描或渲染的 PDF、演示幻灯片、表单、报告、表格以及混合内容文档页面转换为结构化输出,以支持下游索引、检索、分析、模型训练数据创建和人工审核流程。

能力亮点:

  • 扩展的多语言 OCR 支持,在 CJK 和印度系文字文档文本方面有显著提升。
  • 改进了文档页面中包含非正式手写或笔记类内容的手写文本提取。
  • 图表转表格解析:可识别图表区域并将可见图表信息转换为结构化文本,供下游使用。
  • 改进的表格处理,包括更强的表格检测、结构恢复和文本提取,尤其适用于表格密集型文档。

发布日期:

Hugging Face 2026年8月3日,通过 URL(https://huggingface.co/nvidia/NVIDIA-Nemotron-Parse-2.0)

参考文献:

  • Hugging Face Transformers mBART 文档(https://huggingface.co/docs/transformers/en/model_doc/mbart)
  • NVIDIA C-RADIO(https://huggingface.co/nvidia/C-RADIO)

模型架构:

**架构类型:**基于 Transformer 的视觉编码器-解码器模型

网络架构:

  • 视觉编码器:基于 NVIDIA C-RADIO 的 ViT-H 模型
  • 适配层:1D 卷积和归一化层,在解码前压缩视觉隐序列
  • 解码器:包含 10 个块的 mBART 解码器
  • 辅助预测头:一个训练时的解码器预测头单独保存在 auxiliary_prediction_heads.safetensors.extra 中,用于未来的多 token 预测研究。标准生成使用绑定的解码器输入/输出嵌入;默认的 model.safetensors、Transformers 示例和 vLLM 示例均不加载此辅助头。
  • Tokenizer:该 tokenizer 包含 72,256 个条目,与 NVIDIA Nemotron Parse v1.2 相比扩展了约 2 万 token,以提高多语言的 token 效率。模型还包含任务/控制 token,如 <parse>, <bbox>, <table>, <image>,以及图表类 token <chart>。使用此模型附带的 tokenizer 受 CC-BY-4.0 许可(https://creativecommons.org/licenses/by/4.0/)的约束。
  • 参数数量:< 1B

输入:

**输入类型:**图像、文本

输入格式:

  • 图像:红绿蓝(RGB)
  • 文本:提示字符串

输入参数:

  • 图像:二维(2D)
  • 文本:一维(1D)

与输入相关的其他属性:

  • 推荐最大输入分辨率(宽、高):1664, 2048
  • 推荐最小输入分辨率(宽、高):1024, 1280
  • 通道数:3
  • 提示格式:由支持的 control token 组成的任务提示。默认提示提取边界框、语义类别和 Markdown 格式文本:<parse><bbox>。当检测到图表内容时,模型可以使用 <chart> 输出图表区域。

输出:

**输出类型:**文本

**输出格式:**字符串

**输出参数:**一维(1D)

与输出相关的其他属性: Nemotron Parse 2.0 返回一个字符串,编码文档文本、语义元素类别和边界框。本仓库中的后处理工具可以将生成的边界框转换回原始图像坐标,并在支持的情况下将表格或图表相关文本转换为 LaTeX、HTML、Markdown、JSON 或 CSV。我们的 AI 模型设计用于和/或优化为在 NVIDIA GPU 加速系统上运行。通过利用 NVIDIA 硬件和软件框架,与仅 CPU 的解决方案相比,该模型可实现更快的训练和推理时间。

快速开始

在环境中安装依赖

您可以使用公共镜像 nvcr.io/nvidia/pytorch:25.03-py3,并在其上安装以下库版本:

pip install accelerate==1.12.0
pip install albumentations==2.0.8
pip install transformers==5.6.1
pip install timm==1.0.22
pip install open_clip_torch==3.2.0
pip install einops==0.8.1

使用示例

import torch
from PIL import Image, ImageDraw
from transformers import AutoModel, AutoProcessor, AutoTokenizer, GenerationConfig
from postprocessing import extract_classes_bboxes, transform_bbox_to_original, postprocess_text

# 加载模型和处理器
model_path = "nvidia/NVIDIA-Nemotron-Parse-2.0"  # 或使用本地路径
device = "cuda:0"
model = AutoModel.from_pretrained(
    model_path,
    trust_remote_code=True,
    torch_dtype=torch.bfloat16
).to(device).eval()
tokenizer = AutoTokenizer.from_pretrained(model_path)
processor = AutoProcessor.from_pretrained(model_path, trust_remote_code=True)

# 加载图像
image = Image.open("path/to/your/image.jpg")
task_prompt = "<parse><bbox>"
# task_prompt = "<parse><bbox><chart>"

# 处理图像
inputs = processor(images=[image], text=task_prompt, return_tensors="pt", add_special_tokens=False).to(device)
generation_config = GenerationConfig.from_pretrained(model_path, trust_remote_code=True)

# 生成文本
outputs = model.generate(**inputs, generation_config=generation_config)

# 解码生成的文本
generated_text = processor.batch_decode(outputs, skip_special_tokens=True)[0]

后处理

from PIL import ImageDraw
from postprocessing import extract_classes_bboxes, transform_bbox_to_original, postprocess_text

classes, bboxes, texts = extract_classes_bboxes(generated_text)
bboxes = [transform_bbox_to_original(bbox, image.width, image.height) for bbox in bboxes]

# 指定后处理输出格式
table_format = "latex"  # latex | HTML | markdown | json | json_hierarchical | csv
text_format = "markdown"  # markdown | plain
blank_text_in_figures = False  # 设置为 True 以移除 'Picture' 类中的文本

texts = [
    postprocess_text(
        text,
        cls=cls,
        table_format=table_format,
        text_format=text_format,
        blank_text_in_figures=blank_text_in_figures,
    )
    for text, cls in zip(texts, classes)
]

for cl, bb, txt in zip(classes, bboxes, texts):
    print(cl, ": ", txt)

draw = ImageDraw.Draw(image)
for bbox in bboxes:
    draw.rectangle((bbox[0], bbox[1], bbox[2], bbox[3]), outline="red")

表格输出格式

table_format 支持的值:latex | HTML | markdown | json | json_hierarchical | csv

使用 vLLM 进行推理

已测试的 vLLM 版本: v0.20-v0.26。当使用包含 Nemotron Parse remote-code 支持的 vLLM 构建版本时,Nemotron Parse 2.0 可以通过 vLLM 提供服务。在 A100 和 A10 系统上,我们建议使用 --attention-backend=TRITON_ATTN 运行 vllm serve。在服务镜像上安装以下依赖:

pip install albumentations timm open_clip_torch einops

此导出保持 lm_head.weightdecoder.embed_tokens.weight 绑定,不会实体化重复的输出头张量。当前的 vLLM 0.20 Nemotron Parse 构建版本在未打补丁的情况下会创建单独的输出头。如果您的 vLLM 构建版本尚不支持绑定的 Nemotron Parse 输出嵌入,请获取随附的运行时补丁,并在启动 vLLM 之前将其添加到 PYTHONPATH

PATCH_ROOT=$(python - <<'PY'
from huggingface_hub import snapshot_download
print(snapshot_download(
    "nvidia/NVIDIA-Nemotron-Parse-2.0",
    allow_patterns="vllm_tied_patch/sitecustomize.py",
))
PY
)
export PYTHONPATH="${PATCH_ROOT}/vllm_tied_patch:${PYTHONPATH}"

vLLM 推理示例

选项 1:端到端 Python 推理

from vllm import LLM, SamplingParams
from PIL import Image

def main():
    sampling_params = SamplingParams(
        temperature=0,
        top_k=1,
        repetition_penalty=1.1,
        max_tokens=9000,
        skip_special_tokens=False,
    )

    llm = LLM(
        model="nvidia/NVIDIA-Nemotron-Parse-2.0",
        max_num_seqs=64,
        limit_mm_per_prompt={"image": 1},
        dtype="bfloat16",
        trust_remote_code=True,
    )
    image = Image.open("<path_to_image>")

    prompts = [
        {
            "prompt": "<parse><bbox>",
            "multi_modal_data": {
                "image": image,
            },
        },
        {
            "encoder_prompt": {
                "prompt": "<parse>",
                "multi_modal_data": {
                    "image": image,
                },
            },
            "decoder_prompt": "<bbox>",
        },
    ]

    outputs = llm.generate(prompts, sampling_params)
    for output in outputs:
        prompt = output.prompt
        generated_text = output.outputs[0].text
        print(f"Decoder prompt: {prompt!r}, Generated text: {generated_text!r}")

if __name__ == "__main__":
    main()

选项 2:vLLM serve

vllm serve nvidia/NVIDIA-Nemotron-Parse-2.0 \
    --dtype bfloat16 \
    --max-num-seqs 8 \
    --limit-mm-per-prompt '{"image": 1}' \
    --trust-remote-code \
    --port 8000 \
    --chat-template chat_template.jinja

然后通过 OpenAI 兼容 API 运行推理:

import base64
from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:8000/v1",
)

with open("<path_to_image>", "rb") as f:
    img_b64 = base64.b64encode(f.read()).decode("utf-8")

prompt_text = "<parse><bbox>"

resp = client.chat.completions.create(
    model="nvidia/NVIDIA-Nemotron-Parse-2.0",
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "text",
                    "text": prompt_text,
                },
                {
                    "type": "image_url",
                    "image_url": {
                        "url": f"data:image/png;base64,{img_b64}",
                    },
                },
            ],
        }
    ],
    max_tokens=9000,
    temperature=0.0,
    extra_body={
        "repetition_penalty": 1.1,
        "top_k": 1,
        "skip_special_tokens": False,
    },
)
print(resp.choices[0].message.content)

提示和 logits 处理器选项

推荐的默认提示以 Markdown 格式提取边界框、语义类别和文本:

<parse><bbox>

若要提取嵌入图像或图形中显示的文本,请使用:

<parse><bbox><image>

如果只需要边界框和类别,请使用:

<parse>

本仓库包含两个可选的 logits 处理器:

  • NemotronParseRepetitionStopProcessor:在生成过程中检测重复的 n-gram,当重复的结构化输出表明可能出现幻觉时,强制模型关闭坐标块。
  • NemotronParseTableInsertionLogitsProcessor:强制每个块遵循表格结构,这在模型处理表格图像裁剪时可能很有用。

请参阅 example_with_processor.py 了解 Python 模型用法。对于 vLLM,请将 logitsprocs/ 导出到 PYTHONPATH,并将所需的处理器传递给 vllm serve,例如:

vllm serve nvidia/NVIDIA-Nemotron-Parse-2.0 \
    --dtype bfloat16 \
    --max-num-seqs 4 \
    --limit-mm-per-prompt '{"image": 1}' \
    --attention-backend=TRITON_ATTN \
    --trust-remote-code \
    --logits-processors nemotron_parse_vllm_logitprocs:NemotronParseTableInsertionLogitsProcessor \
    --port 8000

使用 vLLM OpenAI 兼容服务器的推理示例可在 vllm_example.py 中找到。

软件集成:

运行时引擎:

  • Transformers
  • vLLM

支持的硬件微架构兼容性:

  • NVIDIA Ampere
  • NVIDIA Blackwell
  • NVIDIA Hopper
  • NVIDIA Turing

支持的操作系统:

  • Linux

将基础模型和微调模型集成到 AI 系统中时,需要使用特定于用例的数据进行额外测试,以确保安全有效的部署。遵循 V 模型方法论,在单元和系统层面进行迭代测试和验证,对于降低风险、满足技术和功能要求,以及在部署前确保符合安全和道德标准至关重要。

模型版本:

Nemotron Parse 2.0

训练、测试和评估数据集:

训练数据集

数据模态:

  • 图像
  • 文本

图像训练数据规模:

  • 100 万到 10 亿张图像

文本训练数据规模:

  • 10 亿到 10 万亿 tokens

数据集采集方法:

  • 混合:自动化、人工、合成

数据集标注方法:

  • 混合:自动化、人工、合成

属性: 训练集包含数百万个图像-文本项,聚合自大型文档、表格和布局数据集。数据由文档页面和表格图像配对 OCR 文本、边界框和布局标签组成。来源包括渲染的数字文档、科学论文、PDF、维基百科风格页面,以及合成的文档、表格、单词和字符渲染。标注来自 OCR 和布局模型、第三方 OCR 服务、合成生成流程和人工标注。

测试和评估数据集

测试和评估使用内部和公共文档理解基准,涵盖 OCR 质量、布局结构、表格解析、阅读顺序和视觉定位。数据集采集和标注方法为混合式,包括自动化、模型派生、人工标注和合成标注。

评估结果

基准覆盖:

  • ParseBench 从文本保真度、语义格式

相似文章

使用合成数据构建快速多语言OCR模型

Hugging Face Blog

NVIDIA推出Nemotron OCR v2,一个使用合成数据生成技术构建的快速多语言OCR模型。该模型通过采用统一的基于FOTS的架构,在检测、识别和关系组件之间实现特征复用,在单个A100 GPU上达到34.7页/秒的性能。

nvidia/NVIDIA-Nemotron-Labs-3-Puzzle-75B-A9B-BF16 · Hugging Face

Reddit r/LocalLLaMA

NVIDIA 发布了 Nemotron-Labs-3-Puzzle-75B-A9B,这是一种从 Nemotron-3-Super 衍生而来的压缩混合 MoE 大型语言模型,实现了约 2 倍更高的服务器吞吐量和更高的并发性,同时在推理、编码和长上下文基准测试中保持强劲的准确度。

nvidia/NVIDIA-Nemotron-3-Ultra-550B-A55B-BF16 · Hugging Face

Reddit r/LocalLLaMA

NVIDIA发布Nemotron-3-Ultra-550B-A55B,这是一个5500亿参数(550亿活跃参数)的前沿大语言模型,采用混合LatentMoE架构,结合Mamba-2、MoE和注意力层,支持高达100万令牌的上下文长度和可配置的推理模式。它支持11种语言,并针对复杂的智能体工作流、长上下文分析和高精度推理进行了优化。

nvidia/nemotron-3.5-asr-streaming-0.6b

Hugging Face Models Trending

NVIDIA 发布 Nemotron 3.5 ASR,这是一个6亿参数的多语言流式语音识别模型,支持40种语言区域,采用缓存感知的FastConformer-RNNT架构实现低延迟转录。该模型支持可配置的块大小,并已在OpenMDW-1.1许可证下准备商业化使用。