このページの内容
結論:GPU 版の PaddlePaddle 3.2.1 以降をインストールし、pip install "paddleocr[doc-parser]" を実行してから、PaddleOCRVL().predict("file.pdf") を呼び出します。これでパイプライン全体(レイアウト解析と 0.9B の VLM)が動き、ページごとに Markdown と JSON が得られます。本番環境では VLM を vLLM、SGLang、FastDeploy のいずれかで動かし、vl_rec_backend でパイプラインからそのサーバーを指定します。GPU がない場合は、同じモデルをホスト型の PaddleOCR API で利用できます。
テストしたこと・していないこと。私たちのテスト機には GPU がないため、PaddleOCR-VL は実行していません。このページには私たち自身が測った速度は載せていません。以下のコマンドとパラメータはすべて、PaddleOCR 3.7.0 の wheel、PaddleX 3.7.2 の設定ファイル、公式ドキュメントと照合済みで、行番号は出典に記載しています。私たちが CPU で実際に実行して時間を測った文書解析ツールについては、PP-StructureV3 をご覧ください。
PaddleOCR-VL とは#
PaddleOCR-VL は単一のモデルではなく、2 段階のパイプラインです。1第 1 段階はレイアウトモデルで、ページ上のすべての要素(段落、見出し、表、数式、グラフ、印影)を検出し、読み順に並べて切り出します。第 2 段階は小型の視覚言語モデルで、切り出した各領域を読み取り、Markdown、HTML の表、LaTeX、またはグラフのデータ表を出力します。最後にパイプラインが、それらを読み順どおりに組み立て直します。
restructure_pages() で複数ページを結合。VLM コンポーネントは、NaViT 型の動的解像度ビジュアルエンコーダーと ERNIE-4.5-0.3B 言語モデルを組み合わせたものです。1Hugging Face の API は 3 つのリリースすべてについて 958,588,736 パラメータ(BF16 safetensors)と報告しており、v1、1.5、1.6 は同じアーキテクチャです。4PaddleOCR-VL-1.6-0.9B のような名前の「0.9B」はこの VLM コンポーネントだけを指し、別のモデルサイズを意味するものではありません。1
パイプライン全体を使ってください。公式ドキュメントははっきりと、ページ画像を Transformers、vLLM、SGLang、FastDeploy 経由で VLM に直接送ることは PaddleOCR-VL の実行と "is not equivalent"(同等ではない)と述べています。精度が低い、あるいは存在しないテキストが出力される(ハルシネーション)場合は、まずレイアウト段階が動いているかを確認してください。1
PaddleOCR-VL と PP-StructureV3 のどちらを選ぶか#
どちらも文書を Markdown と JSON に変換でき、どちらも paddleocr[doc-parser] に含まれています。README では、表のセルやテキスト行の座標など、より細かい座標が必要な場合は PP-StructureV3 を選ぶよう位置づけています。VL シリーズはこうした座標を返しません。5精度を重視するなら PaddleOCR-VL です。OmniDocBench v1.5 の表では、PaddleOCR-VL-1.5 が 94.50、PP-StructureV3 が 86.73 です。7PP-StructureV3 は CPU でも快適に動きますが、PaddleOCR-VL は GPU 向けに設計されています。
バージョン:v1、1.5、1.6#
- PaddleOCR-VL(v1)が PaddleOCR 3.3.0 とともに公開。109 言語に対応し、テキスト、表、数式、グラフを扱えます。arXiv 2510.14528。54
- Hugging Face Transformers に対応。4
- vLLM が公式に対応。4
- PaddleOCR-VL-1.5が PaddleOCR 3.4.0 とともに公開。多角形の枠を出力する新しいレイアウトモデル PP-DocLayoutV3、印影認識、テキストスポッティング、ページをまたぐ表の結合、見出しレベルに対応し、チベット語とベンガル語を追加。arXiv 2601.21957。15
- 1.5 が llama.cpp(GGUF)に対応。4
- PaddleOCR-VL-1.6が PaddleOCR 3.6.0 とともに公開。アーキテクチャは 1.5 と同じで、Baidu によれば古文書、まれな文字、印影、スポッティング、グラフの結果が改善しています。技術レポート arXiv 2606.03264 は 6月3日に公開されました。19
- 高スループット向けの別の文書解析モデル HPD-Parsing が発表されました(後述)。5
| リリース | Python / CLI での値 | レイアウトモデル | VLM コンポーネント |
|---|---|---|---|
| PaddleOCR-VL (v1) | v1 | PP-DocLayoutV2 | PaddleOCR-VL-0.9B |
| PaddleOCR-VL-1.5 | v1.5 | PP-DocLayoutV3 | PaddleOCR-VL-1.5-0.9B |
| PaddleOCR-VL-1.6 | v1.6(既定) | PP-DocLayoutV3 | PaddleOCR-VL-1.6-0.9B |
レイアウトモデルとコンポーネント名は PaddleX 3.7.2 のパイプライン設定によるものです。3VLM はタスクプロンプトを理解します。v1 は OCR:、Table Recognition:、Formula Recognition:、Chart Recognition: に対応し、1.5 と 1.6 では Spotting: と Seal Recognition: が加わりました。4PP-DocLayoutV2 と V3 は同じ 25 種類のラベルを持ち、その中には display_formula、inline_formula、vertical_text、seal、chart が含まれます。15V3 は多角形の枠と読み順を 1 回の順伝播で予測します。V3 自身のモデルカードによれば、GLM-OCR でも使われています。15
ベンチマーク:PaddleOCR-VL の位置づけ#
文書解析ツールで最もよく引用されるベンチマークは、OpenDataLab が公開している OmniDocBench です。OpenDataLab は、同じ表に載っている MinerU の開発チームでもあります。下のリーダーボードは Baidu のものではなく、OmniDocBench 自身の README に掲載されたもので、各行は公開されたとおりに転記しています。6この表の「Overall」は 1,651 ページに対する ((1 − TextEdit) × 100 + TableTEDS + FormulaCDM) / 3 です。6
OmniDocBench v1.6_full のエンドツーエンド総合スコア(高いほど良い)。2026年10月27日時点の OmniDocBench README に掲載された 35 行のうち上位 10。
| モデル(サイズ) | 総合 |
|---|---|
| TeleOCR (1.2B) | 96.91 |
| OvisOCR2 (0.8B) | 96.47 |
| PaddleOCR-VL-1.6 (0.9B) | 96.34 |
| MinerU2.5-Pro (1.2B) | 95.75 |
| GLM-OCR (0.9B) | 95.22 |
| PaddleOCR-VL-1.5 (0.9B) | 94.93 |
| PaddleOCR-VL v1 (0.9B) | 94.18 |
| Unlimited-OCR (3B) | 94.00 |
| Qianfan-OCR (4B) | 93.90 |
| Youtu-Parsing (2.5B) | 93.74 |
上位 10 の中で、PaddleOCR-VL-1.6 は数式のスコアが最も高く(CDM 97.53)、表では TeleOCR、テキストの編集距離では OvisOCR2 がトップです。6参考までに、同じ表では Gemini 3 Pro が 92.91、dots.ocr が 90.77、GPT-5.2 が 86.59、MinerU のパイプラインが 86.47 です。GPT-4o と PP-StructureV3 はこの表に載っていません。61,651 ページのベンチマークでの 1〜2 ポイントの差は、あなたの文書での結果をほとんど示さない点に注意してください。必ず自分の文書のサンプルで試してください。
これらの数値に関する 3 つの注意点。(1) Baidu 自身のドキュメントでは 1.6 のスコアを 96.33 または "96.3%" としていますが、OmniDocBench の表では 96.34 です。96(2) OmniDocBench の更新履歴には、2026年4月30日にベンチマークが "from v1.6 to v1.7" に移行したとありますが、表のキャプションは "v1.6_full" のままです。ここではキャプションに従っています。6(3) OmniDocBench のバージョンが異なるスコアは比較できません。1.5 は v1.5 の表で 94.50、v1.6_full の表で 94.93 です。7
バージョンごとにどれだけ改善したか#
最も大きく伸びたのは撮影したページ。総合スコア。OmniDocBench v1.6_full は第三者のベンチマーク、Real5-OmniDocBench(スキャン、歪み、画面撮影、照明、傾き)は PaddleOCR チームが作成。
| バージョン | OmniDocBench v1.6_full(第三者) | Real5-OmniDocBench(開発元) |
|---|---|---|
| PaddleOCR-VL v1 | 94.18 | 85.54 |
| PaddleOCR-VL-1.5 | 94.93 | 92.05 |
| PaddleOCR-VL-1.6 | 96.34 | 93.19 |
.eval_results/real5_omnidocbench.yaml。Real5-OmniDocBench は Baidu 自身のベンチマークです。Real5-OmniDocBench での v1 から 1.5 への大きな伸びは、難しいケースによるものです。傾いたページは 77.47 から 91.66 に、画面撮影は 82.54 から 91.76 に上がっており、PP-DocLayoutV3 で多角形のレイアウト枠に切り替えたことと符合します。8これらは開発元の数値として扱ってください。第三者の表では伸びは小さく、v1 から 1.5 で +0.75、1.5 から 1.6 で +1.41 です。6
ハードウェア要件#
NVIDIA GPU では、どのエンジンで VLM を動かすかによって要件が変わります。1
| VLM エンジン | Compute Capability | CUDA |
|---|---|---|
| PaddlePaddle(既定) | ≥ 7.0 | ≥ 11.8 |
| Transformers | ≥ 7.0 | ≥ 11.8 |
| vLLM | ≥ 8.0 | ≥ 12.6 |
| SGLang | 8.0 以上 12.0 未満 | ≥ 12.6 |
| FastDeploy | 8.0 以上 12.0 未満 | ≥ 12.6 |
- T4 と V100(CC 7.x)では vLLM を起動できますが、ドキュメントでは "prone to timeouts or OOM"(タイムアウトや OOM が起きやすい)として推奨していません。これらのカードでは PaddlePaddle エンジンを使ってください。1
- RTX 30/40/50 と A10/A100 は CC 8 以上なので、すべてのバックエンドの要件を満たします。ただし RTX 50(Blackwell、CC 12)は SGLang と FastDeploy の対象範囲外です。Blackwell には専用のガイドがあり、CUDA 12.9+ に対応したドライバーと
-sm120のイメージが必要です。11 - VRAM:最低要件はリポジトリのどこにも記載されていません。メモリに関する唯一の記述は NVIDIA RTX 3060 向けのチューニングのヒントで、vLLM または FastDeploy で
gpu-memory-utilization: 0.7を設定するというものです。1 - x64 CPU:対応表では x64 CPU での PaddlePaddle によるローカル推論が「対応」とされていますが、MCP サーバーのドキュメントは VL シリーズについて "CPU inference is not recommended"(CPU 推論は推奨しない)としています。116私たちは速度を測っていません。
推論方式ごとの対応デバイス#
| レイアウト + VLM エンジン | NVIDIA | x64 CPU | Apple Silicon | AMD | Ascend |
|---|---|---|---|---|---|
| PaddlePaddle | 対応 | 対応 | 対応 | 対応 | 対応中 |
| Transformers | 対応 | 対応 | 対応中 | 対応中 | 対応中 |
| + vLLM サーバー | 対応 | 非対応 | 非対応 | 対応 | 対応 |
| + SGLang サーバー | 対応 | 非対応 | 非対応 | 対応中 | 対応中 |
| + FastDeploy サーバー | 対応 | 非対応 | 非対応 | 対応中 | 対応中 |
| + MLX-VLM サーバー | 非対応 | 非対応 | 対応 | 非対応 | 非対応 |
| + llama.cpp サーバー | 対応 | 対応 | 対応中 | 対応中 | 対応中 |
「+ サーバー」の行は、レイアウト解析をクライアント側の PaddlePaddle で、VLM を指定したサーバーで実行する構成です。「対応中」は、ドキュメントで作業中または未検証とされているものです。公式の対応表には Kunlunxin、Hygon、MetaX、Iluvatar、Intel Arc も含まれます(後述)。vLLM、SGLang、FastDeploy は Windows ではネイティブに動かないため、Windows では Docker を使ってください。1
インストール#
VL のガイドでは PaddlePaddle 3.2.1 以降と Python 3.9〜3.13 を求めており、仮想環境の利用を推奨しています。CPU 版と GPU 版の PaddlePaddle を同じ環境に入れないでください。1
python -m venv .venv_paddleocr && source .venv_paddleocr/bin/activate
python -m pip install paddlepaddle-gpu==3.2.1 -i https://www.paddlepaddle.org.cn/packages/stable/cu126/
python -m pip install -U "paddleocr[doc-parser]"python -m venv .venv_paddleocr && source .venv_paddleocr/bin/activate
python -m pip install paddlepaddle==3.2.1 -i https://www.paddlepaddle.org.cn/packages/stable/cpu/
python -m pip install -U "paddleocr[doc-parser]"# ~8 GB image with PaddlePaddle preinstalled; needs a driver for CUDA 12.6+
docker run -it --gpus all --network host --user root \
ccr-2vdh3abv-pub.cnc.bj.baidubce.com/paddlepaddle/paddleocr-vl:latest-nvidia-gpu \
/bin/bash
# then run the paddleocr CLI or Python inside the container
# offline variant (~10 GB): ...:latest-nvidia-gpu-offline私たち自身のテストから、バージョンに関する注意点が 2 つあります。PyPI の素の paddlepaddle(執筆時点で 3.3.1)では、CPU での PP-OCRv6 の推論が ConvertPirAttribute2RuntimeAttribute エラーでクラッシュしました。ガイドが指定するバージョンをそのまま固定しているのはこのためです。また、A dependency error occurred during pipeline creation と表示される場合は、[doc-parser] extra なしで paddleocr をインストールしています。どちらもエラー解決ガイドに載っています。OS と CUDA の組み合わせの全体はインストールガイドをご覧ください。
Python と CLI での使い方#
from paddleocr import PaddleOCRVL
pipeline = PaddleOCRVL() # loads v1.6 by default
# pipeline = PaddleOCRVL(pipeline_version="v1.5")
# pipeline = PaddleOCRVL(engine="transformers")
# pipeline = PaddleOCRVL(device="cpu") # Apple Silicon
for res in pipeline.predict("paper.png"):
res.print()
res.save_to_json(save_path="output")
res.save_to_markdown(save_path="output")
res.save_to_word(save_path="output") # .docxpaddleocr doc_parser -i paper.png --save_path ./output
# pick a release, or switch engine
paddleocr doc_parser -i paper.png --pipeline_version v1.5 --save_path ./output
paddleocr doc_parser -i paper.png --engine transformers --save_path ./output
# fix rotated or curved pages first
paddleocr doc_parser -i photo.jpg --use_doc_orientation_classify True --use_doc_unwarping Truepipeline_version が受け付けるのは "v1"、"v1.5"、"v1.6" の 3 つだけで、それぞれ PaddleX のパイプライン PaddleOCR-VL、PaddleOCR-VL-1.5、PaddleOCR-VL-1.6 に対応します。2各結果は PP-StructureV3 と同じ形の parsing_res_list(block_label、block_content、block_bbox、block_order)を持ち、保存メソッドとして save_to_json、save_to_markdown、save_to_html、save_to_xlsx、save_to_word、save_to_img があります。1
複数ページの PDF:restructure_pages()#
PDF では 1 ページにつき 1 つの結果が返ります。ページをまたぐ表の結合、文書全体での見出しレベルの再構成、すべてを 1 つの結果にまとめる処理を行うには、ページのリストを restructure_pages() に渡します。1
from paddleocr import PaddleOCRVL
pipeline = PaddleOCRVL()
pages = list(pipeline.predict("report.pdf"))
# merge_tables and relevel_titles already default to True in the code
merged = pipeline.restructure_pages(pages, concatenate_pages=True)
for res in merged: # one result with concatenate_pages=True
res.save_to_markdown(save_path="output")PaddleOCR 3.7.0 でのシグネチャは restructure_pages(res_list, merge_tables=True, relevel_titles=True, concatenate_pages=False) で、戻り値はリストです。2公式の例では merge_tables=True, relevel_titles=True を明示的に渡しているため、既定ではオフのように見えますが、実際はオンです。有効にする必要があるのは concatenate_pages だけです。PP-StructureV3 にあるのと同じ、よりシンプルな concatenate_markdown_pages(markdown_list) ヘルパーも用意されています。
実際によく使うパラメータ#
| パラメータ | 既定値 | 説明 |
|---|---|---|
pipeline_version | "v1.6" | 読み込むリリース。 |
vl_rec_backend | native(設定ファイル) | native、vllm-server、sglang-server、fastdeploy-server、mlx-vlm-server、llama-cpp-server。 |
vl_rec_server_url | — | VLM サーバーの URL(例:http://localhost:8118/v1)。 |
vl_rec_max_concurrency | — | クライアントがサーバーに送る同時リクエスト数。 |
use_layout_detection | True | オフにすると、画像全体を 1 つのプロンプトで VLM に送ります。 |
prompt_label | "ocr" | レイアウトがオフの場合のみ:ocr、formula、table、chart、spotting、seal。 |
use_chart_recognition | False | グラフを表に変換します。 |
use_seal_recognition | False | 印影やスタンプを読み取ります(1.5 以降)。 |
use_ocr_for_image_block | False | 画像と判定されたブロック内のテキストも読み取ります。 |
use_doc_orientation_classify / use_doc_unwarping | False | レイアウト解析の前に、回転や湾曲したページを補正します。 |
merge_layout_blocks | True | 隣接するレイアウトブロックを結合します。 |
layout_shape_mode | "auto" | 枠の形状:rect、quad、poly、auto。 |
markdown_ignore_labels | 7 ラベル | Markdown から除外するブロック:number、footnote、header、header_image、footer、footer_image、aside_text。 |
max_new_tokens, temperature, top_p, repetition_penalty | — | VLM のサンプリング設定。 |
vl_rec_* の設定はコンストラクタに渡します。それ以外はコンストラクタでも、predict() の呼び出しごとにも指定できますが、prompt_label、layout_shape_mode、サンプリング設定は predict() でのみ指定できます。既定値は使い方ドキュメントと 3.7.0 のソースによるものです。prompt_label の値は PaddleX 3.7.2 のコードによるもので、エラーメッセージには 4 つしか挙がっていませんが、実際には 6 つのラベルを受け付けます。123食い違いが 1 つあります。ドキュメントでは layout_threshold の既定値を 0.5 としていますが、PaddleX の設定ファイルでは 1.5 と 1.6 で 0.3、v1 ではクラスごとに 0.4〜0.5 です。3パイプラインが実際に使う値を確認するには pipeline.export_paddlex_config_to_yaml("vl.yaml") を呼び出します。編集したら、PaddleOCRVL(paddlex_config="vl.yaml") でそのファイルを渡してください。2
サービング:vLLM、SGLang、FastDeploy、llama.cpp#
上のクイックスタートの方法では、すべてを 1 つの Python プロセスで実行します。ドキュメントはこれを "rapid validation"(素早い検証)向けとし、本番環境では専用の VLM 推論サーバーを推奨しています。1役割分担は次のとおりです。VLM サーバーは 0.9B のモデルだけを動かし、クライアント(引き続き PaddleOCRVL パイプライン)はレイアウト解析をローカルで行って、切り出した領域をサーバーに送ります。クライアントでもレイアウトモデルが動くため、ドキュメントはクライアントも GPU で動かすことを推奨しています。1
VLM サーバーを起動する#
docker run -it --rm --gpus all --network host \
ccr-2vdh3abv-pub.cnc.bj.baidubce.com/paddlepaddle/paddleocr-genai-vllm-server:latest-nvidia-gpu \
paddleocr genai_server --model_name PaddleOCR-VL-1.6-0.9B --host 0.0.0.0 --port 8118 --backend vllmdocker run -it --rm --gpus all --network host \
ccr-2vdh3abv-pub.cnc.bj.baidubce.com/paddlepaddle/paddleocr-genai-fastdeploy-server:latest-nvidia-gpu \
paddleocr genai_server --model_name PaddleOCR-VL-1.6-0.9B --host 0.0.0.0 --port 8118 --backend fastdeploypython -m venv .venv_vlm && source .venv_vlm/bin/activate
python -m pip install "paddleocr[doc-parser]"
paddleocr install_genai_server_deps vllm # or: sglang, fastdeploy
paddleocr genai_server --model_name PaddleOCR-VL-1.6-0.9B --backend vllm --port 8118# GGUF files: huggingface.co/PaddlePaddle/PaddleOCR-VL-1.6-GGUF
./build/bin/llama-server \
-m /path/to/PaddleOCR-VL-1.6-GGUF.gguf \
--mmproj /path/to/PaddleOCR-VL-1.6-GGUF-mmproj.gguf \
--port 8111 --host 0.0.0.0 --temp 0コマンドは使い方チュートリアルからそのまま引用しています。1install_genai_server_deps でインストールされる vLLM と SGLang は CUDA 12.6 向けで、vLLM と SGLang には FlashAttention 2.8.2 が必要です。Transformers エンジンは、必要な transformers のバージョンが異なるため、vLLM や SGLang と同じ環境では使えません。1サーバーのチューニングは YAML ファイルに書き、--backend_config で渡します(vLLM なら gpu-memory-utilization や max-num-seqs など)。
| Docker イメージ | サイズ | オフライン版 |
|---|---|---|
paddleocr-vl(パイプライン全体) | ~8 GB | ~10 GB |
paddleocr-genai-vllm-server | ~13 GB | ~15 GB |
paddleocr-genai-fastdeploy-server | ~43 GB | ~45 GB |
パイプラインからサーバーを呼び出す#
from paddleocr import PaddleOCRVL
pipeline = PaddleOCRVL(
vl_rec_backend="vllm-server", # or sglang-server, fastdeploy-server
vl_rec_server_url="http://localhost:8118/v1",
vl_rec_max_concurrency=16, # tune for your GPU
)
for res in pipeline.predict("report.pdf"):
res.save_to_markdown(save_path="output")paddleocr doc_parser --input report.pdf \
--vl_rec_backend vllm-server \
--vl_rec_server_url http://localhost:8118/v1# server started with plain `vllm serve` (port 8000): pass the HF repo id
paddleocr doc_parser --input report.pdf \
--vl_rec_backend vllm-server \
--vl_rec_server_url http://localhost:8000/v1 \
--vl_rec_api_model_name 'PaddlePaddle/PaddleOCR-VL-1.6'マネージドの VLM エンドポイントも、--vl_rec_api_key を付ければ同じように使えます。ドキュメントによると、SiliconFlow が提供しているのは v1 と 1.5 だけ(pipeline_version="v1.5" を指定)、Novita AI は v1 だけです。1
パイプライン全体の HTTP API#
パイプライン全体を実行する HTTP エンドポイントとして、ドキュメントでは Docker Compose の構成(ポート 8080 で待ち受け)と paddlex --serve --pipeline PaddleOCR-VL が紹介されています。どちらもリクエストを 1 件ずつ処理します。同時実行が必要な場合、ドキュメントは別の高性能サービング(HPS)ソリューションを案内しています。1リクエスト形式とクライアントについてはサービングと API のガイド (EN) で解説しています。
公開されているスループット(Baidu の数値)#
Baidu は、OmniDocBench v1.5 で A100 1 基、バッチサイズ 512 の条件での PaddleOCR-VL-1.5 のエンドツーエンドのスループットを報告しています。FastDeploy 2.3 で 1.4335 ページ/秒、vLLM 0.10.2 で 1.1433、SGLang 0.5.2 で 1.0091 です。同じ表で、vLLM 上の MinerU2.5 は 0.9984 ページ/秒です。10これらの表はリポジトリ内に画像としてしか存在しないため、私たちが書き起こしました。1.6 のドキュメントでは、推論速度は 1.5 と同じとしています。9私たち自身の GPU での数値はありません。
Apple Silicon、AMD、Ascend などのハードウェア#
各アクセラレーターには公式のガイドがあり、それぞれ検証に使ったデバイスが 1 つ記載されています。11
| ハードウェア | 検証環境 | VLM の実行方法 |
|---|---|---|
| Apple Silicon | M4(M1〜M3 は記載ありだが未確認) | CPU 上の PaddlePaddle、または pip install "mlx-vlm>=0.3.11"、mlx_vlm.server --port 8111、クライアントで --vl_rec_backend mlx-vlm-server。Docker は不可。 |
| AMD GPU | MI300X | vLLM のイメージ paddleocr-genai-vllm-server:latest-amd-gpu(約 31 GB) |
| NVIDIA Blackwell | RTX 5070 | CUDA 12.9+ 対応のドライバー、-sm120 のイメージ、cu129 インデックスの PaddlePaddle |
| Huawei Ascend | 910B | ローカルでの直接推論は不可。vLLM サービスを使用 |
| Kunlunxin XPU | P800 | PaddlePaddle または FastDeploy |
| MetaX GPU | C550 | PaddlePaddle または FastDeploy |
| Hygon DCU | K100AI | PaddlePaddle または vLLM |
| Intel Arc | Arc B60 Pro | vLLM |
| Iluvatar GPU | BI-V150 | PaddlePaddle または FastDeploy |
Hugging Face と Transformers#
重みは Hugging Face で PaddlePaddle/PaddleOCR-VL、-1.5、-1.6 として公開されており、ほかに GGUF 版と、単体のレイアウトモデル PP-DocLayoutV3 もあります。モデルカードには、1 枚の画像を OCR: や Table Recognition: などのタスクプロンプトとともに送る、Transformers をそのまま使った例が載っています。1.5 と 1.6 では transformers>=5.0.0 が必要です。4これは要素単位の認識で、切り出した表や数式には便利ですが、ページ全体を解析するものではありません。Transformers で文書全体を処理するには、パイプラインはそのままにエンジンを切り替えます:PaddleOCRVL(engine="transformers")。1
ホスト型 API(GPU 不要)#
PaddleOCR 3.7.0 には公式のホスト型サービス用のクライアントが含まれており、文書解析の既定モデルは PaddleOCR-VL-1.6 です。13AI Studio のアクセストークンが必要です。コードは 3.7.0 のソースと照合しましたが、サービス自体は呼び出していません。
# export PADDLEOCR_ACCESS_TOKEN="..."
from paddleocr import PaddleOCRClient, Model
client = PaddleOCRClient()
result = client.parse_document(
file_path="report.pdf",
model=Model.PADDLE_OCR_VL_16, # the default
)
for page in result.pages:
print(page.markdown_text)
client.close()export PADDLEOCR_ACCESS_TOKEN="..."
paddleocr api --model_type doc_parsing --file_path report.pdfAI Studio のクォータのページには、ユーザーごとにモデル 1 つあたり 1 日 3,000 ページまで解析でき、1 ファイルにつき解析されるのは最初の 100 ページだけとあります。一方、非同期 API のガイドでは 1 リクエストで最大 1,000 ページの PDF に対応するとしています。2 つの公式ページの記述が食い違っているので、自分のファイルで試してください。14私たちが確認できたページには、料金はどこにも記載されていませんでした。詳細、TypeScript と Go の SDK、エラーコードは API のページ (EN) にまとめています。
HPD-Parsing:スループット重視の姉妹モデル#
2026年7月22日に発表された HPD-Parsing は、大量の文書解析向けに InternVL3.5-1B をベースに作られた、約 1B の別の文書 VLM です。ページを 1 本の長いトークン列としてデコードする代わりに、メインのレイアウトブランチからコンテンツブランチを生成して並列にデコードし、さらに Progressive Multi-Token Prediction(P-MTP)でデコードのステップ数を減らします。12
- 精度(自己申告):OmniDocBench v1.6 で総合 94.91。HPD-Parsing は OmniDocBench README の表に載っていないため、第三者による数値はありません。比較のために挙げると、同じ表で PaddleOCR-VL-1.6 は 96.34 です。126
- 速度(自己申告):A800 80GB、vLLM、バッチサイズ 512 で 2.68 ページ/秒、4,752.1 トークン/秒。自己回帰型のベースラインは 1.02 ページ/秒です。12
- 要件:NVIDIA GPU(H100、H800、H20、A100、A800、A30、L20、RTX Pro 6000 で検証済み)、CUDA 12.8+ 対応のドライバー、Linux x86-64、Python 3.10〜3.13、v0.17.1 ベースの独自ビルドの vLLM。
paddleocrパッケージは一切使いません。12
docker run -it --rm --gpus all --network host \
ccr-2vdh3abv-pub.cnc.bj.baidubce.com/paddlepaddle/hpd-parsing-vllm:latest-nvidia-gpuサーバーはポート 8118 で待ち受け、OpenAI API で通信します。クライアントは各ページとともに固定のプロンプト document parsing with fork. を送ります。12GPU 1 時間あたりの処理ページ数が精度の最後の 1 ポイントより重要で、対応するデータセンター向け GPU を使っているなら HPD-Parsing を選びます。精度、幅広いハードウェア対応、paddleocr のツール群を重視するなら PaddleOCR-VL を選びます。
ファインチューニング#
VLM は ERNIEKit による教師ありファインチューニングが可能ですが、レイアウトモデルと読み順モデルはファインチューニングできません。11 つ矛盾があります。v1 のアルゴリズムの FAQ では、ある回答でファインチューニングは "not supported"(非対応)とし、別の回答では ERNIEKit による SFT を推奨しています。現在の指針は、使い方チュートリアルの ERNIEKit の節です。
よくある質問#
PaddleOCR-VL と PaddleOCR-VL-0.9B の違いは何ですか?
PaddleOCR-VL はパイプライン全体で、レイアウトモデルと認識モデルで構成されます。PaddleOCR-VL-0.9B(および PaddleOCR-VL-1.5-0.9B、PaddleOCR-VL-1.6-0.9B)は、その中の VLM 認識モデルだけを指します。レイアウト段階なしに 0.9B のモデルにページ全体を読ませるのは同等ではなく、通常は精度が下がります。
PaddleOCR-VL-1.6 を指定して使うにはどうすればよいですか?
PaddleOCR 3.6.0 以降では既定なので、PaddleOCRVL() で読み込まれます。明示したい場合は pipeline_version="v1.6" を渡すか、CLI で --pipeline_version v1.6 を指定します。VLM サーバーでのモデル名は PaddleOCR-VL-1.6-0.9B です。
PaddleOCR-VL には GPU が必要ですか?
厳密には必須ではありません。公式の対応表では、PaddlePaddle を使った x64 CPU と Apple Silicon が「対応」とされています。ただし、ドキュメントは VL シリーズでの CPU 推論を推奨していません。NVIDIA では、PaddlePaddle エンジンに Compute Capability 7.0+ と CUDA 11.8+ が、vLLM に CC 8.0+ と CUDA 12.6+ が必要です。GPU がない場合はホスト型 API が現実的な選択肢です。または、私たちが 4 コアの CPU で実行した PP-StructureV3 を使ってください。
PaddleOCR-VL に必要な VRAM はどれくらいですか?
公式ドキュメントには最低要件が記載されていません。メモリに関する唯一の記述は RTX 3060 向けで、vLLM または FastDeploy のサーバーで gpu-memory-utilization を 0.7 に設定するというものです。私たちは実行していないので、推測はしません。
PaddleOCR-VL の API はありますか?
2 種類あります。公式のホスト型 API(AI Studio)は既定で PaddleOCR-VL-1.6 を使い、アクセストークンを用意して PaddleOCRClient().parse_document(...) または paddleocr api --model_type doc_parsing で呼び出します。セルフホストする場合は、Docker Compose でポート 8080 にパイプライン全体の HTTP サービスを立てられ、paddleocr genai_server ではパイプラインから呼び出す VLM 専用の OpenAI 互換サーバーを立てられます。サービングと API (EN) をご覧ください。
PaddleOCR-VL は MinerU や GPT-5 より優れていますか?
OmniDocBench v1.6_full の表では、PaddleOCR-VL-1.6(96.34)は MinerU2.5-Pro(95.75)、Gemini 3 Pro(92.91)、GPT-5.2(86.59)を上回り、TeleOCR(96.91)と OvisOCR2(96.47)を下回っています。これは 1 つのベンチマークの結果にすぎず、1〜2 ポイントの差はあなたの文書では当てはまらないかもしれません。ほかのツールとの比較は比較ページ (EN) をご覧ください。
PaddleOCR-VL は何言語に対応していますか?
PDF 全体を 1 つの Markdown ファイルに変換できますか?
できます。list(pipeline.predict("file.pdf")) でページごとの結果を集め、pipeline.restructure_pages(pages, concatenate_pages=True) を呼び出します。ページをまたぐ表の結合と見出しレベルの再構成は、既定で有効です。
出典
- PaddleOCR-VL の使い方チュートリアル:docs/version3.x/pipeline_usage/PaddleOCR-VL.en.md(リポジトリのコミット dab3fe3、2026-09-16):アーキテクチャ(10 行目)、バージョンの注記(12〜14)、パイプライン全体を使うべきという警告(16〜22)、ハードウェア対応表(44〜237)、CC/CUDA 要件(240〜247)、インストール(312〜345)、CLI と Python(356〜1690)、VLM サーバー(1695〜1855)、クライアント(1856〜1946)、チューニング(1948〜2000)、サービスのデプロイ(2002〜2160)、ファインチューニング(3365〜3369)。
- PaddleOCR 3.7.0 のパッケージソース(PyPI の wheel)、
paddleocr/_pipelines/paddleocr_vl.py:_AVAILABLE_PIPELINE_VERSIONS = ["v1","v1.5","v1.6"]、既定値"v1.6"、6 つのvl_rec_backendの値、restructure_pages(res_list, merge_tables=True, relevel_titles=True, concatenate_pages=False)(25〜34 行目、219〜229 行目)。paddleocr.dev が 2026-10-27 に確認。 - PaddleX 3.7.2 の wheel(PyPI、2026-06-25):
configs/pipelines/PaddleOCR-VL.yaml、PaddleOCR-VL-1.5.yaml、PaddleOCR-VL-1.6.yaml— レイアウトモデル(25/26 行目)、VLM のコンポーネント名(84/60/60)、layout_threshold(28〜53 / 29 / 29)、batch_size64 とuse_queues(4〜6)。受け付けるprompt_labelの値はinference/pipelines/paddleocr_vl/pipeline.py:855-868。 - Hugging Face のモデルカードと API:PaddleOCR-VL(アーキテクチャ L53、日付 L78–80、プロンプト L172–182)、PaddleOCR-VL-1.5(L43、L55–67、L79–80)、PaddleOCR-VL-1.6(L53–81、L164 の transformers>=5.0.0、プロンプト L175 と L197–204)。パラメータ数 958,588,736(BF16 safetensors の合計)は
huggingface.co/api/models/PaddlePaddle/PaddleOCR-VL*から 2026-10-27 に取得。 - PaddleOCR の README.md:3.3.0 のリリース項目(119 行目)、3.4.0 / PaddleOCR-VL-1.5 と "111 languages"(107〜113)、3.6.0 / PaddleOCR-VL-1.6(85〜89)、HPD-Parsing(65〜68)。
- OmniDocBench のリーダーボード:github.com/opendatalab/OmniDocBench の
mainブランチの README、2026-10-27 に取得。"OmniDocBench (v1.6_full)" というキャプションの表(524 行目)、Overall の計算式(519〜521)、1651 ページ(104)、更新履歴 "[2026/04/30] Updated from v1.6 to v1.7"(71)と "[2026/09/11] Added TeleOCR, OvisOCR2, and Unlimited-OCR"(66)。各行は公開されたとおりに転記。 v1_5ブランチの OmniDocBench README:"OmniDocBench (v1.5)" の表(417 行目)、PaddleOCR-VL-1.5 94.50(432〜443)、PaddleOCR-VL 92.86(464〜473)、PP-StructureV3 86.73(806〜817)。- Real5-OmniDocBench のスコア:各 PaddleOCR-VL の Hugging Face リポジトリにある
.eval_results/real5_omnidocbench.yaml。このデータセットは PaddleOCR チームが OmniDocBench v1.5 をもとに作成したもの(HF の PaddleOCR-VL-1.6 カード L275)なので、これらは開発元自身の数値です。 - PaddleOCR-VL-1.6 のアルゴリズム文書
docs/version3.x/algorithm/PaddleOCR-VL/PaddleOCR-VL-1.6.en.md:OmniDocBench v1.6 で 96.33(3 行目)、1.5 と "identical inference speeds"(64)。技術レポート arXiv 2606.03264(2026-06-03)。1.5 のアルゴリズム文書には、プレースホルダーの "achieves xxx% accuracy" が残ったままです(14 行目)。 - スループットの表:
algorithm/PaddleOCR-VL/PaddleOCR-VL-1.5.en.md:65-69(OmniDocBench v1.5、A100 1 基)とPaddleOCR-VL.en.md:113-120(OmniDocBench v1.0)。画像としてのみ公開されているため、値は paddleocr.dev が書き起こしました。 docs/version3.x/pipeline_usage/内のハードウェア別ガイド:PaddleOCR-VL-Apple-Silicon.en.md(12〜19 行目、87〜109)、-AMD-GPU.en.md(12、123、127)、-NVIDIA-Blackwell.en.md(20〜22、64、97〜98)、-Huawei-Ascend-NPU.en.md(12、20)、-Hygon-DCU、-Iluvatar-GPU、-Intel-Arc-GPU、-Kunlunxin-XPU、-MetaX-GPU(いずれも 12 行目)。- HPD-Parsing:使い方ドキュメント(7〜26 行目、104〜155)と Hugging Face のカード(L15、L48、L57、L75、L213)。精度と速度の数値はすべて自己申告です。
- 公式 API SDK のドキュメント
docs/version3.x/inference_deployment/serving/paddleocr_official_api/python.en.mdとcli.en.md、PaddleOCR 3.7.0 のソースpaddleocr/_api_client/client.py:102-117とresults.py:29-51。 - AI Studio の "API Quota Rules and Error Code Description"(2026-02-10 更新、ai.baidu.com/ai-doc/AISTUDIO/pmjcld5qm)と "Asynchronous API Usage Guide"(2026-02-04 更新、Mml7n69e7)。
- PP-DocLayoutV2 / PP-DocLayoutV3 のラベル一覧:PaddlePaddle/PP-DocLayoutV3 と PaddleOCR-VL リポジトリの PP-DocLayoutV2 フォルダーにある
inference.ymlの 27〜52 行目。V3 のモデルカード L23、L37、L48–50。 - PaddleOCR MCP サーバーのドキュメント
docs/version3.x/deployment/mcp_server.en.md:261:PaddleOCR-VL シリーズについて "CPU inference is not recommended"。