Views
No views yet
1import torch
2from transformers import AutoProcessor, Glm4vMoeForConditionalGeneration
3
4model_id = "tiny-random/glm-4.5v"
5messages = [
6 {
7 "role": "user",
8 "content": [
9 {
10 "type": "image",
11 "url": "https://upload.wikimedia.org/wikipedia/commons/f/fa/Grayscale_8bits_palette_sample_image.png"
12 },
13 {
14 "type": "text",
15 "text": "describe this image"
16 }
17 ],
18 }
19]
20processor = AutoProcessor.from_pretrained(model_id)
21model = Glm4vMoeForConditionalGeneration.from_pretrained(
22 model_id,
23 torch_dtype=torch.bfloat16,
24 device_map="auto",
25)
26inputs = processor.apply_chat_template(
27 messages,
28 tokenize=True,
29 add_generation_prompt=True,
30 return_dict=True,
31 return_tensors="pt"
32).to(model.device)
33inputs.pop("token_type_ids", None)
34generated_ids = model.generate(**inputs, max_new_tokens=16)
35output_text = processor.decode(generated_ids[0][inputs["input_ids"].shape[1]:], skip_special_tokens=False)
36print(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 Glm4vForConditionalGeneration,
13 Glm4vMoeForConditionalGeneration,
14 set_seed,
15)
16from transformers.models.glm4v_moe.modeling_glm4v_moe import Glm4vMoeTextTopkRouter
17
18source_model_id = "zai-org/GLM-4.5V"
19save_folder = "/tmp/tiny-random/glm-4.5v"
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)
25config_json['text_config'].update({
26 "hidden_size": 32,
27 "head_dim": 32,
28 "intermediate_size": 128,
29 "first_k_dense_replace": 1,
30 "moe_intermediate_size": 64,
31 "num_attention_heads": 2,
32 "num_key_value_heads": 1,
33 "num_hidden_layers": 2, # one dense, one moe
34 "tie_word_embeddings": True,
35})
36config_json['text_config']['rope_scaling']['mrope_section'] = [2, 2, 4]
37config_json['vision_config']['hidden_size'] = 64
38config_json['vision_config']['depth'] = 2
39config_json['vision_config']['num_heads'] = 2
40config_json['vision_config']['intermediate_size'] = 128
41config_json['vision_config']['out_hidden_size'] = config_json['text_config']['hidden_size']
42
43with open(f"{save_folder}/config.json", "w", encoding='utf-8') as f:
44 json.dump(config_json, f, indent=2)
45
46config = AutoConfig.from_pretrained(
47 save_folder,
48 trust_remote_code=True,
49)
50print(config)
51torch.set_default_dtype(torch.bfloat16)
52model = Glm4vMoeForConditionalGeneration(config)
53torch.set_default_dtype(torch.float32)
54if file_exists(filename="generation_config.json", repo_id=source_model_id, repo_type='model'):
55 model.generation_config = GenerationConfig.from_pretrained(
56 source_model_id, trust_remote_code=True,
57 )
58set_seed(42)
59model = model.cpu() # cpu is more stable for random initialization across machines
60num_params = sum(p.numel() for p in model.parameters())
61with torch.no_grad():
62 for name, p in sorted(model.named_parameters()):
63 torch.nn.init.normal_(p, 0, 0.1)
64 print(name, p.shape, p.dtype, p.device, f'{p.numel() / num_params * 100: .2f}%')
65for _, m in sorted(model.named_modules()):
66 if isinstance(m, Glm4vMoeTextTopkRouter):
67 assert 'e_score_correction_bias' in m.state_dict()
68 torch.nn.init.normal_(m.e_score_correction_bias, 0, 1)
69model.save_pretrained(save_folder)
70print(model)1Glm4vMoeForConditionalGeneration(
2 (model): Glm4vMoeModel(
3 (visual): Glm4vMoeVisionModel(
4 (embeddings): Glm4vMoeVisionEmbeddings(
5 (position_embedding): Embedding(576, 64)
6 )
7 (patch_embed): Glm4vMoeVisionPatchEmbed(
8 (proj): Conv3d(3, 64, kernel_size=(2, 14, 14), stride=(2, 14, 14))
9 )
10 (rotary_pos_emb): Glm4vMoeVisionRotaryEmbedding()
11 (blocks): ModuleList(
12 (0-1): 2 x Glm4vMoeVisionBlock(
13 (norm1): Glm4vMoeRMSNorm((64,), eps=1e-05)
14 (norm2): Glm4vMoeRMSNorm((64,), eps=1e-05)
15 (attn): Glm4vMoeVisionAttention(
16 (qkv): Linear(in_features=64, out_features=192, bias=False)
17 (proj): Linear(in_features=64, out_features=64, bias=False)
18 )
19 (mlp): Glm4vMoeisionMlp(
20 (gate_proj): Linear(in_features=64, out_features=32, bias=False)
21 (up_proj): Linear(in_features=64, out_features=32, bias=False)
22 (down_proj): Linear(in_features=32, out_features=64, bias=False)
23 (act_fn): SiLU()
24 )
25 )
26 )
27 (merger): Glm4vMoeVisionPatchMerger(
28 (proj): Linear(in_features=32, out_features=32, bias=False)
29 (post_projection_norm): LayerNorm((32,), eps=1e-05, elementwise_affine=True)
30 (gate_proj): Linear(in_features=32, out_features=128, bias=False)
31 (up_proj): Linear(in_features=32, out_features=128, bias=False)
32 (down_proj): Linear(in_features=128, out_features=32, bias=False)
33 (act1): GELU(approximate='none')
34 (act_fn): SiLU()
35 )
36 (post_conv_layernorm): Glm4vMoeRMSNorm((64,), eps=1e-05)
37 (downsample): Conv2d(64, 32, kernel_size=(2, 2), stride=(2, 2))
38 (post_layernorm): Glm4vMoeRMSNorm((64,), eps=1e-05)
39 )
40 (language_model): Glm4vMoeTextModel(
41 (embed_tokens): Embedding(151552, 32, padding_idx=151329)
42 (layers): ModuleList(
43 (0): Glm4vMoeTextDecoderLayer(
44 (self_attn): Glm4vMoeTextAttention(
45 (q_proj): Linear(in_features=32, out_features=64, bias=True)
46 (k_proj): Linear(in_features=32, out_features=32, bias=True)
47 (v_proj): Linear(in_features=32, out_features=32, bias=True)
48 (o_proj): Linear(in_features=64, out_features=32, bias=False)
49 )
50 (mlp): Glm4vMoeTextMLP(
51 (gate_proj): Linear(in_features=32, out_features=128, bias=False)
52 (up_proj): Linear(in_features=32, out_features=128, bias=False)
53 (down_proj): Linear(in_features=128, out_features=32, bias=False)
54 (act_fn): SiLU()
55 )
56 (input_layernorm): Glm4vMoeTextRMSNorm((32,), eps=1e-05)
57 (post_attention_layernorm): Glm4vMoeTextRMSNorm((32,), eps=1e-05)
58 )
59 (1): Glm4vMoeTextDecoderLayer(
60 (self_attn): Glm4vMoeTextAttention(
61 (q_proj): Linear(in_features=32, out_features=64, bias=True)
62 (k_proj): Linear(in_features=32, out_features=32, bias=True)
63 (v_proj): Linear(in_features=32, out_features=32, bias=True)
64 (o_proj): Linear(in_features=64, out_features=32, bias=False)
65 )
66 (mlp): Glm4vMoeTextMoE(
67 (experts): ModuleList(
68 (0-127): 128 x Glm4vMoeTextMLP(
69 (gate_proj): Linear(in_features=32, out_features=64, bias=False)
70 (up_proj): Linear(in_features=32, out_features=64, bias=False)
71 (down_proj): Linear(in_features=64, out_features=32, bias=False)
72 (act_fn): SiLU()
73 )
74 )
75 (gate): Glm4vMoeTextTopkRouter()
76 (shared_experts): Glm4vMoeTextMLP(
77 (gate_proj): Linear(in_features=32, out_features=64, bias=False)
78 (up_proj): Linear(in_features=32, out_features=64, bias=False)
79 (down_proj): Linear(in_features=64, out_features=32, bias=False)
80 (act_fn): SiLU()
81 )
82 )
83 (input_layernorm): Glm4vMoeTextRMSNorm((32,), eps=1e-05)
84 (post_attention_layernorm): Glm4vMoeTextRMSNorm((32,), eps=1e-05)
85 )
86 )
87 (norm): Glm4vMoeRMSNorm((32,), eps=1e-05)
88 (rotary_emb): Glm4vMoeTextRotaryEmbedding()
89 )
90 )
91 (lm_head): Linear(in_features=32, out_features=151552, bias=False)
92)