跳到主要内容

视觉语言模型

PaliGemma 本地部署:3B 权重只有 6.1GB,一张 24GB 卡接管检测、OCR 与分割

PaliGemma 2 是 SigLIP-So400m 视觉塔加 Gemma 2 语言塔拼出来的迁移型视觉语言模型,3B / 10B / 28B 三档的 bf16 权重分别是 6.1GB、19.3GB、55.3GB。在 NexGPU 上,能把 3B 跑到饱和的最便宜档位是 RTX 3090 24GB,$0.193/卡·时。

PaliGemma 不是拿来聊天的。Google 自己的模型卡写得很直白:它不是多轮对话机器人,只服务「一张图 + 一句指令」的单轮调用。它的输入是固定正方形分辨率的图像(224、448、896 三选一)加一段前缀,输出是描述、答案、边界框坐标,或者分割码字。整个家族用 PaliGemmaForConditionalGeneration 这一个类加载,参数量按 safetensors 实测是 3,033,127,152(3B)、9,663,523,568(10B)、27,651,371,760(28B),语言塔对应 Gemma 2 的 2B / 9B / 27B。

PaliGemma 的最新一代就是 PaliGemma 2,没有 PaliGemma 3。Gemma 家族的通用多模态能力已经并进了主线模型——Gemma 3 起就原生带视觉,Gemma 4 全系支持可变长宽比图像乃至视频和音频。所以如果你要的是一个能对话、能读长文档、能多图推理的助手,PaliGemma 不是答案。它今天仍然被大量下载,是因为另一件事:它是一个专门为「迁移」设计的底座。词表里预留了 1024 个 <loc0000>–<loc1023> 位置 token 和 128 个 <seg000>–<seg127> 分割码字,任务用文本前缀切换(cap、caption、describe、ocr、answer、question、detect、segment),把一个视觉任务微调成一个只干这件事的小模型,PaliGemma 2 3B 是目前性价比最高的起点之一。Hub 上下载量最高的 PaliGemma 2 检查点是 paligemma2-3b-ft-docci-448,一个专做长细粒度图像描述的 ft 版本,这就是它真实的使用姿势。

自建时要先知道三件事。第一,Hub 上是 gated 仓库,必须先在页面上同意 Gemma 使用条款并用 token 登录,CI 里直接 wget 是拉不动的。第二,官方权重只发 bf16,Turing 的 Tesla T4 和 Volta 的 V100 没有原生 bf16,Gemma 系在 fp16 下又容易把激活值撑到溢出,所以别拿这两张卡跑原生精度。第三,GGUF 这条路基本是空的——Hub 上只有几个初代 PaliGemma 的社区转换,下载量三位数,真正能用的量化路线是 bitsandbytes NF4、torchao int4(transformers 官方文档里就用 28B 做了 int4_weight_only 的示例)以及 Mac 上的 MLX 4-bit 社区权重。想上生产服务,vLLM 已经把 PaliGemmaForConditionalGeneration 列进支持清单,LoRA 和流水线并行都打勾。

01 —

PaliGemma 全部检查点与显存对照

mix 开箱即用,pt 只是底座,ft 是成品——这三个后缀选错一个,你拿到的就是一串乱码。

版本参数量显存上下文说明
google/paligemma2-3b-mix-4483.03B(SigLIP-So400m + Gemma 2 2B)bf16 权重 ≈6.1GB,整卡建议留 10GB;int4 量化后权重 ≈1.6GB448×448 → 1024 个图像 token最常用的起手式。mix 是多任务混合微调过的,caption / ocr / detect / segment 前缀全部开箱可用,24GB 卡上还能开大 batch 做流水线打标。
google/paligemma2-10b-mix-4489.66B(Gemma 2 9B 语言塔)bf16 权重 ≈19.3GB,加 KV 与激活约 21–22GB;int4 ≈5GB448×448 → 1024 个图像 token3B 在图表、表格、密集小字上吃力时的下一档。19.3GB 卡在 24GB 上会很紧,32GB 才算舒服。
google/paligemma2-28b-mix-44827.65B(Gemma 2 27B 语言塔)bf16 权重 ≈55.3GB,必须 80GB 单卡;torchao int4 后 ≈15GB448×448 → 1024 个图像 token家族天花板,下载量只有 3B 的百分之一——绝大多数人用不上,但它是 transformers 官方 int4 量化示例里点名的那个模型。
google/paligemma2-3b-pt-896(pt 系列,224 / 448 / 896 三种分辨率)3.03B / 9.66B / 27.65B 三档都有 pt3B-896 权重仍是 ≈6.1GB,但 4096 个图像 token 会把预填充显存与算力顶上去896×896 → 4096 个图像 token纯预训练底座,只给你微调用。直接拿它提问会输出无意义内容,这不是模型坏了。896 分辨率是做发票、公式、乐谱、分子式这类密集识别时才值得付的代价。
google/paligemma2-3b-ft-docci-448 / paligemma2-10b-ft-docci-4483.03B / 9.66Bbf16 ≈6.1GB / ≈19.3GB448×448 → 1024 个图像 token在 DOCCI 上微调过的长细粒度描述专用版,也是 Hub 上下载量最高的 PaliGemma 2 检查点。要「把一张图写成一段准确的长描述」,直接用它,别自己从 pt 训。
google/paligemma-3b-mix-448(初代 PaliGemma)2.92B(Gemma 1 2B 语言塔)main 分支存的是 fp32,下载就是 ≈11.7GB;加 revision='bfloat16' 只要 ≈5.8GB448×448 → 1024 个图像 token;896 版本同样存在初代只有 3B 一个尺寸。除非要复现旧论文结果或用它的 ft-docvqa / ft-refcoco-seg 等老检查点,新项目直接上 PaliGemma 2。

02 —

按场景选卡:PaliGemma 到底需要多大显存

权重体积按 safetensors 实测参数量 × 2 字节算,剩下的留给图像 token、KV cache 和激活。

  • 3B mix / ft-docci 批量推理,给几万到几十万张图打 caption、ocr、detect 标签

    RTX 3090 24GB$0.193/卡·时

    6.1GB 权重之外还剩 17GB 以上,可以把 batch 开满做流水线,而且 Ampere 原生支持 bf16,不用担心 Gemma 在 fp16 下溢出。

  • 10B mix-448 单卡 bf16 推理,或 3B 上 896 分辨率跑密集文档

    RTX 5090 32GB$0.723/卡·时

    19.3GB 权重放在 24GB 上余量不足以支撑 4096 个图像 token 的全注意力预填充,32GB 是这一档最省的安全线。

  • 3B / 10B LoRA 微调,把 detect 或 ocr 训成自己场景的专用头

    RTX A6000 48GB$0.817/卡·时

    LoRA 只训适配器,显存主要吃在激活和 448/896 的长图像序列上,48GB 能同时容下更大 batch 和梯度检查点关闭时的峰值。

  • 28B mix-448 原生 bf16 推理,或 3B 全参数微调(AdamW 优化器状态)

    A100 PCIE 80GB$0.824/卡·时

    28B 光权重就 55.3GB;3B 全参微调按 bf16 权重 + 梯度 + fp32 主权重与两组动量粗算也在 48GB 以上,80GB 单卡是唯一不用切分的选择。

03 —

从零把 PaliGemma 2 跑起来

四步:拉权重、跑第一条推理、把边界框解出来、上 vLLM 服务。

  1. 01

    开机器、装依赖、登录 Hub

    在 NexGPU 控制台选一台 RTX 3090 24GB,直接用 PyTorch 预置镜像开机,SSH 或 Jupyter 进去。PaliGemma 2 是从 transformers 4.47 起进主干的,版本别太旧。仓库是 gated 的,必须先在 Hugging Face 网页上同意 Gemma 条款,再用 token 登录,否则下载会 403。

    pip install -U 'transformers>=4.47' accelerate pillow && huggingface-cli login
  2. 02

    bf16 加载,跑通第一条单轮调用

    用 PaliGemmaForConditionalGeneration 加 PaliGemmaProcessor。注意 PaliGemma 的提示词末尾必须带一个换行符,这是它训练时的输入格式的一部分,processor 会替你补上——所以请走 processor,不要自己手搓 input_ids。任务靠前缀切换:cap {lang}、describe {lang}、ocr、answer {lang} {question}、detect {对象}、segment {对象},多个对象之间用分号隔开。

    model = PaliGemmaForConditionalGeneration.from_pretrained('google/paligemma2-3b-mix-448', torch_dtype=torch.bfloat16, device_map='auto').eval()
  3. 03

    把 detect 输出的 loc token 还原成像素坐标

    detect 前缀返回的不是 JSON,而是一串 <loc0000>–<loc1023> 位置 token 后面跟标签。四个数一组,顺序是 ymin、xmin、ymax、xmax,取值是 0–1023 的归一化格;先除以 1024,再把 y 乘图像高度、x 乘图像宽度,才是真实像素。segment 前缀多返回 16 个 <seg000>–<seg127> 码字,需要配套的 VQ-VAE 解码器才能还原成掩码,这一步官方示例经常被跳过,是自建时最容易卡住的地方。

    vals = [int(v) / 1024 for v in re.findall(r'<loc(\d{4})>', out)]  # ymin, xmin, ymax, xmax
  4. 04

    上 vLLM,把它变成一个 HTTP 服务

    vLLM 的支持清单里 PaliGemmaForConditionalGeneration 明确在列,PaliGemma 和 PaliGemma 2 都算数,LoRA 和流水线并行都支持。因为它是单轮、单图、短输出的模型,max-model-len 给到 2048 就够——图像 token 在 448 分辨率下占 1024,剩下的留给前缀和答案。10B 这一档建议直接开在 RTX 5090 32GB 上。

    vllm serve google/paligemma2-10b-mix-448 --dtype bfloat16 --max-model-len 2048

一次真实的打标任务要花多少钱

假设你要把 10 万张单据图跑成结构化标签。租 1 张 RTX 3090 24GB($0.193/卡·时)跑 paligemma2-3b-mix-448:先用 LoRA 在自有的 8000 张标注样本上微调 10 小时,再批量推理 20 小时打完 detect + ocr 标签。算力 =(10 + 20)× $0.193 = $5.79。存储按 30GB 的卷(6.1GB 权重 + 数据集 + 产物)留半个月算 = 30 × $0.414 × 0.5 = $6.21;导出 2GB 结果 = 2 × $0.0081 = $0.016。合计约 $12.02——注意存储比算力还贵,因为 NexGPU 的算力是按秒计量、实例一停就不再计费,而存储要到你销毁卷为止都在走,所以跑完记得销毁。如果精度不够要换 10B,改用 RTX 5090 32GB($0.723/卡·时),同样 30 小时是 30 × $0.723 = $21.69,仍然不到一杯咖啡钱乘以二十。没有起租时长、没有开通费、没有配额申请。

04 —

常见问题

PaliGemma 本地部署最低需要多大显存?16GB 够吗?

纯算权重,PaliGemma 2 3B 的 bf16 是 6.1GB,16GB 卡确实装得下。但真正的坑不是容量而是精度:官方只发 bf16,Tesla T4(Turing)和 Tesla V100(Volta)都没有原生 bf16,而 Gemma 系在 fp16 下激活值容易溢出出 NaN。所以最低可用配置不是「16GB」,而是「一张原生支持 bf16 的卡」。NexGPU 上最便宜的这类卡是 RTX 3090 24GB,$0.193/卡·时,比 T4 的 $0.298 还便宜,显存还多 8GB。

我下了 paligemma2-3b-pt-224,问它图里有什么,它只会输出乱码或复读,是模型坏了吗?

没坏,是拿错了检查点。pt 是纯预训练底座,Google 明确说它只用于进一步微调;能直接问的是 mix(多任务混合微调)和 ft(特定任务微调)两类。把模型 ID 换成 google/paligemma2-3b-mix-448 就正常了。另外提示词末尾那个换行符是训练格式的一部分,务必走 PaliGemmaProcessor 而不是自己拼 token。想同时把 pt 和 mix 拉下来对比一下,在 NexGPU 上开一台 3090 跑半小时也就一毛多钱。

PaliGemma 有 GGUF 吗?能不能用 llama.cpp 或 Ollama 跑?

官方没有 GGUF,Hub 上只有寥寥几个初代 PaliGemma 的社区转换,下载量都在三位数,llama.cpp 这条路上基本没人走通。真正可用的量化路线有三条:bitsandbytes 4-bit(NF4)、torchao int4_weight_only(transformers 官方文档里就是拿 28B 演示的,group_size=128),以及 Mac 上的 mlx-community 4-bit 权重。3B 量化到 int4 大约 1.6GB,但收益不大——本来就只有 6.1GB,与其折腾量化,不如在 NexGPU 上花 $0.193/卡·时 直接跑原生 bf16。

PaliGemma 和 Gemma 3 / Gemma 4 的多模态该怎么选?还有必要用 PaliGemma 吗?

分工很清楚。要对话、要多图、要长上下文、要通用理解,用 Gemma 3 或 Gemma 4——它们原生带视觉,PaliGemma 明确不是多轮聊天模型。但如果你的目标是「把一个视觉任务做到极致且跑得便宜」,比如只做证件字段抽取、只做货架商品检测、只做医学影像描述,PaliGemma 2 的迁移设计、内置 loc / seg token 和 3B 的小体积仍然是更划算的起点,DOCCI 微调版是全家族下载量第一就是证据。两条路都可以在 NexGPU 上开两台机器同时试,按秒计费,谁赢用谁。

detect 输出的 <loc0512> 是什么意思?segment 的 <seg###> 怎么变成掩码?

<locXXXX> 是词表里预留的 1024 个位置 token,四个一组表示一个框,顺序是 ymin、xmin、ymax、xmax,数值除以 1024 得到归一化坐标,再分别乘图像高和宽还原像素。segment 会在四个位置 token 后再吐 16 个 <seg000>–<seg127> 码字,这是 VQ-VAE 的码本索引,必须用配套解码器才能还原成掩码——这一步是自建时最常卡住的环节,建议在租来的机器上一次性把解码器和后处理脚本调通再收工。NexGPU 提供 SSH、Jupyter、Web 终端和 REST API,调试环境随你挑。

PaliGemma 可以商用吗?许可证是什么?

许可证是 Gemma Terms of Use,不是 Apache 或 MIT。它允许商业使用,但附带使用限制条款和再分发时的义务,且 Hub 仓库是 gated 的,必须先在页面上接受条款、用 token 登录才能下载——CI 里裸 wget 会直接 403。上生产前请让法务读一遍条款原文。至于跑在哪,NexGPU 覆盖 51 个国家和地区、1,175 个已验证可租节点、2,498 张 GPU,权重和数据都留在你自己的实例里,我们只提供机器。

开始使用 NexGPU

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

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