Views
No views yet
1from PIL import Image
2import requests
3import torch
4from torchvision import io
5from typing import Dict
6from transformers import Qwen2VLForConditionalGeneration, AutoTokenizer, AutoProcessor
7
8model_id = "yujiepan/qwen2-vl-tiny-random"
9
10# Load the model in half-precision on the available device(s)
11model = Qwen2VLForConditionalGeneration.from_pretrained(
12 model_id, torch_dtype="auto", device_map="auto"
13)
14processor = AutoProcessor.from_pretrained(model_id)
15
16# Image
17url = "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen-VL/assets/demo.jpeg"
18image = Image.open(requests.get(url, stream=True).raw)
19conversation = [
20 {
21 "role": "user",
22 "content": [
23 {
24 "type": "image",
25 },
26 {"type": "text", "text": "Describe this image."},
27 ],
28 }
29]
30text_prompt = processor.apply_chat_template(conversation, add_generation_prompt=True)
31# Excepted output: '<|im_start|>system\nYou are a helpful assistant.<|im_end|>\n<|im_start|>user\n<|vision_start|><|image_pad|><|vision_end|>Describe this image.<|im_end|>\n<|im_start|>assistant\n'
32
33inputs = processor(
34 text=[text_prompt], images=[image], padding=True, return_tensors="pt"
35)
36inputs = inputs.to("cuda")
37
38output_ids = model.generate(**inputs, max_new_tokens=128)
39generated_ids = [
40 output_ids[len(input_ids) :]
41 for input_ids, output_ids in zip(inputs.input_ids, output_ids)
42]
43output_text = processor.batch_decode(
44 generated_ids, skip_special_tokens=True, clean_up_tokenization_spaces=True
45)
46print(output_text)1import os
2from typing import Dict
3
4import requests
5import torch
6import transformers
7from PIL import Image
8from torchvision import io
9from transformers import (AutoConfig, AutoModelForCausalLM, AutoProcessor,
10 AutoTokenizer, GenerationConfig, pipeline, set_seed)
11from transformers.models.qwen2_vl import Qwen2VLForConditionalGeneration
12
13model_id = "Qwen/Qwen2-VL-7B-Instruct"
14repo_id = "yujiepan/qwen2-vl-tiny-random"
15save_path = f"/tmp/{repo_id}"
16
17config = AutoConfig.from_pretrained(model_id, trust_remote_code=True)
18config.hidden_size = 16
19config.intermediate_size = 32
20config.num_attention_heads = 2
21config.num_hidden_layers = 2
22config.num_key_value_heads = 1
23config.vision_config.embed_dim = 16
24config.vision_config.num_heads = 2
25config.vision_config.hidden_size = 16
26config.vision_config.depth = 2
27config.rope_scaling['mrope_section'] = [1, 1, 2] # sum needs to be 4 here
28
29model = Qwen2VLForConditionalGeneration(config=config)
30model = model.to(torch.bfloat16).cuda().eval()
31model.generation_config = GenerationConfig.from_pretrained(
32 model_id, trust_remote_code=True,
33)
34set_seed(42)
35with torch.no_grad():
36 for _, p in sorted(model.named_parameters()):
37 torch.nn.init.uniform_(p, -0.3, 0.3)
38
39processor = AutoProcessor.from_pretrained(model_id)
40model.save_pretrained(save_path)
41processor.save_pretrained(save_path)
42os.system(f"ls -alh {save_path}")
43
44
45def try_inference():
46 url = "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen-VL/assets/demo.jpeg"
47 image = Image.open(requests.get(url, stream=True).raw)
48 conversation = [
49 {
50 "role": "user",
51 "content": [
52 {
53 "type": "image",
54 },
55 {"type": "text", "text": "Describe this image."},
56 ],
57 }
58 ]
59 processor = AutoProcessor.from_pretrained(save_path)
60 model = Qwen2VLForConditionalGeneration.from_pretrained(
61 save_path, torch_dtype=torch.bfloat16, device_map='cuda')
62 text_prompt = processor.apply_chat_template(
63 conversation, add_generation_prompt=True)
64 inputs = processor(
65 text=[text_prompt], images=[image], padding=True, return_tensors="pt"
66 )
67 inputs = inputs.to("cuda")
68 output_ids = model.generate(**inputs, max_new_tokens=16)
69 generated_ids = [
70 output_ids[len(input_ids):]
71 for input_ids, output_ids in zip(inputs.input_ids, output_ids)
72 ]
73 output_text = processor.batch_decode(
74 generated_ids, skip_special_tokens=True, clean_up_tokenization_spaces=True
75 )
76 print(output_text)
77
78
79try_inference()