jina-clip-v2部署避坑指南
一、下载模型可能的问题
1.1 官方下载方法
魔搭平台地址https://modelscope.cn/models/jinaai/jina-clip-v2,该网页给出了如下的下载方法,但是我不建议使用,因为下载的模型可能出问题,具体原因未知,提示找不到我下载的模型。我会在1.2给出下载到指定文件夹的代码。
1.2 下载到本地指定文件夹
通过这个代码,我将模型下载到了该目录下models/jina-clip-v2路径,最上面的代码作用是从国内镜像源下载模型。
#huggingface网站的国内镜像网址
import os
os.environ['HF_ENDPOINT'] = 'https://hf-mirror.com'
from huggingface_hub import snapshot_download
snapshot_download(repo_id="jinaai/jina-clip-v2",cache_dir="./cache", local_dir="models/bge-m3")
print("======download successful=====")
二、运行模型可能的问题
官网建议安装 FlashAttention 和 xFormers 以利用它们高效的注意力机制实现。但是最好只安装 FlashAttention,因为已经安装了FlashAttention再去安装xFormers很可能造成一些库的升级,导致有的库之间不兼容,加载大模型失败。
三、测试
直接使用官方代码测试最好,但是官方代码可能报错,原因是官方图片的url链接是国外网站的,没有梯子打不开,可以从浏览器找一些图片链接测试。
测试代码(建议去官网查看):
import os
os.environ['HF_ENDPOINT'] = 'https://hf-mirror.com'
# !pip install transformers einops timm pillow
from modelscope import AutoModel
# Initialize the model
model = AutoModel.from_pretrained('jinaai/jina-clip-v2', trust_remote_code=True)
# Corpus
sentences = [
'غروب جميل على الشاطئ', # Arabic
'海滩上美丽的日落', # Chinese
'Un beau coucher de soleil sur la plage', # French
'Ein wunderschöner Sonnenuntergang am Strand', # German
'Ένα όμορφο ηλιοβασίλεμα πάνω από την παραλία', # Greek
'समुद्र तट पर एक खूबसूरत सूर्यास्त', # Hindi
'Un bellissimo tramonto sulla spiaggia', # Italian
'浜辺に沈む美しい夕日', # Japanese
'해변 위로 아름다운 일몰', # Korean
]
# Public image URLs or PIL Images
image_urls = ['https://i.ibb.co/nQNGqL0/beach1.jpg', 'https://i.ibb.co/r5w8hG8/beach2.jpg']
# Choose a matryoshka dimension, set to None to get the full 1024-dim vectors
truncate_dim = 512
# Encode text and images
text_embeddings = model.encode_text(sentences, truncate_dim=truncate_dim)
image_embeddings = model.encode_image(
image_urls, truncate_dim=truncate_dim
) # also accepts PIL.Image.Image, local filenames, dataURI
# Encode query text
query = 'beautiful sunset over the beach' # English
query_embeddings = model.encode_text(
query, task='retrieval.query', truncate_dim=truncate_dim
)
# Text to Image
print('En -> Img: ' + str(query_embeddings @ image_embeddings[0].T))
# Image to Image
print('Img -> Img: ' + str(image_embeddings[0] @ image_embeddings[1].T))
# Text to Text
print('En -> Ar: ' + str(query_embeddings @ text_embeddings[0].T))
print('En -> Zh: ' + str(query_embeddings @ text_embeddings[1].T))
print('En -> Fr: ' + str(query_embeddings @ text_embeddings[2].T))
print('En -> De: ' + str(query_embeddings @ text_embeddings[3].T))
print('En -> Gr: ' + str(query_embeddings @ text_embeddings[4].T))
print('En -> Hi: ' + str(query_embeddings @ text_embeddings[5].T))
print('En -> It: ' + str(query_embeddings @ text_embeddings[6].T))
print('En -> Jp: ' + str(query_embeddings @ text_embeddings[7].T))
print('En -> Ko: ' + str(query_embeddings @ text_embeddings[8].T))