跳到主要内容

多模态文档视觉语言模型

Kosmos-2.5 本地部署:1.3B 参数,把整页文档读成带坐标的 Markdown

微软 unilm 出品,MIT 许可,bf16 权重不到 3GB —— 一张 RTX 3090 就能把扫描件、票据、论文页转成结构化文本,$0.193/卡·时起。

Kosmos 是微软 unilm 项目下的一条多模态线,前后四代职责完全不同:Kosmos-1 只发了论文没放权重;Kosmos-2 把「目标接地」写进语言模型,输出 [文本片段](框) 这种 Markdown 式链接(microsoft/kosmos-2-patch14-224,1.6B);Kosmos-2.5 掉头去做真正吃钱的活 —— 文本密集图像的机器阅读(microsoft/kosmos-2.5,1.3B);Kosmos-2.5-chat 在它上面加了文档问答。全线 MIT 许可,权重公开在 Hugging Face,商用没有附加条款。搜「Kosmos 本地部署」的人九成想要的是 2.5 这一代。

它小得有点反直觉。kosmos-2.5 仓库里两个 safetensors 分片加起来 5.5GB,是 fp32 存的,反推约 13.7 亿参数;转成 bf16 只剩 2.8GB 左右。真正卡住你的不是显存,是序列预算:视觉侧是 Pix2Struct 风格的变分辨率 ViT(18 层、hidden 1536、max_num_patches 4096),重采样后固定占掉解码器 2048 个 latent query token,而解码器的 max_position_embeddings 只有 4096。一整页图喂进去,留给输出的就剩 2000 token 出头 —— 官方示例把 max_new_tokens 写成 1024 正是这个原因,超长表格页得自己切块再拼。

另一头全是工程细节。vLLM 的支持模型列表里没有 Kosmos2_5 和 Kosmos2 架构,你走的是 transformers 单卡推理这条路;unilm 仓库那套 inference.py 硬依赖 FlashAttention-2,只能跑 Ampere / Ada / Hopper(3090、4090、A100、H100),Turing 的 T4 和 Volta 的 V100 直接出局。transformers 文档里的 `<md>` 示例还埋了个坑:它拿一个从未定义的 dtype 变量去 cast flattened_patches,照抄就是 NameError;processor 返回的 height / width 也必须先 pop 出来才能喂给 generate。这类事租一小时卡试出来,比对着文档猜快得多 —— NexGPU 的 RTX 3090 24GB 是 $0.193/卡·时,按秒计费,试错成本比你在本机编译 flash-attn 的时间还便宜。

01 —

Kosmos 各代权重与显存对照

参数量按 Hugging Face 仓库里权重文件的实际体积反推,全部 MIT 许可

版本参数量显存上下文说明
microsoft/kosmos-2.51.3B(fp32 权重 5.5GB 反推约 13.7 亿)fp32 加载 ~5.5GB / bf16 ~2.8GB,建议 16GB 起步解码器 4096 token,图像固定占 2048基座权重,靠 `<ocr>` 和 `<md>` 两个提示词切任务:前者吐带 `<bbox>` 坐标的逐行文本,后者直接吐带结构和样式的 Markdown。预训练语料 3.574 亿页文档。
microsoft/kosmos-2.5-chat1.3B,与基座同架构bf16 ~2.8GB,与基座一致4096 token,同样扣掉 2048 图像 token文档 VQA 微调版,用 "USER: {} ASSISTANT:" 模板问「这张收据的小计是多少」。论文称它在文本密集 VQA 上能追平大它五倍的模型(1.3B vs 7B)。
kosmos-2.5 原始 ckpt.pt(unilm 路径)1.3B,单文件 6.17GB配 FlashAttention-2,24GB 卡跑整页最稳同为 4096给 microsoft/unilm/kosmos-2.5 下的 inference.py 用的原生检查点。README 明说这份权重比论文里那版多训了几步,且只支持 Ampere / Ada / Hopper。
microsoft/kosmos-2-patch14-2241.6B(fp32 权重 6.66GB 反推约 16.6 亿)fp32 ~6.7GB / bf16 ~3.3GB解码器 2048 token,图像只占 64 个 latent query做接地与指代,不是做 OCR。输入被压成定长 224×224,坐标量化到 32×32 网格(1024 个 patch_index token),所以它给的是「大致在哪」,不要拿来当检测器用。
Kosmos-11.6B(论文口径)无公开权重,无法本地部署只有论文,Hugging Face 上没有官方仓库。看到教程说「下载 Kosmos-1」基本都是张冠李戴,实际指的是 Kosmos-2。

02 —

跑 Kosmos 该租哪张卡

按 NexGPU 实际可租机型的列表价,注意 FlashAttention-2 对架构的硬要求

  • 第一次试跑:拉权重、验证 `<md>` 和 `<ocr>` 输出格式

    RTX 3090 24GB$0.193/卡·时

    Ampere 架构原生支持 bf16 和 FlashAttention-2,24GB 装 2.8GB 权重加 4096 patch 的视觉前向绰绰有余,而且它是整个价目表里最便宜的一张卡 —— 比 16GB 的 T4 还便宜三分之一,却什么都能跑。

  • 生产批量转档:几十万页 PDF / 扫描件转 Markdown

    RTX 4090 24GB$0.540/卡·时

    同样是 24GB,但 Ada 的算力和显存带宽让整页 4096 patch 的视觉编码快一大截,单卡还能同时开多路 batch generation(processor 支持传 image 列表)。

  • 垂直场景微调:票据版式、中文表格、专业期刊排版

    RTX A6000 48GB$0.817/卡·时

    1.3B 全参微调用 AdamW,权重加梯度加优化器状态就要二十多 GB,再叠上 4096 patch 视觉塔和 4096 长序列的激活,48GB 才不用到处加 gradient checkpointing。想更快就换 A100 PCIE 80GB,$0.824/卡·时 只贵不到一分钱。

  • 大规模流水线:百万页级归档、多进程并行喂图

    A100 SXM4 80GB$1.088/卡·时

    80GB 能在一张卡上并排装多个模型副本吃满 SM,NexGPU 单节点最多 14 卡,把 IO 密集的 PDF 拆页和 GPU 推理彻底解耦。

03 —

四步把 Kosmos-2.5 跑起来

走 transformers 原生路径,不需要编译 flash-attn;unilm 脚本路径在第四步一并给出

  1. 01

    开实例,把权重拉到本地盘

    在 console.nexgpu.net 选一张 RTX 3090 24GB 起实例,挑 PyTorch 预置镜像。仓库总共约 11.7GB,其中 safetensors 分片 5.5GB、原生 ckpt.pt 6.17GB —— 只走 transformers 的话可以不下 ckpt.pt。

    hf download microsoft/kosmos-2.5 --local-dir ./kosmos-2.5 --exclude "ckpt.pt"
  2. 02

    装依赖,确认 Kosmos2_5 类存在

    Kosmos2_5ForConditionalGeneration 是较新版本 transformers 才有的原生实现,装完先 import 一下验证,省得跑到一半才发现版本不够。

    pip install -U transformers accelerate pillow && python -c "from transformers import Kosmos2_5ForConditionalGeneration; print('ok')"
  3. 03

    整页转 Markdown:踩掉 height/width 和 dtype 两个坑

    processor 会额外返回 height 和 width(原图缩放前的尺寸),必须先 pop 出来再喂 generate,否则报参数错误;flattened_patches 还得手动 cast 到模型 dtype,官方文档示例里那个 dtype 变量根本没定义。

    inputs = processor(text="<md>", images=image, return_tensors="pt").to(model.device); h, w = inputs.pop("height"), inputs.pop("width"); inputs["flattened_patches"] = inputs["flattened_patches"].to(torch.bfloat16)
  4. 04

    要坐标就换 `<ocr>`,并把框还原回原图尺寸

    `<ocr>` 模式输出形如 `<bbox><x_12><y_34><x_56><y_78></bbox>` 后跟该行文本,坐标是在缩放后的画布上的,要用 raw_height/height 与 raw_width/width 两个比例乘回去。极端长宽比的长条票据先开预处理再跑,识别率明显不一样。

    python inference.py --do_ocr --image page.png --ckpt ckpt.pt --use_preprocess --hw_ratio_adj_upper_span "[1.5, 5]"

一次真实的批量转档要花多少钱

算一笔十万页扫描件转 Markdown 的账。先用 RTX 3090 24GB 试跑两小时,调提示词、验证输出格式:$0.193 × 2 = $0.386。确认无误后换 RTX 4090 24GB 跑批,假设整批占用 40 小时:$0.540 × 40 = $21.60。存储按 50GB 算(权重 5.5GB + 原始图片 + 输出),median 价 $0.414/GB·月,40 小时约合 40 ÷ 730 = 0.0548 个月,即 50 × 0.414 × 0.0548 = $1.13。结果 Markdown 约 8GB 拖回本地,出网 $0.0081/GB,8 × 0.0081 = $0.065。合计 0.386 + 21.60 + 1.13 + 0.065 = $23.18。没有起租门槛、没有开通费、没有配额申请,实例一停计算立刻停止计费,只有存储会继续算到你销毁它为止。同样这台 4090,包月托管报价通常在三位数美元起。

04 —

常见问题

Kosmos-2.5 本地部署最低需要多大显存?8GB 的卡够不够?

bf16 权重只有 2.8GB,理论上 8GB 能装下,但要注意 from_pretrained 不显式传 dtype 时会按仓库里的 fp32 加载,光权重就 5.5GB,再加 4096 patch 的视觉前向和 2048 图像 token 的 KV,8GB 会非常紧张。稳妥起见按 16GB 往上选。NexGPU 的 RTX 3090 24GB 是 $0.193/卡·时,比任何 16GB 卡都便宜,没必要在显存上省。

Kosmos-2 和 Kosmos-2.5 有什么区别?我该用哪个?

两件完全不同的事。Kosmos-2 做的是接地与指代 —— 给它一张照片,它回「一个雪人」并附上框;输入定长 224×224,坐标只有 32×32 网格精度,文档上的小字它根本看不清。Kosmos-2.5 用变分辨率 ViT 吃到 4096 个 patch,专门读文本密集图像,输出要么是带 `<bbox>` 的逐行文本,要么是整页 Markdown。做文档、票据、表格就选 2.5;做通用图文接地才选 2。两张都不到 3.5GB,在 NexGPU 上开一台 3090 各跑一遍对比,成本不到半美元。

Kosmos-2.5 能用 vLLM 或者 SGLang 部署吗?

不能直接用。vLLM 的支持模型列表里没有 Kosmos2_5 或 Kosmos2 这两个架构,官方部署路径就是 transformers 的单卡推理,或者 unilm 仓库里那份 inference.py。好消息是 1.3B 的模型本来也不需要 PagedAttention 那套重武器,单卡开多进程 + 前面挂个队列就能跑满吞吐。NexGPU 单节点最多挂 14 张卡,横向堆副本比纵向调度框架省事得多。

为什么我在 T4 或 V100 上跑 unilm 的 inference.py 会直接报错?

因为那套代码硬依赖 FlashAttention-2,README 里明确写了只支持 Ampere、Ada、Hopper 架构(A100、3090、4090、H100)。Turing 的 T4 和 Volta 的 V100 不在名单里,V100 连原生 bf16 都没有。要在老卡上跑只能改走 transformers 路径并用 fp16。与其折腾,不如直接开 Ampere 卡 —— NexGPU 的 RTX 3090 24GB $0.193/卡·时,比 Tesla T4 16GB 的 $0.298 还便宜。

想在自己的票据 / 中文表格数据上微调 Kosmos-2.5,要租什么配置?

论文本身就把「用不同提示词做监督微调适配任意文本密集图像任务」当作卖点,kosmos-2.5-chat 就是这么做出来的。1.3B 全参微调用 AdamW,权重加梯度加优化器状态二十多 GB 起步,再算上 4096 patch 视觉塔的激活,48GB 是舒适线。NexGPU 的 RTX A6000 48GB $0.817/卡·时,A100 PCIE 80GB $0.824/卡·时 —— 差不到一分钱却多 32GB,直接上 A100 更划算。

Kosmos 现在还在更新吗?还值得自建吗?

unilm 仓库的 Kosmos 相关更新已经停下来了,微软后续的多模态主力转到了 Florence-2 和 Phi 系列多模态;Hugging Face 上的两个仓库最近一次改动是为了对齐 transformers 的原生实现。但「停止迭代」对自建来说反而是好事:架构冻结、MIT 许可、权重永久可下载、行为可复现,没有 API 涨价和模型下线的风险。1.3B 就能做到 7B 级别的文本密集 VQA 效果,这个性价比至今没被同尺寸模型抹平。在 NexGPU 开一台 RTX 3090 24GB,$0.193/卡·时按秒计费,半小时就能验证它是不是你要的那把刀。

开始使用 NexGPU

无论你是企业研发团队还是独立开发者,都可以在几分钟内跑起第一个任务。

注册即可浏览全网实时价格,无需绑定支付方式。