Views
No views yet

pip install torch==2.1.0 transformers==4.35.0 accelerate==0.24.1 sentencepiece==0.1.99 einops==0.7.0 xformers==0.0.22.post7 triton==2.1.01import torch
2import requests
3from PIL import Image
4from transformers import AutoModelForCausalLM, LlamaTokenizer
5
6tokenizer = LlamaTokenizer.from_pretrained('lmsys/vicuna-7b-v1.5')
7model = AutoModelForCausalLM.from_pretrained(
8 'THUDM/cogvlm-chat-hf',
9 torch_dtype=torch.bfloat16,
10 low_cpu_mem_usage=True,
11 trust_remote_code=True
12).to('cuda').eval()
13
14
15# chat example
16query = 'Describe this image'
17image = Image.open(requests.get('https://github.com/THUDM/CogVLM/blob/main/examples/1.png?raw=true', stream=True).raw).convert('RGB')
18inputs = model.build_conversation_input_ids(tokenizer, query=query, history=[], images=[image]) # chat mode
19inputs = {
20 'input_ids': inputs['input_ids'].unsqueeze(0).to('cuda'),
21 'token_type_ids': inputs['token_type_ids'].unsqueeze(0).to('cuda'),
22 'attention_mask': inputs['attention_mask'].unsqueeze(0).to('cuda'),
23 'images': [[inputs['images'][0].to('cuda').to(torch.bfloat16)]],
24}
25gen_kwargs = {"max_length": 2048, "do_sample": False}
26
27with torch.no_grad():
28 outputs = model.generate(**inputs, **gen_kwargs)
29 outputs = outputs[:, inputs['input_ids'].shape[1]:]
30 print(tokenizer.decode(outputs[0]))
31
32# This image captures a moment from a basketball game. Two players are prominently featured: one wearing a yellow jersey with the number
33# 24 and the word 'Lakers' written on it, and the other wearing a navy blue jersey with the word 'Washington' and the number 34. The player
34# in yellow is holding a basketball and appears to be dribbling it, while the player in navy blue is reaching out with his arm, possibly
35# trying to block or defend. The background shows a filled stadium with spectators, indicating that this is a professional game.</s>
36
37
38
39# vqa example
40query = 'How many houses are there in this cartoon?'
41image = Image.open(requests.get('https://github.com/THUDM/CogVLM/blob/main/examples/3.jpg?raw=true', stream=True).raw).convert('RGB')
42inputs = model.build_conversation_input_ids(tokenizer, query=query, history=[], images=[image], template_version='vqa') # vqa mode
43inputs = {
44 'input_ids': inputs['input_ids'].unsqueeze(0).to('cuda'),
45 'token_type_ids': inputs['token_type_ids'].unsqueeze(0).to('cuda'),
46 'attention_mask': inputs['attention_mask'].unsqueeze(0).to('cuda'),
47 'images': [[inputs['images'][0].to('cuda').to(torch.bfloat16)]],
48}
49gen_kwargs = {"max_length": 2048, "do_sample": False}
50
51with torch.no_grad():
52 outputs = model.generate(**inputs, **gen_kwargs)
53 outputs = outputs[:, inputs['input_ids'].shape[1]:]
54 print(tokenizer.decode(outputs[0]))
55
56# 4</s>infer_auto_device_map的参数改成你的配置。注意这里将GPU显存少写了一点,这是为推理时中间状态预留出一部分显存。infer_auto_device_map with your own setting.1import torch
2import requests
3from PIL import Image
4from transformers import AutoModelForCausalLM, LlamaTokenizer
5from accelerate import init_empty_weights, infer_auto_device_map, load_checkpoint_and_dispatch
6
7tokenizer = LlamaTokenizer.from_pretrained('lmsys/vicuna-7b-v1.5')
8with init_empty_weights():
9 model = AutoModelForCausalLM.from_pretrained(
10 'THUDM/cogvlm-chat-hf',
11 torch_dtype=torch.bfloat16,
12 low_cpu_mem_usage=True,
13 trust_remote_code=True,
14 )
15device_map = infer_auto_device_map(model, max_memory={0:'20GiB',1:'20GiB','cpu':'16GiB'}, no_split_module_classes='CogVLMDecoderLayer')
16model = load_checkpoint_and_dispatch(
17 model,
18 'local/path/to/hf/version/chat/model', # typical, '~/.cache/huggingface/hub/models--THUDM--cogvlm-chat-hf/snapshots/balabala'
19 device_map=device_map,
20)
21model = model.eval()
22
23# check device for weights if u want to
24for n, p in model.named_parameters():
25 print(f"{n}: {p.device}")
26
27# chat example
28query = 'Describe this image'
29image = Image.open(requests.get('https://github.com/THUDM/CogVLM/blob/main/examples/1.png?raw=true', stream=True).raw).convert('RGB')
30inputs = model.build_conversation_input_ids(tokenizer, query=query, history=[], images=[image]) # chat mode
31inputs = {
32 'input_ids': inputs['input_ids'].unsqueeze(0).to('cuda'),
33 'token_type_ids': inputs['token_type_ids'].unsqueeze(0).to('cuda'),
34 'attention_mask': inputs['attention_mask'].unsqueeze(0).to('cuda'),
35 'images': [[inputs['images'][0].to('cuda').to(torch.bfloat16)]],
36}
37gen_kwargs = {"max_length": 2048, "do_sample": False}
38
39with torch.no_grad():
40 outputs = model.generate(**inputs, **gen_kwargs)
41 outputs = outputs[:, inputs['input_ids'].shape[1]:]
42 print(tokenizer.decode(outputs[0]))
@article{wang2023cogvlm,
title={CogVLM: Visual Expert for Pretrained Language Models},
author={Weihan Wang and Qingsong Lv and Wenmeng Yu and Wenyi Hong and Ji Qi and Yan Wang and Junhui Ji and Zhuoyi Yang and Lei Zhao and Xixuan Song and Jiazheng Xu and Bin Xu and Juanzi Li and Yuxiao Dong and Ming Ding and Jie Tang},
year={2023},
eprint={2311.03079},
archivePrefix={arXiv},
primaryClass={cs.CV}
}