最近在看llama.cpp项目里的MiniCPM-V,原来项目中都是终端启动的,不方便魔改。于是根据模型demo文件写了一个调试代码,在debug的过程中,看数据加载过程,学习模型结构。
新建一个python文件运行,自己改一下路径。
import torch
from PIL import Image
from transformers import AutoModel,AutoTokenizer
from modeling_minicpmv import MiniCPMV
#模型来源于https://huggingface.co/openbmb/MiniCPM-V-2_6,在代码里调用hugging预训练模型总是报错,所以每次一般都直接下载到服务器上,比较方便。
model_name_or_path = '/home/XXX/llama.cpp/MiniCPM-V-2_6'
model = MiniCPMV.from_pretrained(
pretrained_model_name_or_path = model_name_or_path,
trust_remote_code = True,
attn_implementation = 'sdpa',
torch_dtype = torch.bfloat16,
)
model = model.eval().cuda()
tokenizer = AutoTokenizer.from_pretrained(pretrained_model_name_or_path=model_name_or_path,trust_remote_code = True)
image = Image.open('/home/XXX/llama.cpp/MiniCPM-V-2_6/assets/radar_final.png').convert('RGB')
question = 'Describe this image'
msgs = [{'role': 'user', 'content': [image, question]}]
prompt = model.chat(
image=None,
msgs=msgs,
tokenizer=tokenizer
)
print(prompt)
过程中打断点看image tokens,模型层,加载过程等,主要文件modeling_minicpmv.py。
这里用的是示例图片,最终结果如下: