Views
No views yet
1import numpy as np
2import torch
3import transformers
4from PIL import Image
5from transformers import (
6 AutoModel,
7 AutoModelForCausalLM,
8 AutoProcessor,
9 AutoTokenizer,
10 Qwen3VLForConditionalGeneration,
11)
12
13model_id = "tiny-random/qwen3-vl"
14model = Qwen3VLForConditionalGeneration.from_pretrained(
15 model_id, dtype=torch.bfloat16, device_map="cuda",
16 attn_implementation="flash_attention_2",
17)
18processor = AutoProcessor.from_pretrained(model_id)
19messages = [
20 {
21 "role": "user",
22 "content": [
23 {
24 "type": "image",
25 "image": "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen-VL/assets/demo.jpeg",
26 },
27 {"type": "text", "text": "Describe this image."},
28 ],
29 }
30]
31
32# Preparation for inference
33inputs = processor.apply_chat_template(
34 messages,
35 tokenize=True,
36 add_generation_prompt=True,
37 return_dict=True,
38 return_tensors="pt"
39).to(model.device)
40
41# Inference: Generation of the output
42generated_ids = model.generate(**inputs, max_new_tokens=32)
43generated_ids_trimmed = [
44 out_ids[len(in_ids):] for in_ids, out_ids in zip(inputs.input_ids, generated_ids)
45]
46output_text = processor.batch_decode(
47 generated_ids_trimmed, skip_special_tokens=True, clean_up_tokenization_spaces=False
48)
49print(output_text)1import json
2from pathlib import Path
3
4import accelerate
5import torch
6from huggingface_hub import file_exists, hf_hub_download
7from transformers import (
8 AutoConfig,
9 AutoModelForCausalLM,
10 AutoProcessor,
11 GenerationConfig,
12 # Qwen3VLMoeForConditionalGeneration,
13 Qwen3VLForConditionalGeneration,
14 set_seed,
15)
16
17source_model_id = "Qwen/Qwen3-VL-8B-Thinking"
18save_folder = "/tmp/tiny-random/qwen3-vl"
19
20processor = AutoProcessor.from_pretrained(source_model_id, trust_remote_code=True)
21processor.save_pretrained(save_folder)
22
23with open(hf_hub_download(source_model_id, filename='config.json', repo_type='model'), 'r', encoding='utf-8') as f:
24 config_json = json.load(f)
25
26config_json['text_config'].update({
27 'head_dim': 32,
28 'hidden_size': 8,
29 'intermediate_size': 64,
30 'moe_intermediate_size': 64,
31 'num_hidden_layers': 2,
32 'num_attention_heads': 8,
33 'num_key_value_heads': 4,
34})
35config_json['text_config']['rope_scaling']['mrope_section'] = [8, 4, 4]
36config_json['vision_config'].update(
37 {
38 'hidden_size': 32 * 4,
39 'intermediate_size': 64,
40 'num_heads': 4,
41 'out_hidden_size': 8,
42 'depth': 6,
43 'deepstack_visual_indexes': [1, 3, 5],
44 }
45)
46with open(f"{save_folder}/config.json", "w", encoding='utf-8') as f:
47 json.dump(config_json, f, indent=2)
48
49config = AutoConfig.from_pretrained(
50 save_folder,
51 trust_remote_code=True,
52)
53print(config)
54torch.set_default_dtype(torch.bfloat16)
55model = Qwen3VLForConditionalGeneration(config)
56torch.set_default_dtype(torch.float32)
57if file_exists(filename="generation_config.json", repo_id=source_model_id, repo_type='model'):
58 model.generation_config = GenerationConfig.from_pretrained(
59 source_model_id, trust_remote_code=True,
60 )
61 model.generation_config.do_sample = True
62 print(model.generation_config)
63model = model.cpu()
64with torch.no_grad():
65 for name, p in sorted(model.named_parameters()):
66 torch.nn.init.normal_(p, 0, 0.1)
67 print(name, p.shape)
68model.save_pretrained(save_folder)1Qwen3VLForConditionalGeneration(
2 (model): Qwen3VLModel(
3 (visual): Qwen3VLVisionModel(
4 (patch_embed): Qwen3VLVisionPatchEmbed(
5 (proj): Conv3d(3, 128, kernel_size=(2, 16, 16), stride=(2, 16, 16))
6 )
7 (pos_embed): Embedding(2304, 128)
8 (rotary_pos_emb): Qwen3VLVisionRotaryEmbedding()
9 (blocks): ModuleList(
10 (0-5): 6 x Qwen3VLVisionBlock(
11 (norm1): LayerNorm((128,), eps=1e-06, elementwise_affine=True)
12 (norm2): LayerNorm((128,), eps=1e-06, elementwise_affine=True)
13 (attn): Qwen3VLVisionAttention(
14 (qkv): Linear(in_features=128, out_features=384, bias=True)
15 (proj): Linear(in_features=128, out_features=128, bias=True)
16 )
17 (mlp): Qwen3VLVisionMLP(
18 (linear_fc1): Linear(in_features=128, out_features=64, bias=True)
19 (linear_fc2): Linear(in_features=64, out_features=128, bias=True)
20 (act_fn): PytorchGELUTanh()
21 )
22 )
23 )
24 (merger): Qwen3VLVisionPatchMerger(
25 (norm): LayerNorm((128,), eps=1e-06, elementwise_affine=True)
26 (linear_fc1): Linear(in_features=512, out_features=512, bias=True)
27 (act_fn): GELU(approximate='none')
28 (linear_fc2): Linear(in_features=512, out_features=8, bias=True)
29 )
30 (deepstack_merger_list): ModuleList(
31 (0-2): 3 x Qwen3VLVisionPatchMerger(
32 (norm): LayerNorm((512,), eps=1e-06, elementwise_affine=True)
33 (linear_fc1): Linear(in_features=512, out_features=512, bias=True)
34 (act_fn): GELU(approximate='none')
35 (linear_fc2): Linear(in_features=512, out_features=8, bias=True)
36 )
37 )
38 )
39 (language_model): Qwen3VLTextModel(
40 (embed_tokens): Embedding(151936, 8)
41 (layers): ModuleList(
42 (0-1): 2 x Qwen3VLTextDecoderLayer(
43 (self_attn): Qwen3VLTextAttention(
44 (q_proj): Linear(in_features=8, out_features=256, bias=False)
45 (k_proj): Linear(in_features=8, out_features=128, bias=False)
46 (v_proj): Linear(in_features=8, out_features=128, bias=False)
47 (o_proj): Linear(in_features=256, out_features=8, bias=False)
48 (q_norm): Qwen3VLTextRMSNorm((32,), eps=1e-06)
49 (k_norm): Qwen3VLTextRMSNorm((32,), eps=1e-06)
50 )
51 (mlp): Qwen3VLTextMLP(
52 (gate_proj): Linear(in_features=8, out_features=64, bias=False)
53 (up_proj): Linear(in_features=8, out_features=64, bias=False)
54 (down_proj): Linear(in_features=64, out_features=8, bias=False)
55 (act_fn): SiLU()
56 )
57 (input_layernorm): Qwen3VLTextRMSNorm((8,), eps=1e-06)
58 (post_attention_layernorm): Qwen3VLTextRMSNorm((8,), eps=1e-06)
59 )
60 )
61 (norm): Qwen3VLTextRMSNorm((8,), eps=1e-06)
62 (rotary_emb): Qwen3VLTextRotaryEmbedding()
63 )
64 )
65 (lm_head): Linear(in_features=8, out_features=151936, bias=False)
66)