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.5 | 1.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-chat | 1.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-224 | 1.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-1 | 1.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 脚本路径在第四步一并给出
- 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" - 02
装依赖,确认 Kosmos2_5 类存在
Kosmos2_5ForConditionalGeneration 是较新版本 transformers 才有的原生实现,装完先 import 一下验证,省得跑到一半才发现版本不够。
pip install -U transformers accelerate pillow && python -c "from transformers import Kosmos2_5ForConditionalGeneration; print('ok')" - 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) - 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 —
