Views
No views yet
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,
11 enable_full_determinism, pipeline, set_seed)
12from transformers.models.qwen2_vl import Qwen2VLForConditionalGeneration
13
14model_id = "Qwen/QVQ-72B-Preview"
15repo_id = "yujiepan/qvq-preview-tiny-random"
16save_path = f"/tmp/{repo_id}"
17
18config = AutoConfig.from_pretrained(model_id, trust_remote_code=True)
19config.hidden_size = 16
20config.intermediate_size = 32
21config.num_attention_heads = 2
22config.num_hidden_layers = 2
23config.num_key_value_heads = 1
24config.vision_config.embed_dim = 16
25config.vision_config.num_heads = 2
26config.vision_config.hidden_size = 16
27config.vision_config.depth = 2
28config.rope_scaling['mrope_section'] = [1, 1, 2] # sum needs to be 4 here
29
30enable_full_determinism(42)
31model = Qwen2VLForConditionalGeneration(config=config)
32model = model.to(torch.bfloat16).cuda().eval()
33model.generation_config = GenerationConfig.from_pretrained(
34 model_id, trust_remote_code=True,
35)
36
37processor = AutoProcessor.from_pretrained(model_id)
38model.save_pretrained(save_path)
39processor.save_pretrained(save_path)
40os.system(f"ls -alh {save_path}")
41
42
43def try_inference(model_id):
44 torch.use_deterministic_algorithms(False)
45 from qwen_vl_utils import process_vision_info
46 from transformers import (AutoProcessor, AutoTokenizer,
47 Qwen2VLForConditionalGeneration)
48
49 model = Qwen2VLForConditionalGeneration.from_pretrained(
50 model_id, device_map="cuda"
51 )
52 processor = AutoProcessor.from_pretrained(model_id)
53 messages = [
54 {
55 "role": "system",
56 "content": [
57 {"type": "text", "text": "You are a helpful and harmless assistant. You are Qwen developed by Alibaba. You should think step-by-step."}
58 ],
59 },
60 {
61 "role": "user",
62 "content": [
63 {
64 "type": "image",
65 "image": "https://qianwen-res.oss-cn-beijing.aliyuncs.com/QVQ/demo.png",
66 },
67 {"type": "text", "text": "What value should be filled in the blank space?"},
68 ],
69 }
70 ]
71 text = processor.apply_chat_template(
72 messages, tokenize=False, add_generation_prompt=True
73 )
74 image_inputs, video_inputs = process_vision_info(messages)
75 inputs = processor(
76 text=[text],
77 images=image_inputs,
78 videos=video_inputs,
79 padding=True,
80 return_tensors="pt",
81 )
82 inputs = inputs.to("cuda")
83 generated_ids = model.generate(**inputs, max_new_tokens=32)
84 output_text = processor.batch_decode(
85 generated_ids, skip_special_tokens=False, clean_up_tokenization_spaces=False
86 )
87 print(output_text)
88
89
90try_inference(save_path)