Ascend-SACT/CLIP
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

CLIP模型部署指导

第一章 模型简介

CLIP(Contrastive Language-Image Pre-Training)模型是一种多模态预训练神经网络,由OpenAI在2021年发布,是从自然语言监督中学习的一种有效且可扩展的方法。CLIP在预训练期间学习执行广泛的任务,包括OCR,地理定位,动作识别,并且在计算效率更高的同时优于公开可用的最佳ImageNet模型。该模型的核心思想是使用大量图像和文本的配对数据进行预训练,以学习图像和文本之间的对齐关系。该模型具有多模态学习的能力,能够同时理解图像和文本两种不同模态的信息,并在它们之间建立联系。CLIP模型在多个领域都展现出了强大的应用潜力,包括图像分类、图像检索、文本生成、多模态搜索等,尤其适用于零样本学习任务,即模型不需要看到新的图像或文本的训练示例就能进行预测。

第二章 运行环境

硬件设备

设备型号NPU配置
Atlas 800I A28*64G
Atlas 800T A28*64G

软件版本配置表

软件配套版本
python3.11
torch2.8.0
torch_npu2.8.0
transformers4.57.3
CANN8.3.rc2
HDK25.2.3

第二章 镜像准备

当前模型不依赖通用推理框架,仅依赖昇腾环境,所以物理机安装驱动、hdk,镜像内包含cann,torch,torch_npu相关软件即可。

可通过拉取cann镜像安装torch、torch_npu软件,亦可直接拉取vllm-ascend镜像直接使用。

  • CANN镜像拉取:
docker pull quay.io/ascend/cann:8.3.rc2-910-ubuntu22.04-py3.11
  • vllm-ascend镜像拉取:
docker pull quay.io/ascend/vllm-ascend:v0.13.0rc1
  • 资源需要:910B单卡即可
  • 容器运行:
docker 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/bash
  • 进入容器:
docker exec -it clip bash

第三章 安装必备python包

pip 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)

第五章 模型脚本验证

  • 使用clip包验证模型
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)