多模态大模型这两年已经从“学术界论文里的概念”变成了“工程上能直接落地的东西”。如果你想一次搞清楚 SAM、CLIP、BLIP、DALL·E 2 这四类模型分别解决什么问题、怎么装、怎么跑、怎么接到自己的项目里,这篇文章可以按顺序跟读。文章会用“先给结论,再给操作”的方式,把四类模型的原理定位、本地部署、最小验证代码、批量任务思路和常见坑全部串起来,适合准备入门多模态方向、或已经在做图像/文本相关项目想扩展能力的读者。
这套内容不只讲概念,重点是可以直接上手的完整链路:环境怎么配、模型从哪来、显存不够怎么办、批量任务怎么设计、接口怎么调。下面从核心能力速览开始,先把四个模型放在同一张表里做对比,再看各自的部署验证路径。
1. 核心能力速览
| 模型 | 类型 | 主要功能 | 权重是否公开 | 常见使用方式 | 对硬件的压力 |
|---|---|---|---|---|---|
| SAM | 图像分割基础模型 | 根据点、框、文本提示分割任意目标 | 公开,官方权重可下载 | Python 推理、Segment Anything 官方库 | 中等,依赖 GPU,显存建议按模型版本测试 |
| CLIP | 图文对比学习模型 | 计算图像和文本的相似度、零样本图像分类 | 公开,OpenAI 发布 | Hugging Face Transformers、OpenCLIP | 较低,CPU 可做小规模推理 |
| BLIP | 图文理解与生成模型 | 图像描述生成、图文检索、VQA 基础能力 | 公开,Salesforce 发布 | Hugging Face Transformers | 中等,CPU 可跑小模型 |
| DALL·E 2 | 文本生成图像模型 | 根据文本生成图像 | 官方权重未公开,官方以 API 提供服务 | 官方 API,或社区复现研究 | 高,本地复现成本高 |
这四类模型刚好覆盖多模态大模型的主流能力:SAM 做“图像理解中的分割”,CLIP 做“图文对齐”,BLIP 做“图文生成理解”,DALL·E 2 做“文本到图像的生成”。从 2026 年的学习路线来看,这四者也是后续各类多模态大模型的基础组件,值得逐一吃透。
2. 四个模型的定位与核心逻辑
2.1 SAM:分割一切,但需要引导
SAM 全称 Segment Anything Model,核心目标是“分割图像里的任何目标”。它不参与分类,而是根据用户给出的引导信息生成分割掩码。引导方式最常见的是前景点、背景点、边界框,也有文本提示的扩展版本。
SAM 最大的优势在于“泛化能力”。传统分割模型通常绑定了特定类别,而 SAM 不需要固定类别,看到一张新图,只要能给出一个点或框,它就能把目标轮廓切出来。这意味着它可以作为预处理工具:先用 SAM 切出目标区域,再把区域交给 CLIP、BLIP 或其他模型继续处理。
实际使用时,SAM 的输出是一组掩码。官方实现里multimask_output=True时会返回多个候选掩码,因为一个点在不同语义层级上可能对应不同目标。比如点在一辆车的车窗上,可能是“车窗”这一层,也可能被理解成“整辆车”这一层。多候选设计就是为了适应这种歧义。
2.2 CLIP:把图像和文本映射到同一个向量空间
CLIP 的核心理念是图文对比学习。训练阶段同时输入一批图像和一批文本描述,模型要能判断哪些图配哪些文本,哪些不配。最终得到的特征空间里,图像和文本的向量可以直接算相似度。
这个能力带来的直接价值是零样本分类。以前做图像分类,每个类别都要准备训练数据;使用 CLIP 时,只需要把候选类别写成文本标签,比如“a photo of a cat”“a photo of a dog”,让模型计算输入图像和这些文本的相似度,得分最高的就是预测结果。
CLIP 在工程里的定位是“万能对齐器”。它本身不做生成,但可以为其他系统提供理解能力:视频检索、图库管理、电商商品打标、图文排序、多模态 RAG 都可以用 CLIP 作为特征提取层。
2.3 BLIP:偏理解的生成模型
BLIP 属于“图文理解与生成”方向。它能根据图片生成自然语言描述,也能做图文检索,还有一个重要能力是视觉问答的基础部分。BLIP 与 CLIP 的区别在于:CLIP 只做嵌入对齐,输出一个相似度分数;BLIP 真正生成文本内容,输出一句完整描述。
BLIP 系列经历了多轮演进,比如 BLIP-2 引入了 Q-Former 结构,把视觉特征和语言模型桥接起来,显著降低了训练成本。不过从学习路线的角度,先跑通 BLIP 基础版做图像描述生成,再对比 BLIP-2 的架构差异,是更平滑的路径。
工程上 BLIP 常常被用来做图像自动打标。把一张商品图丢进去,它生成一段描述,这段描述再进 CLIP 做召回,或者作为后续生成模型的提示词,这就是一条很自然的多模态流水线。
2.4 DALL·E 2:文本到图像生成的代表性思路
DALL·E 2 是 OpenAI 提出的文本生成图像模型,核心思路是把 CLIP 的文本编码能力与扩散模型结合。它先生成 CLIP 图像嵌入,再基于这个嵌入生成具体图像,从而让生成结果更符合文本语义。
需要注意一个事实:DALL·E 2 的官方权重没有公开,日常使用主要通过官方 API。如果要在本地完整复现,只能参考社区的非官方实现做学术研究,工程落地的性价比不高。因此,学习 DALL·E 2 的重点应该放在理解“CLIP 引导扩散模型”这个思想,而不是执着于本地跑通原版权重。
从模型进化角度看,DALL·E 2 之后还有 DALL·E 3、Stable Diffusion 系列等大量扩散模型,核心逻辑是一脉相承的。掌握 SAM、CLIP、BLIP 作为前置理解,再去看 DALL·E 2 的原理会清晰很多。
3. 适用场景与使用边界
3.1 适合什么场景
四类模型组合起来,能覆盖很多实际需求:
| 场景 | 推荐模型组合 | 说明 |
|---|---|---|
| 图像自动打标 | CLIP + BLIP | BLIP 生成描述,CLIP 验证标签相关性 |
| 目标分割与抠图 | SAM | 点选目标后输出分割掩码 |
| 图库检索 | CLIP | 提取图文特征后做向量检索 |
| 商品图审核 | CLIP + BLIP | 先分类或生成描述,再配置规则过滤 |
| 风格迁移/内容生成 | DALL·E 2 或本地扩散模型 | 官方 API,或本地使用社区模型 |
| 多模态 RAG | CLIP + LLM | 图片作为检索对象,文本进大模型生成 |
3.2 不适合什么场景
- 对延迟要求极高的实时检测场景,SAM 的推理速度不一定比专用检测模型快。
- 需要强分类能力的任务,CLIP 的零样本效果在细粒度类别上可能不如训练过的专用模型。
- 需要精确像素级分割并要求输出类别掩码的场景,SAM 只给掩码,不给类别。
- 需要完全可控的生成图像场景,DALL·E 2 这类模型对细节指令的理解仍有限。
3.3 合规与安全边界
使用图像类模型必须注意几点:
- 不要对真人照片、他人肖像做未经授权的分割、换脸、生成合成内容。
- 不要使用有版权争议的图片数据集做商用训练或微调。
- 批量处理用户上传图片时,要明确数据存储和隐私保护机制。
- 涉及人脸识别、生物特征信息的项目,务必确认是否符合当地法律法规。
- 文本生成图像时,不要生成涉及他人姓名、肖像、商标、版权的合成内容。
这些模型本身是通用工具,但具体应用方式会带来合规风险。部署到生产环境前,建议单独做一次数据合规审查。
4. 本地部署环境准备
4.1 硬件与操作系统
四类模型里,CLIP 和 BLIP 的小尺寸版本在 CPU 上也能跑通,SAM 建议使用 NVIDIA GPU,DALL·E 2 原版权重不公开,不需要考虑本地部署问题。推荐环境如下:
- 操作系统:Windows 10/11、Ubuntu 20.04 及以上
- GPU:NVIDIA 显卡,驱动支持 CUDA 11.8 或 12.1 即可
- 显存:CLIP base 版本最低 4G 左右;SAM ViT-B 建议 6G 以上,实际取决于推理分辨率
- CPU 与内存:16G 内存起步,处理大量图片时内存要更高
- 磁盘空间:模型文件加依赖至少预留 20G,数据集另算
以上是通用的合理范围,具体项目版本不同,占用也会有浮动,务必以实际安装后的资源监控为准。
4.2 Python 与依赖
建议使用 Python 3.10 或 3.11,创建独立虚拟环境,避免和其他项目冲突。
python -m venv multimodal_env source multimodal_env/bin/activate # Windows 下使用 multimodal_env\Scripts\activate核心依赖包括 PyTorch、Transformers、Pillow、OpenCV。PyTorch 的安装方式需要根据 CUDA 版本选择,官方安装命令是动态生成的,这里只给通用模板:
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu121 pip install transformers pillow opencv-python pip install git+https://github.com/facebookresearch/segment-anything.git如果模型下载不稳定,可以配置 Hugging Face 镜像地址,或者改用 ModelScope 等国内平台下载后放到本地缓存目录。镜像地址可以在博客评论区补充,核心思路是把HF_ENDPOINT环境变量指到可用镜像。
4.3 模型文件来源
模型文件是本地部署的关键:
- SAM 权重:从 GitHub 官方仓库的 Release 页面下载,有 ViT-B、ViT-L、ViT-H 三个规格。
- CLIP 权重:路径为
openai/clip-vit-base-patch32,可直接被 Hugging Face Transformers 加载。 - BLIP 权重:路径为
Salesforce/blip-image-captioning-base,同样可通过 Transformers 加载。 - DALL·E 2:官方无权重,学习原理即可。
下载前先确认磁盘空间和网络环境,建议把模型文件集中放在一个目录,方便管理和清理。
5. 数据集与资源准备
标题里强调了“附数据集”,实际学习时只需要准备三类数据:
5.1 图片测试集
不需要一开始就上百万级数据集。准备一个文件夹,里面放 20 到 50 张不同类型的图片,包含:
- 单物体图片(一只猫、一辆车)
- 多物体图片(多人合影、桌上有多个物品)
- 特殊目标图片(医学影像、遥感图、商品图)
这些图片用于验证 SAM 的分割效果和 CLIP 的分类能力。
5.2 文本标签集
为 CLIP 测试准备一组候选文本标签,覆盖三类情况:
- 正确标签:“a cat”“a car”
- 近似标签:“a dog”“a truck”
- 无关标签:“a plane”“a mountain”
通过标签对比可以看出 CLIP 的判别能力。
5.3 公开数据集参考
完整训练时可以关注这些公开资源:
| 数据集 | 用途 | 规模特点 |
|---|---|---|
| SA-1B | SAM 官方数据 | 超过 10 亿掩码,规模大 |
| COCO Caption | 图像描述 | 适合 BLIP 微调理解 |
| Flickr30k | 图文检索 | 适合 CLIP 相关实验 |
| WIT | 图文对 | CLIP 训练常用数据来源 |
本地学习阶段不需要全部下载,先用小图片集跑通代码,再根据需求扩展到公开数据集。
6. 四类模型的本地部署与最小验证代码
6.1 CLIP 最小验证流程
创建test_clip.py,用一个测试图片和三个候选文本,验证模型能否判断图片与哪个文本最相关。
from transformers import CLIPProcessor, CLIPModel from PIL import Image import torch model = CLIPModel.from_pretrained("openai/clip-vit-base-patch32") processor = CLIPProcessor.from_pretrained("openai/clip-vit-base-patch32") image = Image.open("test.jpg") texts = ["a photo of a cat", "a photo of a dog", "a photo of a car"] inputs = processor(text=texts, images=image, return_tensors="pt", padding=True) with torch.no_grad(): outputs = model(**inputs) logits_per_image = outputs.logits_per_image probs = logits_per_image.softmax(dim=1) for text, prob in zip(texts, probs[0]): print(f"{text}: {prob.item():.4f}")判断成功的标准:图片里是猫时,a photo of a cat的得分最高。如果多个标签得分接近,说明图片内容本身存在歧义,或者测试标签设计得不够区分。
6.2 SAM 最小验证流程
SAM 需要先下载权重文件,然后创建test_sam.py。代码里的checkpoint路径需要替换成实际下载路径,point_coords可以改成图片中目标的实际坐标。
from segment_anything import sam_model_registry, SamPredictor import cv2 checkpoint = "sam_vit_b_01ec64.pth" # 替换为实际路径 sam = sam_model_registry["vit_b"](checkpoint=checkpoint) import torch sam.to("cuda") predictor = SamPredictor(sam) image = cv2.imread("test.jpg") image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) predictor.set_image(image_rgb) mask, score, logit = predictor.predict( point_coords=[[500, 375]], point_labels=[1], multimask_output=True, ) print(mask.shape) print(score)坐标为[500, 375]时需要对图片实际尺寸做估算。预测结果是一个布尔掩码,可以用掩码把原图中的目标区域单独裁剪或抠出,方便后续交给 CLIP 或 BLIP 处理。
6.3 BLIP 最小验证流程
创建test_blip.py,用一张图片生成一句文字描述。
from transformers import BlipProcessor, BlipForConditionalGeneration from PIL import Image processor = BlipProcessor.from_pretrained("Salesforce/blip-image-captioning-base") model = BlipForConditionalGeneration.from_pretrained("Salesforce/blip-image-captioning-base") image = Image.open("test.jpg").convert("RGB") inputs = processor(image, return_tensors="pt") with torch.no_grad(): out = model.generate(**inputs, max_length=50) caption = processor.decode(out[0], skip_special_tokens=True) print(caption)BLIP 的输入是图片,输出是文本描述。如果生成结果过于模板化,可以换成blip-image-captioning-large版本,或尝试不同的generate参数。
6.4 DALL·E 2 的验证思路
DALL·E 2 官方权重未公开,不推荐本地部署。学习阶段可以验证两件事:
- 通过官方 API 提交文本,观察生成图像与文本的语义一致性。
- 阅读社区对 CLIP 引导扩散的复现说明,理解文本嵌入如何影响图像生成过程。
如果使用官方 API,请求逻辑和参数以官方最新文档为准。下面只保留一个通用请求模板,实际项目请替换为官方认可的接口地址和鉴权信息。
import requests api_key = "你的API Key" response = requests.post( "https://api.openai.com/v1/images/generations", headers={"Authorization": f"Bearer {api_key}"}, json={ "prompt": "a red cat sitting on a windowsill", "n": 1, "size": "1024x1024", }, timeout=60, ) data = response.json() print(data)更稳妥的本地路径是使用开源扩散模型代替 DALL·E 2,学习时重点理解 CLIP 在其中的引导作用。
6.5 组合流程:SAM + CLIP + BLIP
单模型验证通过后,可以把它们串成一条流水线:
- 输入一张多物体图片。
- 用 SAM 切出多个目标区域。
- 对每个区域用 BLIP 生成描述。
- 用 CLIP 计算描述和候选标签的相似度,过滤无效区域。
这是一套非常经典的多模态预处理链路,适合图库自动标注、商品信息抽取、图像内容结构化等场景。
7. 功能测试与效果验证
7.1 测试维度设计
| 维度 | 测试方式 | 判断标准 |
|---|---|---|
| GPU/CPU 是否可用 | 训练或推理时报错检查 | torch.cuda.is_available()为 True |
| CLIP 零样本分类 | 猫图、狗图、车图各测 5 张 | 正确标签得分最高 |
| SAM 分割质量 | 单点、多点、框选三种方式测试 | 掩码是否贴合目标轮廓 |
| BLIP 生成质量 | 10 张不同类型图片各生成一次 | 描述与图片内容一致 |
| 批量稳定运行 | 20 张图片循环处理 | 无内存溢出、无卡死 |
| 接口可用性 | 调用 API 或本地服务接口 | 返回状态码正常,结果可解析 |
7.2 单模型测试步骤
以 CLIP 零样本分类为例:
- 准备 3 类测试图片,每类 5 张。
- 写一个循环代码,逐张读取图片并调用 CLIP 模型。
- 记录每张图片的 Top-1 标签和置信度。
- 统计准确率,找出失败样本的特点。
SAM 测试则重点观察:
- 点选同一个目标的不同位置,掩码是否稳定。
- 选择不同目标时,掩码是否能正确切换。
multimask_output=False和True的输出差异。- 高分辨率图片推理耗时是否明显增加。
7.3 常见失败原因
- 图片路径错误:检查相对路径和绝对路径。
- 模型加载失败:检查
from_pretrained路径、模型下载是否完整。 - 显存溢出:降低图片分辨率或换小模型规格。
- 输出为空:BLIP 生成失败时检查输入图片是否被正确读取为 RGB。
- 结果完全错误:CLIP 零样本分类时,文本模板要完整描述图片内容,比如
a photo of a ...。
8. 接口 API 与批量任务设计
8.1 把单模型封装成本地 API
把 CLIP 或 BLIP 推理封装成 HTTP 服务,可以让其他语言和系统调用。这里以 FastAPI 为例,提供一个 CLIP 分类接口的通用框架。
from fastapi import FastAPI, File, UploadFile from transformers import CLIPProcessor, CLIPModel from PIL import Image import io import torch app = FastAPI() model = CLIPModel.from_pretrained("openai/clip-vit-base-patch32") processor = CLIPProcessor.from_pretrained("openai/clip-vit-base-patch32") @app.post("/classify") async def classify(file: UploadFile = File(...), labels: str = "a cat,a dog,a car"): image_data = await file.read() image = Image.open(io.BytesIO(image_data)).convert("RGB") label_list = [label.strip() for label in labels.split(",")] inputs = processor(text=label_list, images=image, return_tensors="pt", padding=True) with torch.no_grad(): outputs = model(**inputs) probs = outputs.logits_per_image.softmax(dim=1) result = {label: prob.item() for label, prob in zip(label_list, probs[0])} return {"scores": result}启动命令:
uvicorn api_clip:app --host 127.0.0.1 --port 8000需要说明的是,标签列表通过请求参数传入,不同图片可以复用同一个服务进程。模型在启动时加载到显存,首次请求会略慢,之后进入稳定推理。
8.2 批量任务目录设计
本地批量任务的核心是“输入目录 + 输出目录 + 日志”三段式设计。
project/ ├── inputs/ # 原始图片 ├── outputs/ # 结果文件 ├── logs/ # 运行日志 ├── models/ # 模型权重 └── scripts/ # 处理脚本批量脚本示例,CLIP 遍历inputs下的所有图片,把结果写到一个 CSV 文件:
import csv import os from transformers import CLIPProcessor, CLIPModel from PIL import Image import torch model = CLIPModel.from_pretrained("openai/clip-vit-base-patch32") processor = CLIPProcessor.from_pretrained("openai/clip-vit-base-patch32") labels = ["a photo of a cat", "a photo of a dog", "a photo of a car"] input_dir = "inputs" output_csv = "outputs/result.csv" with open(output_csv, "w", newline="") as f: writer = csv.writer(f) writer.writerow(["filename", "top1_label", "top1_score"]) for filename in os.listdir(input_dir): if not filename.lower().endswith((".jpg", ".jpeg", ".png")): continue image_path = os.path.join(input_dir, filename) image = Image.open(image_path).convert("RGB") inputs = processor(text=labels, images=image, return_tensors="pt", padding=True) with torch.no_grad(): outputs = model(**inputs) probs = outputs.logits_per_image.softmax(dim=1) idx = torch.argmax(probs[0]).item() writer.writerow([filename, labels[idx], probs[0][idx].item()]) print("done, results in outputs/result.csv")批量任务的稳定性很关键。建议在脚本里加异常捕获,单张图片失败时记录日志并继续处理下一张,而不是直接中断整个任务。失败后要支持重跑,可以先记录已处理文件名,避免重复处理。
9. 资源占用与性能观察方法
9.1 观察工具
- NVIDIA GPU 显存:终端运行
nvidia-smi -l 1实时刷新。 - 系统内存:Windows 用任务管理器,Linux 用
htop或free -h。 - Python 进程:用
psutil记录脚本运行时的 CPU 和内存占用。
9.2 哪些因素影响资源占用
- 图片分辨率:CLIP 和 BLIP 会先把图片缩放到固定尺寸,但高分辨率图片在解码阶段仍然会占用更多内存。
- Batch Size:一次处理多张图片会同时增加显存和内存压力。
- 模型参数规模:CLIP ViT-B 和 ViT-L 的差异很大,SAM ViT-H 的显存需求明显高于 ViT-B。
- 推理线程数:CPU 推理时调整
torch.set_num_threads会影响速度和 CPU 占用。 - 并发请求:API 服务在并发请求下会复制推理上下文,显存占用随并发数上升。
9.3 降低显存占用的方法
- 图片先缩放到较小尺寸再做模型推理。
- 使用
torch.no_grad()关闭梯度计算。 - 输出结果后及时释放变量,必要时用
torch.cuda.empty_cache()。 - 优先使用小规格模型跑通流程,再逐步升级到更大模型。
- 批量任务中控制并发数,避免多路推理同时占满显存。
9.4 CPU 与 GPU 的差异
CLIP 和 BLIP 的小模型在 CPU 上可以运行,但速度会慢很多。如果图片量很大,建议至少使用入门级 NVIDIA GPU,效果主要体现在两点:单张推理速度和批量吞吐量。CPU 适合流程验证和小规模测试,GPU 适合批量生产。具体时间差异与 CPU 型号、内存带宽、模型规格都有关系,需要以本机跑分结果为准。
10. 常见问题与排查方法
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
from_pretrained下载缓慢或失败 | 网络不稳定 | 检查日志中的下载地址 | 配置镜像地址或手动下载后放到本地缓存 |
| CUDA 不可用 | PyTorch 版本与显卡驱动不匹配 | 运行torch.cuda.is_available() | 按 CUDA 版本重新安装 PyTorch |
| SAM 权重加载报错 | checkpoint 路径错误或权重不匹配 | 核对文件路径和模型规格 | 从官方 Release 重新下载 |
| BLIP 输出乱码或空字符串 | 输入图片不是 RGB 模式 | 检查图片通道 | 加.convert("RGB") |
| 显存不足 | 图片过大或模型规格过高 | 观察 nvidia-smi 显存占用 | 降低输入分辨率或换小模型 |
| 端口被占用 | 8000 端口已有服务运行 | `netstat -ano | findstr 8000` |
| API 请求超时 | 模型加载期间处理请求 | 看服务端日志与请求时间 | 模型初始化后预热一次,再接受外部请求 |
| 批量任务中途卡死 | 单张异常图片导致脚本退出 | 添加逐文件日志 | 批量脚本捕获异常并跳过 |
10.1 模型加载环境变量示例
如果模型下载和加载不稳定,可以在运行前设置本地缓存目录:
export HF_HOME=/data/models/huggingface export TRANSFORMERS_CACHE=/data/models/huggingfaceWindows 用户用管理员权限执行同等的环境变量设置,确保目录存在且可写。
10.2 排查系统性方法
遇到问题不要直接改代码。先记录报错信息、当前环境版本、模型路径、输入数据格式,然后按“依赖 -> 模型加载 -> 数据格式 -> 资源限制”的顺序排查。大部分部署问题都出在这几个环节。
11. 最佳实践与使用建议
11.1 用最小配置跑通
第一次接触这四类模型,不要一开始就追求最大模型、最高分辨率。建议先用最小的 ViT-B 模型、512 分辨率的测试图、单 batch 推理,确认代码能跑通,再逐步加参数。
11.2 建立可复用的本地模型目录
把下载好的模型权重和缓存集中管理,项目里通过环境变量或配置文件引用,而不是散落在各个临时目录。这样以后换机器、换项目都能快速迁移。
11.3 批量任务先做小规模试跑
批量任务上线前,先用 5 到 10 张图片试跑,确认输出格式、命名规则、日志记录都符合预期,再全量跑。全量任务要设计断点续跑机制,记录已处理文件。
11.4 服务接口要控制访问范围
本地 API 服务建议绑定127.0.0.1,不要默认暴露到公网。如果确实需要对外提供接口,必须加认证鉴权和限流,防止接口被滥用。
11.5 合规红线不能碰
涉及人脸、肖像、版权素材时,务必确认授权链完整。批量处理用户数据时,明确告知数据用途和保存周期。对生成内容也要做审核,防止出现侵权或不良信息。
12. 总结与下一步
如果只从这套资料里带走一件事,那就是“先跑通代码,再理解原理”。CLIP、SAM、BLIP 这三个模型都有公开权重和成熟推理库,本地部署的门槛远低于想象,建议直接用自己电脑上的几张图片跑一遍最小验证,先确认环境通了,再对照原理去理解每个参数的含义。
最容易踩的坑有三个:一是 PyTorch 的 CUDA 版本没装对,二是模型文件下载不完整,三是批量任务缺少异常处理。这几个问题在本地部署阶段很常见,也都有成熟的解决方案,不需要过度焦虑。
下一步的扩展方向可以按你的需求选择:做图库检索就继续深入 CLIP 的向量化与召回;做图像自动分割标注就研究 SAM 的掩码后处理;做内容生产就把 BLIP 生成的描述作为扩散模型的提示词。等这几个基础模型都吃透之后,再去看更复杂的多模态大模型,会发现架构再复杂,底层仍然是“理解、对齐、生成”这三个核心能力的组合。