Views
No views yet
1import torch
2from transformers import AutoProcessor, Glm4vMoeForConditionalGeneration
3
4model_id = "yujiepan/glm-4.6v-tiny-random"
5messages = [
6 {
7 "role": "user",
8 "content": [
9 {
10 "type": "image",
11 "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/p-blog/candy.JPG"
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="cuda",
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(
36 generated_ids[0][inputs["input_ids"].shape[1]:], skip_special_tokens=False)
37print(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.6V"
19save_folder = "/tmp/yujiepan/glm-4.6v-tiny-random"
20processor = AutoProcessor.from_pretrained(
21 source_model_id, trust_remote_code=True)
22processor.save_pretrained(save_folder)
23
24with open(hf_hub_download(source_model_id, filename='config.json', repo_type='model'), 'r', encoding='utf-8') as f:
25 config_json = json.load(f)
26config_json['text_config'].update({
27 "hidden_size": 8,
28 "head_dim": 32,
29 "intermediate_size": 64,
30 "first_k_dense_replace": 1,
31 "moe_intermediate_size": 64,
32 "num_attention_heads": 8,
33 "num_key_value_heads": 4,
34 "num_hidden_layers": 2, # one dense, one moe
35 "tie_word_embeddings": True,
36})
37config_json['text_config']['rope_parameters']['mrope_section'] = [2, 2, 4]
38config_json['vision_config']['hidden_size'] = 64
39config_json['vision_config']['depth'] = 2
40config_json['vision_config']['num_heads'] = 2
41config_json['vision_config']['intermediate_size'] = 64
42config_json['vision_config']['out_hidden_size'] = config_json['text_config']['hidden_size']
43
44with open(f"{save_folder}/config.json", "w", encoding='utf-8') as f:
45 json.dump(config_json, f, indent=2)
46
47config = AutoConfig.from_pretrained(
48 save_folder,
49 trust_remote_code=True,
50)
51print(config)
52torch.set_default_dtype(torch.bfloat16)
53model = Glm4vMoeForConditionalGeneration(config)
54torch.set_default_dtype(torch.float32)
55if file_exists(filename="generation_config.json", repo_id=source_model_id, repo_type='model'):
56 model.generation_config = GenerationConfig.from_pretrained(
57 source_model_id, trust_remote_code=True,
58 )
59set_seed(42)
60model = model.cpu() # cpu is more stable for random initialization across machines
61num_params = sum(p.numel() for p in model.parameters())
62with torch.no_grad():
63 for name, p in sorted(model.named_parameters()):
64 torch.nn.init.normal_(p, 0, 0.1)
65 print(name, p.shape, p.dtype, p.device,
66 f'{p.numel() / num_params * 100: .2f}%')
67for _, m in sorted(model.named_modules()):
68 if isinstance(m, Glm4vMoeTextTopkRouter):
69 assert 'e_score_correction_bias' in m.state_dict()
70 torch.nn.init.normal_(m.e_score_correction_bias, 0, 1)
71model.save_pretrained(save_folder)
72print(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=8, bias=False)
21 (up_proj): Linear(in_features=64, out_features=8, bias=False)
22 (down_proj): Linear(in_features=8, out_features=64, bias=False)
23 (act_fn): SiLUActivation()
24 )
25 )
26 )
27 (merger): Glm4vMoeVisionPatchMerger(
28 (proj): Linear(in_features=8, out_features=8, bias=False)
29 (post_projection_norm): LayerNorm((8,), eps=1e-05, elementwise_affine=True)
30 (gate_proj): Linear(in_features=8, out_features=64, bias=False)
31 (up_proj): Linear(in_features=8, out_features=64, bias=False)
32 (down_proj): Linear(in_features=64, out_features=8, bias=False)
33 (act1): GELU(approximate='none')
34 (act_fn): SiLUActivation()
35 )
36 (post_conv_layernorm): Glm4vMoeRMSNorm((64,), eps=1e-05)
37 (downsample): Conv2d(64, 8, 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, 8, padding_idx=151329)
42 (layers): ModuleList(
43 (0): Glm4vMoeTextDecoderLayer(
44 (self_attn): Glm4vMoeTextAttention(
45 (q_proj): Linear(in_features=8, out_features=256, bias=True)
46 (k_proj): Linear(in_features=8, out_features=128, bias=True)
47 (v_proj): Linear(in_features=8, out_features=128, bias=True)
48 (o_proj): Linear(in_features=256, out_features=8, bias=False)
49 )
50 (mlp): Glm4vMoeTextMLP(
51 (gate_proj): Linear(in_features=8, out_features=64, bias=False)
52 (up_proj): Linear(in_features=8, out_features=64, bias=False)
53 (down_proj): Linear(in_features=64, out_features=8, bias=False)
54 (act_fn): SiLUActivation()
55 )
56 (input_layernorm): Glm4vMoeTextRMSNorm((8,), eps=1e-05)
57 (post_attention_layernorm): Glm4vMoeTextRMSNorm((8,), eps=1e-05)
58 )
59 (1): Glm4vMoeTextDecoderLayer(
60 (self_attn): Glm4vMoeTextAttention(
61 (q_proj): Linear(in_features=8, out_features=256, bias=True)
62 (k_proj): Linear(in_features=8, out_features=128, bias=True)
63 (v_proj): Linear(in_features=8, out_features=128, bias=True)
64 (o_proj): Linear(in_features=256, out_features=8, bias=False)
65 )
66 (mlp): Glm4vMoeTextMoE(
67 (experts): Glm4vMoeTextNaiveMoe(
68 (act_fn): SiLUActivation()
69 )
70 (gate): Glm4vMoeTextTopkRouter()
71 (shared_experts): Glm4vMoeTextMLP(
72 (gate_proj): Linear(in_features=8, out_features=64, bias=False)
73 (up_proj): Linear(in_features=8, out_features=64, bias=False)
74 (down_proj): Linear(in_features=64, out_features=8, bias=False)
75 (act_fn): SiLUActivation()
76 )
77 )
78 (input_layernorm): Glm4vMoeTextRMSNorm((8,), eps=1e-05)
79 (post_attention_layernorm): Glm4vMoeTextRMSNorm((8,), eps=1e-05)
80 )
81 )
82 (norm): Glm4vMoeRMSNorm((8,), eps=1e-05)
83 (rotary_emb): Glm4vMoeTextRotaryEmbedding()
84 )
85 )
86 (lm_head): Linear(in_features=8, out_features=151552, bias=False)
87)