本地部署Jina-CLIP v2:多语言多模态文本图像向量模型(包含一些踩坑记录和技巧)

Jina CLIP v2:

在这里插入图片描述

Jina-CLIP-v2是一个全新的通用多语言多模态向量模型 ,该模型基于 jina-clip-v1 和 jina-embeddings-3 构建,实现了一些关键改进。
关于Jina-CLIP-v2的更多介绍点此可了解


模型特点

模型开源链接:https://huggingface.co/jinaai/jina-clip-v2
在它的开源链接的介绍中,我们可以得知,Jina-CLIP-v2的参数量很小,大约为0.9B,属于”小模型“,相较于其他大语言模型是比较小的,因此对显存要求不高,甚至在cpu上也可以跑起来。它的核心就是结合了两个编码器:文本编码器和图像编码器,各自对应的参数量和特点见下表:
在这里插入图片描述
这两个编码器经过联合训练,以创建图像和文本的对齐表示。

使用方法:

Huggingface上提供了几种使用方法的代码,包括通过API、通过Transformer、通过onnx等进行使用,并提供了相关代码。
通过API的此处略过,主要介绍后两种方法的使用。


1.via Transformers

用这个方法主要就是需要挂梯子

①下载模型,此处推荐直接下载到本地或者去modelscope上通过指令下载

modelscope download --model jinaai/jina-clip-v2  --local_dir ./dir

注意下载好之后对几个较大文件(model.safetensors、pytorch_model.bin、tokenizer)的大小进行核对,确定完整。

②配好环境、安好依赖即可运行代码,需要注意的是:
若下载了模型,则将此处的模型改为本地的路径。

model = AutoModel.from_pretrained('E:\projects\jina-clipv2', trust_remote_code=True,cache_dir='E:\projects\jina-clipv2\cache')

注意:该模型本地部署时需要去huggingface网站加载models–jinaai–jina-clip-implementation等缓存文件,因此需要挂梯子,否则会报错:无法连接http://huggingface.co。且可以添加’cache_dir=path_to_your_dir’参数,将缓存文件缓存到指定路径,否则会加载到“C:\Users\Administrator.cache\huggingface”默认路径。

并且下面图片的url也可提前保存到本地并替换为本地路径。

最终运行结果为:
在这里插入图片描述

2.via ONNX

这个方法相对简单

①下载onnx文件夹中的几个.onnx模型;
②把huggingface上提供的代码拉下来运行即可(注意替换本地路径)。

### CLIP模型中的分词器实现与使用 CLIP(Contrastive Language–Image Pre-training)是一种多模态预训练模型,其核心在于通过联合图像文本的表示来完成跨模态任务。为了处理文本输入,CLIP 使用了一个专门设计的分词器(tokenizer)。以下是关于 CLIP 模型中分词器的具体实现使用方法。 #### 分词器的作用 分词器的主要职责是对输入的自然语言文本进行编码,将其转换为模型可接受的形式。具体来说,分词器会将文本拆分为一系列标记(tokens),并将这些标记映射到对应的整数 ID。这一过程通常包括以下几个阶段: 1. **文本清洗**:去除无关字符或特殊符号。 2. **分词**:基于特定规则(如字节对编码 BPE 或 WordPiece)将文本分割为子词单元。 3. **ID 映射**:将每个子词单元映射为其在词汇表中的唯一索引。 对于 CLIP 模型而言,其分词器通常是基于 Byte-Level BPE(BPE 的变体)实现的[^4]。这种分词方式具有良好的泛化能力,尤其适合处理未见过的单词或稀有词语。 #### 实现细节 CLIP 模型的分词器实现依赖于 Hugging Face 提供的 `transformers` 库。以下是一个典型的加载使用 CLIP 分词器的代码示例: ```python from transformers import CLIPTokenizer # 加载 CLIP 分词器 tokenizer = CLIPTokenizer.from_pretrained("/media/zhangbin/DATA/DataCache/jinaai/jina-clip-v2") # 输入文本 text_input = "A plate of beignets" # 对文本进行编码 encoded_inputs = tokenizer(text_input, return_tensors="pt", padding=True) print(encoded_inputs) ``` 上述代码展示了如何从指定路径加载 CLIP 分词器,并对其进行初始化。随后,通过对一段文本调用 `tokenizer()` 方法,可以得到经过编码后的张量形式输出。此输出可以直接作为 CLIP 模型的输入[^3]。 #### 推理流程中的应用 当执行推理任务时,分词器的结果会被传递给模型以生成预测结果。例如,在分类任务中,可以通过如下代码获取最终的预测类别: ```python import torch from transformers import CLIPModel # 加载模型 model = CLIPModel.from_pretrained("/media/zhangbin/DATA/DataCache/jinaai/jina-clip-v2") with torch.no_grad(): outputs = model(**encoded_inputs) # 将编码后的输入传入模型 logits = outputs.text_logits # 获取文本部分的 logit 值 predicted_class_idx = logits.argmax(-1).item() print("Predicted class:", model.config.id2label[predicted_class_idx]) ``` 这里的关键步骤是利用无梯度上下文管理器 (`torch.no_grad`) 来禁用反向传播操作,从而提升推理效率[^1]。 #### 性能优化 如果希望进一步提高推理速度,可以考虑启用 XLA 编译器或其他加速技术。例如,TensorFlow JAX 中的 XLA 能够显著改善计算图的运行时间,因为它会对底层代码实施多项优化措施,比如循环展开、内联函数以及向量化等[^2]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值