Open michaelzfm opened 1 year ago
您好,请问您能方便提供一下具体执行的代码和输出吗?我们检查一下。方便的话,也可以提供下机器的运行环境
执行代码就是您提供的demo代码: import torch from PIL import Image
import cn_clip.clip as clip from cn_clip.clip import load_from_name, available_models print("Available models:", available_models())
device = "cuda" if torch.cuda.is_available() else "cpu" model, preprocess = load_from_name("ViT-B-16", device=device, download_root='./') model.eval() image = preprocess(Image.open("examples/pokemon.jpeg")).unsqueeze(0).to(device) text = clip.tokenize(["杰尼龟", "妙蛙种子", "小火龙", "皮卡丘"]).to(device)
with torch.no_grad(): image_features = model.encode_image(image) text_features = model.encode_text(text)
image_features /= image_features.norm(dim=-1, keepdim=True)
text_features /= text_features.norm(dim=-1, keepdim=True)
logits_per_image, logits_per_text = model.get_similarity(image, text)
probs = logits_per_image.softmax(dim=-1).cpu().numpy()
print("Label probs:", probs) # [[1.268734e-03 5.436878e-02 6.795761e-04 9.436829e-01]]
现在的问题是:我加载ViT-H-14预训练模型text_features就会输出nan,加载ViT-L-14不会有这个问题,ViT-H-14模型随机初始化,不加载预训练模型也不会出现这个问题,所以我怀疑是不是ViT-H-14预训练模型参数的问题,机器环境:NVIDIA A40,torch1.13.0+cu117
请问如果在cpu下(device直接置为cpu),也有这个情况吗?
您好,请问一下您的Python版本和CUDA版本是多少呢。另外您可以尝试加入model = model.float()
后是否还存在出现nan的问题呢
设置为cpu也一样,加入model=model.float()也一样,python=3.10,nvidia-smi 的cuda是11.7
您好,在V100,CUDA11.8,Python3.10.11,Pytorch1.13.0+cu117测试多次,均未出现您描述的情况。
您可以尝试从指定的本地目录加载模型,在模型规模 & 下载链接中将CN-CLIP ViT-H/14模型下载到本地目录xxx,然后将您代码中model, preprocess = load_from_name("ViT-H-14", device=device, download_root='./')
修改为
model, preprocess = load_from_name("xxx", device=device, download_root='./', vision_model_name='ViT-H-14', text_model_name='RoBERTa-wwm-ext-large-chinese', input_resolution=224)
再试一下
load_from_model里面并没有vision_model_name这个参数,我自己修改了load_from_name函数,从本地加载模型一样会出现nan
请问你是在win上测的还是linux,我在win上测是正常的,但是linux会出问题
我也没有出现nan的问题,linux环境
@michaelzfm 请问有没有观察过两个平台除了最终结果,中间输出的log是否有区别呢?另外是否有尝试过清除过缓存的模型,重新下载,以防是下载时候模型文件损坏呢?
已经找到原因,感谢!另一个问题,请问cnclip用的分词器是哪个,我在接上stablediffusion用stabeldiffusionpipeline来做text2img的时候报错,cnclip的tokenizer无法被兼容
@michaelzfm 您好,cnclip使用的分词器和bert官方一致的(WordPieceTokenizer),您可以参见transformers或者Bert官方原版实现哈。
我在使用测试代码的时候text_feature输出nan,但是如果不加载预训练模型就不会有这个问题,请问这是怎么回事