1. VLM基础与部署概述
大家好,欢迎来到这门课。我是你们这趟旅程的向导。
视觉语言模型,简称 VLM,说白了就是让计算机同时看懂图像和文字。它不像传统 CV 模型只会输出“猫”或“狗”这样的标签,而是能理解图片里的内容,并用自然语言跟你对话。
举个例子,你给它一张厨房的照片,它不仅能认出“有个苹果”,还能告诉你“苹果放在灶台上,旁边有一把刀”。这种能力,在自动驾驶、工业质检、医疗影像分析里都特别有用。
1.1 什么是视觉语言模型
VLM 的核心,是把图像和文本映射到同一个语义空间里。这样模型就能计算“一张猫的图片”和“一只可爱的猫”这两个概念有多接近。
我个人习惯把 VLM 分成三类:
- 双塔模型:图像和文本各自独立编码,最后算相似度。代表作是 CLIP。
- 融合模型:图像特征和文本特征在中间层就交互了。BLIP 就是典型。
- 生成式模型:以图像为输入,直接生成文本描述。LLaVA 走的就是这条路。
关键认知:VLM 不是简单的“图像分类 + 文本生成”,而是两种模态的对齐与交互。这个区别决定了部署时的优化方向完全不同。
1.2 典型架构速览
CLIP —— 双塔对比学习
CLIP 是 在 2021 年发布的。它用 4 亿对图文数据训练,核心思想很简单:把图片和对应的文本拉近,把不相关的推远。
部署时 CLIP 有两个独立的编码器。我在项目中遇到过一个问题:图像编码器用 ResNet 或 ViT,文本编码器用 Transformer。这两个模型大小不一样,显存分配要特别小心。
# CLIP 推理伪代码
image_features = image_encoder(image) # [batch, 512]
text_features = text_encoder(text) # [batch, 512]
# 归一化后算余弦相似度
similarity = cosine_similarity(image_features, text_features)
BLIP —— 多任务融合
BLIP 比 CLIP 更进一步。它不光做对比学习,还加了图文匹配和语言建模两个任务。说白了,BLIP 既能理解图文关系,也能生成描述。
部署 BLIP 时要注意,它有三个损失函数,但推理时通常只用其中一个分支。嗯,这里有个坑:很多人把训练时的完整模型直接拿来部署,白白浪费了显存。
LLaVA —— 视觉指令微调
LLaVA 是 2023 年的工作,它把 CLIP 的视觉编码器和 LLaMA 语言模型连在一起,中间加一个投影层。你想想看,这就像给大语言模型装了一双眼睛。
部署 LLaVA 最大的挑战是模型太大。7B 参数起步,13B 是常态。我曾经在边缘设备上试过,量化到 4-bit 才能勉强跑起来。
我的建议:刚接触 VLM 部署,先从 CLIP 入手。它结构简单,踩坑成本低。等把双塔模型的部署流程跑通了,再挑战 BLIP 和 LLaVA。
1.3 部署面临的三大挑战
把 VLM 从研究搬到生产环境,不是件轻松的事。我总结了三个绕不开的坎:
| 挑战 | 原因 | 典型表现 |
|---|---|---|
| 延迟 | 双编码器 + 大模型,推理链路长 | 单次推理 > 500ms,无法实时 |
| 显存 | 视觉编码器 + 语言模型参数巨大 | 7B 模型 FP16 占用 14GB |
| 精度 | 量化、剪枝后性能下降明显 | CLIP 的 Top-1 准确率掉 3-5% |
延迟问题
VLM 的推理流程通常是:图像预处理 → 视觉编码 → 文本编码(或融合)→ 后处理。每一步都在消耗时间。
我记得有一次给客户做实时质检,CLIP 推理一次要 800ms。后来发现是图像预处理用了 CPU,改成 GPU 上的 torchvision 后,直接降到 200ms。
显存瓶颈
显存是部署时最现实的约束。一个 ViT-L 编码器就要 1.2GB,加上 7B 的语言模型,FP16 下总共超过 15GB。消费级显卡根本扛不住。
我曾经在 T4 显卡(16GB)上部署 LLaVA-7B,量化到 8-bit 后勉强能跑,但 batch size 只能设为 1。生产环境里,这吞吐量完全不够用。
避坑指南:不要盲目追求大模型。我曾经为了“效果更好”选了 13B 的 LLaVA,结果延迟和显存双双超标,最后不得不回退到 7B 版本。选模型时,先定好延迟和显存的硬约束,再挑效果最好的。
精度损失
为了降低延迟和显存,我们通常会做量化、剪枝或蒸馏。但这些操作会带来精度损失。
CLIP 模型对量化特别敏感。我试过把 ViT 编码器量化到 INT8,ImageNet 上的 Top-1 准确率从 76.2% 掉到了 72.8%。后来改用混合精度,只量化 attention 层,才把损失控制在 1% 以内。
1.4 VLM 部署知识体系
下面这张图,是我梳理的 VLM 部署核心知识结构。你可以把它当成这门课的地图。
这张图把 VLM 部署拆成了三个维度:模型选型、推理优化、部署框架。每个维度下面又有具体的子方向。这门课会沿着这个结构,一章一章地展开。
学习建议:别急着上手调代码。先把这张图里的每个节点搞明白是干什么的。我见过太多人一上来就量化模型,结果连模型结构都没搞清楚,出了问题根本不知道从哪排查。
好了,第一章就到这里。我们先把基础打牢,后面每一章都会围绕这张图里的一个具体方向深入。准备好了吗?