llama.cpp 多模态实测:一个被忽略的 `--mmproj`,四个 VLM 的修罗场

31 阅读7分钟

一直用 llama.cpp + Qwen3.6-27B 写代码,直到某天翻了翻文档,发现只要加个 --mmproj 参数就能识图。于是把手头四个模型全翻出来,从 OCR 到看图写网页,打了一架。

写在前面:一个被忽略的参数

事情是这样的。

我一直用 llama.cpp + Qwen3.6-27B 纯文本模式写代码,效率还不错。但也一直有个心结——我本地跑的 llama-server,为啥不能识图?

直到有一天我翻了翻文档,发现了这个参数:

--mmproj ../Qwen3.6-27b-mmproj-F16.gguf

就这?就这。

之前几个月我一直开着纯文本模式,相当于买了一台带摄像头的手机,却只用它打电话。

既然发现了,那就别浪费。我把手头四个支持多模态的模型全拉出来,从纯文字识别到看图生成 HTML,挨个测了一遍。

测试准备

两个典型场景,四款模型,一张显卡(RTX 4090D,24G):

测试组任务测试图
测试组一纯文字识别(OCR)benchmark 对比表格截图
测试组二网页截图 → HTML 代码生成自己设计的网页应用截图

测试组一:纯文字识别(OCR)

测试图片

用 GLM-OCR 识别 benchmark 对比表格截图:

OCR 测试图片

GLM-OCR 输出文本

Performance

• Document Parsing & Information Extraction

GLM-OCR
OmmiDocBranch v1.5
94.6        94.5        91.1        90.7        88.4        90.3        85.4

OCRBench (Final)
94.0        75.3        34.7        75.3        92.1        91.9        83.7

UniBIRNet
96.5        96.1        85.8        96.4        90.0        96.4        90.5

Data Representation
PubTetNet
85.2        84.6        88.4        71.0        91.4        84.4

TEDS_TEST
86.0        83.3        85.4        62.4        81.8        67.6

Information Extraction
Nanorolex-KIE
93.7                    95.2                    87.5

Handwritten-Forms
86.1                    94.5                    78.2Real-World Scenarios Performance

GLM-OCR
Code
84.7        75.8        82.1        82.9        80.8        86.9        86.4

Real-world Table
91.5        86.1        79.8        81.8        90.6        86.7

Handwriting
87.0        87.4        73.8        54.2        71.7        90.0        78.0

Multi-language
69.3        54.8        66.1        27.8        65.1        86.2        70.1

Seal
90.5        42.2        40.4        65.0        91.3        58.8

Receipt IKE!
94.5                    97.3                    83.5

• Speed Test

For speed, we compared different OCR methods under identical hardware and testing conditions (single replica, single concurrency), evaluating their performance in parsing and exporting Markdown files from both image and PDF inputs. Results show GLM-OCR achieves a throughput of 1.86 pages/second for PDF documents and 0.67 images/second for images, significantly outperforming comparable models.

Methods                     Image Inputs            Pages / Sec
GLM-OCR                                            0.67            1.86
PaddleOCR-VL-1.5                                   0.39            1.22
Deepseek-OCR2                                      0.32
MinerU2.5                                          0.18            0.48
dots.ocr                                           0.10
Usage
Official SDK

OCR 结果分析

从图片对比 GLM-OCR 输出来看:

维度表现
文字还原分组标题和模型名称都正确识别
数值准确性所有数字准确识别
排版细节能提取表格数据,但几乎没有排版
整体结论纯文字提取场景下表现出色

各模型 OCR 横评

模型文字识别精度模糊小字速度能否推理
GLM-OCR⭐⭐⭐ 最高✅ 也能识别⚡ 极快(27B 的 10 倍)❌ 不能
MiniCPM-V-4.6⭐⭐ 一般❌ 不行✅ 有限
Qwen3.6-27B⭐⭐⭐ 较高❌ 不行✅ 较强
Gemma-4-31B-it⭐⭐ 一般❌ 不行✅ 较强

GLM-OCR 在纯文字识别上直接把其他三个按在地上摩擦(其它的测试就不放了)。速度比qwen3.6 27b 快了 10 倍,角落里的模糊小字都能认出来。代价是没有推理能力——你问它"这个表格说明了什么趋势",它会再给你输出一遍文字。

测试组二:网页截图 → HTML 代码生成

测试原图

这才是这次测试的真正目的——让模型"看图写网页"。

下图是我设计的一个网页应用页面:

1.png

用同一张网页设计截图,分别让四个模型生成 HTML 代码,看看谁能精准还原。

测试结果速览

模型网页生成效果Prompt 要求评价
GLM-OCR❌ 不适用专业 OCR,生成任务不行
MiniCPM-V-4.6❌ 不行文字识别还行,无法生成可用网页
Qwen3.6-27B✅ 精确高(需严格 prompt)布局和样式还原度高
Gemma-4-31B-it✅ 精确prompt 宽容,生成质量稳定

各模型生成结果

MiniCPM-V-4.6:文字识别 OK,但生成网页不行。

minicpm_v_4.6.png

Qwen3.6-27B:需要严格 prompt,提取文字和生成网页都较为精确(极少词语识别错误)。

qwen3.6_27b.png

Gemma-4-31B-it:不需要严格 prompt,中文识别精度比 Qwen3.6-27B 稍差。排版也稍差(测试用例)

gemma4_31b_it.png

各模型启动命令与详评

1. GLM-OCR——专为 OCR 而生的偏科天才

llama-server.exe -ngl 99 -c 265000 -ctk q8_0 -ctv q8_0 --reasoning off -m ../GLM-OCR-Q8_0.gguf --mmproj ../mmproj-GLM-OCR-Q8_0.gguf
项目内容
模型来源hf-mirror.com/ggml-org/GL…
类型专业化 VLM(智能 OCR)
文字识别⭐⭐⭐ 角落模糊小字也能识别
网页生成❌ 不适用
速度⚡ 极快(约 Qwen3.6-27B 的 10 倍)
限制不能推理问问题,问文字相关问题会重复输出

结论:特定任务优势巨大,模型小速度快。但如果你的需求不只是"提取文字",它就没法用了。

2. MiniCPM-V-4.6——各方面都差一口气

llama-server.exe -ngl 65 -c 145000 -ctk q8_0 -ctv q8_0 --reasoning off -m ../MiniCPM-V-4_6-F16.gguf --mmproj ../MiniCPM-V-4_6-mmproj-f16.gguf
项目内容
模型来源hf-mirror.com/openbmb/Min…
类型通用 VLM
文字识别⭐⭐ 一般
网页生成❌ 不行
Prompt 要求

结论:能力较为平庸,文字识别和网页生成都不突出。有推理能力,速度是 Qwen3.6-27B 的 5 倍,但在我的两个测试场景里都没找到特别适合的位置。也许在别的任务上能发光。

3. Qwen3.6-27B——全面均衡,prompt 写好了就是王者

llama-server.exe -ngl 65 -c 110000 -ctk q8_0 -ctv q8_0 --reasoning off -m ../Qwen3.6-27B-Q4_K_M.gguf --mmproj ../Qwen3.6-27b-mmproj-F16.gguf
项目内容
模型来源hf-mirror.com/unsloth/Qwe…
类型通用 VLM
文字识别⭐⭐⭐ 较高(模糊小字不行)
网页生成✅ 精确
Prompt 要求高(需严格 prompt)
速度

结论:我的主力本地模型。RTX 4090D 24G 跑 Qwen3.6-27B Q4_K_S 量化版,128K 上下文刚好够用。Prompt 写精细了,效果就是四个模型里最好的。最近云端在用的 Deepseek V4 Flash Free 又快又免费(写这篇文章时还免费,可能你看到时已经不免费了)。

4. Gemma-4-31B-it——最省心的选择

llama-server.exe -ngl 99 -c 65000 -ctk q8_0 -ctv q8_0 --reasoning off -m ../gemma-4-31B-it-Q4_K_M.gguf --mmproj ../gemma-4-31B-it-mmproj-F16.gguf
项目内容
模型来源hf-mirror.com/unsloth/gem…
类型通用 VLM
文字识别⭐⭐ 一般(比 Qwen3.6 差)
网页生成✅ 精确
Prompt 要求低——最省心
速度

结论:不用费心写 prompt,网页生成效果稳定。但中文能力确实不如 Qwen3.6-27B。美国巨头开源的同级模型,在我的测试任务上比不上中国公司的模型。中文精度、网页排版都差一截,模型还大些,速度还慢些。

综合对比

OCR 任务

模型精度模糊场景速度推荐
GLM-OCR⭐⭐⭐⚡⚡⚡⭐⭐⭐ 首选
Qwen3.6-27B⭐⭐⭐⭐⭐ 备选
Gemma-4-31B-it⭐⭐⭐⭐
MiniCPM-V-4.6⭐⭐⚡⚡

首选:GLM-OCR,又快又准。Qwen3.6-27B 在需要理解文字语义排版时可替补。

网页生成任务

模型还原度Prompt 宽容度速度推荐
Qwen3.6-27B⭐⭐⭐⭐⭐⭐⭐⭐ prompt 写得好时最佳
Gemma-4-31B-it⭐⭐⭐⭐⭐⭐⭐ 省心稳定
GLM-OCR⚡⚡⚡⭐ 不适用
MiniCPM-V-4.6⭐⭐⚡⚡⭐ 不推荐

首选:追求精确度用 Qwen3.6-27B(需精心写 prompt),想省心用 Gemma-4-31B-it。

一句话总结

模型类型OCR 精度网页生成Prompt 要求速度适合场景
GLM-OCR专业化 VLM⭐⭐⭐⚡ 极快纯文字提取
MiniCPM-V-4.6通用 VLM⭐⭐中等待发掘
Qwen3.6-27B通用 VLM⭐⭐⭐✅ 精确精确输出
Gemma-4-31B-it通用 VLM⭐⭐✅ 精确多语言场景
  • 专业化 VLM:GLM-OCR 模型小速度快,文字识别准确率极高,但无法视觉推理。
  • 通用 VLM:能力全面但速度慢。Qwen3.6-27B 精确 prompt 效果最好,Gemma-4-31B-it 胜在省心。

一些场景想法

测试完这四个模型,脑子里冒出几个可能用得上的场景,记下来备用。

纯文字提取类

场景推荐模型说明
截图代码提取GLM-OCR / Qwen3.6-27B纯文字提取用 GLM,需要语义理解用 Qwen
文档版面分析Qwen3.6-27B双栏排版、表格混合,需要理解阅读顺序
图表数据提取Qwen3.6-27B折线图柱状图提取原始数据,数值精度高

视觉理解 + 生成类

场景推荐模型说明
架构图 → 文档/代码Qwen3.6-27B识别组件和箭头关系,生成 Mermaid 流程图
手绘线框图 → HTMLQwen3.6-27B / Gemma-4-31B-it精确还原用 Qwen,省心用 Gemma

视觉分析 + 指令执行类

场景推荐模型说明
UI 自动化测试元素定位GLM-OCR / Qwen3.6-27B纯文字提取用 GLM,复杂语义用 Qwen
截图差异比对Gemma-4-31B-it / Qwen3.6-27B视觉理解 + 指令跟随

通用原则:纯文字提取 → GLM-OCR;需要理解视觉语义 + 精确输出 → Qwen3.6-27B;对 prompt 不敏感的场景 → Gemma-4-31B-it。MiniCPM-V-4.6 在本次测试中没有找到明显优势场景,暂时搁置。

写于把 --mmproj 参数加进启动命令之后。以前觉得多模态模型离我很远,没想到一个参数的距离,就能让本地模型"看见"世界。四个模型各有优劣,选对了就是利器,选错了就是浪费显存。

参考资料