CLIP(Contrastive Language-Image Pre-Training)模型是一种多模态预训练神经网络,由OpenAI在2021年发布,是从自然语言监督中学习的一种有效且可扩展的方法。CLIP在预训练期间学习执行广泛的任务,包括OCR,地理定位,动作识别,并且在计算效率更高的同时优于公开可用的最佳ImageNet模型。该模型的核心思想是使用大量图像和文本的配对数据进行预训练,以学习图像和文本之间的对齐关系。该模型具有多模态学习的能力,能够同时理解图像和文本两种不同模态的信息,并在它们之间建立联系。CLIP模型在多个领域都展现出了强大的应用潜力,包括图像分类、图像检索、文本生成、多模态搜索等,尤其适用于零样本学习任务,即模型不需要看到新的图像或文本的训练示例就能进行预测。
硬件设备
| 设备型号 | NPU配置 |
|---|---|
| Atlas 800I A2 | 8*64G |
| Atlas 800T A2 | 8*64G |
软件版本配置表
| 软件配套 | 版本 |
|---|---|
| python | 3.11 |
| torch | 2.8.0 |
| torch_npu | 2.8.0 |
| transformers | 4.57.3 |
| CANN | 8.3.rc2 |
| HDK | 25.2.3 |
当前模型不依赖通用推理框架,仅依赖昇腾环境,所以物理机安装驱动、hdk,镜像内包含cann,torch,torch_npu相关软件即可。
可通过拉取cann镜像安装torch、torch_npu软件,亦可直接拉取vllm-ascend镜像直接使用。
docker pull quay.io/ascend/cann:8.3.rc2-910-ubuntu22.04-py3.11docker pull quay.io/ascend/vllm-ascend:v0.13.0rc1docker run -itd --name clip \
--net=host \
--privileged=true \
--shm-size=1g \
--device=/dev/davinci0 \
--device=/dev/davinci_manager \
--device=/dev/devmm_svm \
--device=/dev/hisi_hdc \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
-v /usr/local/Ascend/add-ons/:/usr/local/Ascend/add-ons/ \
-v /usr/local/sbin/:/usr/local/sbin/ \
-v /var/log/npu/slog/:/var/log/npu/slog \
-v /var/log/npu/profiling/:/var/log/npu/profiling \
-v /var/log/npu/dump/:/var/log/npu/dump \
-v /var/log/npu/:/usr/slog \
-v /models:/models \
-v /etc/hccn.conf:/etc/hccn.conf \
-p 8000:8000 \
镜像ID /bin/bashdocker exec -it clip bashpip install ftfy regex tqdm安装CLIP官方python包,两种方式
pip install git+https://github.com/openai/CLIP.git手动下载CLIP源码包,切换到安装包目录中,python setup.py install['RN50','RN101','RN50x4','RN50x16','RN50x64','ViT-B/32','ViT-B/16','ViT-L/14','ViT-L/14@336px']https://www.modelscope.cn/models/AI-ModelScope/clip-vit-large-patch14
https://www.modelscope.cn/models/AI-ModelScope/clip-vit-large-patch14-336下载模型权重并加载
方式一:代码运行过程中下载,模型名称需在模型列表中
model, preprocess = clip.load("ViT-B/32", device=device)方式二:提前下载模型并加载
# shell中运行
pip install modelscope
modelscope download --model AI-ModelScope/clip-vit-large-patch14 --local_dir ./clip-vit-large-patch14
# python模型代码中加载方式,模型名称需与权重匹配
model, preprocess = clip.load(name="ViT-L/14@336px",download_root="./clip-vit-large-patch14-336", device=device)import torch
import torch_npu
import clip
from PIL import Image
import requests
device = "npu:0" if torch_npu.npu.is_available() else "cpu"
# 如果提前下载模型,配置download_root参数即可,不配置即在线下载
model, preprocess = clip.load(name="ViT-L/14@336px",download_root="./clip-vit-large-patch14-336", device=device)
url = "http://images.cocodataset.org/val2017/000000039769.jpg"
image = preprocess(Image.open(requests.get(url, stream=True).raw)).unsqueeze(0).to(device)
text = clip.tokenize(["a photo of a cat", "a photo of a dog"]).to(device)
with torch.no_grad():
image_features = model.encode_image(image)
text_features = model.encode_text(text)
logits_per_image, logits_per_text = model(image, text)
probs = logits_per_image.softmax(dim=-1).cpu().numpy()
print("Label probs:", probs)