BLIP(Bootstrapping Language-Image Pre-training)出自 Salesforce AI Research,用「描述器 + 过滤器」自举清洗网络图文对,一套权重同时吃下图像描述、视觉问答、图文检索三类任务。它最出名的身份不是排行榜冠军,而是流水线里的默认零件:`Salesforce/blip-image-captioning-base` 每月下载量超过 205 万次,`blip-image-captioning-large` 也有 48 万次,pharmapsychotic 的 CLIP Interrogator 把 BLIP 和 CLIP 串起来做提示词反推,默认配置占用约 6.3GB 显存,调用 `config.apply_low_vram_defaults()` 后降到约 2.7GB。
有一件事必须先说清楚:GitHub 上的 `salesforce/BLIP` 原始仓库已于 2026 年 3 月 3 日归档转为只读,首页明确标注 DEPRECATED 并建议不要用于生产或敏感场景,那份代码最后验证的环境还停留在 PyTorch 1.10。这不代表 BLIP 不能用了——权重仍在 Hugging Face 上正常分发,维护路径转移到了 LAVIS(BSD-3-Clause)和 HF Transformers 的 `BlipForConditionalGeneration` / `BlipForQuestionAnswering` / `BlipForImageTextRetrieval` 三个任务类。别再照着 2022 年的 README 手工 clone 原仓库了。
整条家族线也早已往前走了好几代:BLIP-2(MIT 许可)用 12 层 Q-Former 把冻结的 ViT 和冻结的 LLM 桥起来,32 个 query token 就把视觉信息压进语言模型;InstructBLIP 加上视觉指令微调;xGen-MM(对外称 BLIP-3,Apache 2.0)换成 Phi-3 Mini 底座、支持多图交错;最新的 BLIP3o-NEXT(arXiv 2510.15857)直接把自回归和扩散缝在一起做图像生成,用 Qwen3 做骨干、GRPO 做强化。每一代的显存需求差着一个数量级,选错卡不是慢一点的问题,是根本装不下。
01 —
BLIP 家族版本与显存对照
从 2.47 亿参数到 122 亿参数,同一个名字底下差着近 50 倍
| 版本 | 参数量 | 显存 | 上下文 | 说明 |
|---|---|---|---|---|
| Salesforce/blip-image-captioning-base | 约 247M(ViT-B/16) | fp32 权重 0.99GB / fp16 约 0.5GB,实际推理 3–4GB 够用 | 384×384 图像 + 短文本 | 月下载 205 万次的批量打标主力。速度快、显存几乎不占,跑 kohya_ss、ComfyUI 打标节点默认就是它。 |
| Salesforce/blip-image-captioning-large | 469,733,436(ViT-L/16,视觉塔 24 层 / 1024 维) | fp32 safetensors 1.88GB / fp16 约 0.94GB | 384×384 图像,patch 16 | 描述更细、名词更准的一档。注意 config 里 `max_length` 默认只有 20,不显式传 `max_new_tokens` 就会被截成半句话。 |
| blip-vqa-base / blip-itm-large-coco | 384,672,572 / 约 446M | fp32 1.54GB / 1.78GB,fp16 折半 | 384×384,size_divisor 32 | VQA 做单图问答,ITM 做图文匹配打分(检索重排)。归一化用 mean [0.481, 0.458, 0.408],别拿 ImageNet 那组去套。 |
| BLIP-2 opt-2.7b / flan-t5-xl | 3,744,761,856 / 3.94B | fp16 7.21GB,int8 3.61GB,int4 1.8GB(fp32 需 14.43GB) | Q-Former 32 query token,图文融合维度 256 | MIT 许可,可商用。冻结 ViT + 冻结 LLM,只训中间那层 Q-Former,零样本 VQAv2 上以 1/54 的可训练参数超过 Flamingo-80B 8.7%。 |
| BLIP-2 flan-t5-xxl / InstructBLIP vicuna-13b | 12,229,596,672 / 约 13B | fp16 约 24.5GB / 26GB,必须上 32GB 以上的卡 | 指令跟随长文本输出 | 家族里最能「讲道理」的一档。flan-t5-xxl 是 MIT,但 vicuna-7b/13b 挂的是 other 研究许可(LLaMA 血统),商用要走 flan-t5 或 InstructBLIP-flan-t5-xl(4,022,969,088 参数,MIT)。 |
| xGen-MM(BLIP-3)/ BLIP3o-NEXT-SFT-3B | 4,359,257,219 / 4,817,060,361 | bf16 权重 8.72GB / 9.67GB | 多图交错输入 / 图像生成 | 当前仍在维护的一支,全部 Apache 2.0。xgen-mm-phi3-mini-interleave-r-v1.5 单图基准均分 65.1、QBench-2 多图 75.1(非交错版仅 52.4);BLIP3o-NEXT 用 `blip3oQwenForCausalLM` 架构、Qwen3 骨干,自回归 + 扩散做生成。 |
02 —
按场景选卡:BLIP 各代该租哪张
权重小的别浪费大卡,24.5GB 的别硬塞 24GB —— 显存对不上就是直接 OOM
BLIP v1 批量打标 / VQA / 图文检索(fp16,base 或 large)
RTX 3090 24GB$0.193/卡·时
权重不到 1GB,24GB 显存可以把 batch 拉到很大摊薄前处理开销,而这是我们整个网络里每小时最便宜的现代架构卡。
BLIP-2 opt-2.7b / flan-t5-xl、xGen-MM 4B 交互式推理
RTX 4090 24GB$0.540/卡·时
fp16 权重 7.21GB、bf16 8.72GB,24GB 装完还剩大半给 KV 和图像 token,单请求延迟比 3090 明显低一档。
BLIP-2 flan-t5-xxl、InstructBLIP vicuna-13b 全精度评测
RTX A6000 48GB$0.817/卡·时
fp16 权重就要 24.5GB,32GB 卡加上每图约 500 个占位 token 的激活很容易顶格,48GB 才是不用反复调 batch 的档位。
BLIP-2 全参数微调(Adam fp16 优化器态约 28.86GB)或 BLIP3o-NEXT 训练
A100 SXM4 80GB$1.088/卡·时
训练显存是推理的四倍,80GB + NVLink 才能不上梯度检查点就把 opt-2.7b 整个塞进去;单节点最多 14 卡可直接扩到多卡数据并行。
03 —
十分钟把 BLIP 跑起来
PyTorch 预置镜像开机即用,从零到第一条 caption 不需要编译任何东西
- 01
开实例,装依赖,避开 transformers v5 的坑
在 console.nexgpu.net 选 PyTorch 预置镜像开一台 RTX 3090 24GB,SSH 或 Jupyter 进去即可。要特别注意:transformers v5 已经移除了 `image-to-text` pipeline,网上大量 2023 年的 BLIP 教程直接照抄会报错,正确做法是直接加载任务类;另外 `BlipModel` 也已标记废弃,按用途换成 `BlipForConditionalGeneration` / `BlipForQuestionAnswering` / `BlipForImageTextRetrieval`。
pip install transformers accelerate pillow && export HF_HOME=/workspace/hf-cache - 02
用 fp16 加载权重
large 版 fp32 是 1.88GB,转 fp16 后不到 1GB,加载几秒就完。把 HF_HOME 指到持久卷上,下次开实例不用重新拉权重——BLIP 的权重体积小,缓存一份的存储成本可以忽略不计。
model = BlipForConditionalGeneration.from_pretrained("Salesforce/blip-image-captioning-large", dtype=torch.float16).to("cuda") - 03
生成 caption,务必显式设 max_new_tokens
这是 BLIP 最高频的「模型是不是坏了」问题:config.json 里 `max_length` 默认是 20,什么都不传就只出半句。显式给 `max_new_tokens`,配合 beam search 质量会稳定很多。批量跑的时候把图片列表一次性喂给 processor,让 GPU 吃满。
out = model.generate(**inputs, max_new_tokens=48, num_beams=3); print(processor.batch_decode(out, skip_special_tokens=True)[0]) - 04
需要问答能力就上 BLIP-2,显存不够就量化
opt-2.7b 是 37.4 亿参数,fp16 要 7.21GB。真要在小卡上跑,int8 降到 3.61GB、int4 降到 1.8GB,配合 bitsandbytes 一行搞定。注意 transformers 4.46 之后 BLIP-2 processor 会提示补 `processor.num_query_tokens`,并把文本扩展成每图约 500 个 `<image>` 占位符——文本千万别被截断,否则 embedding 合并会直接失败。
model = Blip2ForConditionalGeneration.from_pretrained("Salesforce/blip2-opt-2.7b", quantization_config=BitsAndBytesConfig(load_in_4bit=True), device_map="auto")
一笔真实的打标账
BLIP 的成本结构和大语言模型完全相反:权重小到可以忽略,数据集才是大头。blip-image-captioning-large 的 fp16 权重不到 1GB,按 $0.414/GB·月 存一整个月也就 $0.41。真正花钱的是算力时间和图片本身。算一遍:RTX 3090 24GB 是 $0.193/卡·时,跑满 6 小时把一批图过完,计算费 0.193 × 6 = $1.158。同一批图想再用 BLIP-2 flan-t5-xxl 做一轮更细的复核,fp16 权重约 24.5GB,得换 RTX A6000 48GB,$0.817/卡·时 × 2 小时 = $1.634。两步加起来 $2.79,不到三美元。真正要盯的是存储:200GB 原始图片放在盘上是 $0.414/GB·月 × 200 = $82.80/月,比算力贵 30 倍。计算费在实例停止的那一秒就停止计量,存储费则要到卷被销毁才停——所以 BLIP 类任务的正确姿势是打完标立刻把结果导出(出网 $0.0081/GB × 200 = $1.62),然后销毁卷。全程按秒计费,没有最低消费、没有开通费、不用提配额工单。
04 —
