Views
No views yet
| File path | Size |
|---|---|
| model.safetensors | 5.4MB |
1import torch
2from transformers import AutoModelForCausalLM, AutoProcessor
3
4model_id = "yujiepan/gemma-4-moe-tiny-random"
5processor = AutoProcessor.from_pretrained(model_id)
6model = AutoModelForCausalLM.from_pretrained(
7 model_id, dtype=torch.bfloat16, device_map="auto"
8)
9messages = [
10 {
11 "role": "user",
12 "content": [
13 {
14 "type": "image",
15 "url": "https://upload.wikimedia.org/wikipedia/commons/thumb/8/8d/Lightmatter_panda.jpg/960px-Lightmatter_panda.jpg",
16 },
17 {"type": "text", "text": "What is shown in this image?"},
18 ],
19 },
20 {
21 "role": "assistant",
22 "content": [{"type": "text", "text": "Dummy response for image"}],
23 },
24 {
25 "role": "user",
26 "content": [
27 {
28 "type": "video",
29 "video": "https://github.com/bebechien/gemma/raw/refs/heads/main/videos/ForBiggerBlazes.mp4",
30 },
31 {"type": "text", "text": "Describe this video."},
32 ],
33 },
34]
35inputs = processor.apply_chat_template(
36 messages,
37 tokenize=True,
38 return_dict=True,
39 return_tensors="pt",
40 add_generation_prompt=True,
41).to(model.device)
42input_len = inputs["input_ids"].shape[-1]
43print("input_len:", input_len)
44outputs = model.generate(**inputs, max_new_tokens=32)
45response = processor.decode(outputs[0], skip_special_tokens=False)
46response = response.replace("<|image|>", "I")
47response = response.replace("<|video|>", "V")
48print(response)1import json
2from pathlib import Path
3
4import torch
5from huggingface_hub import file_exists, hf_hub_download
6
7from transformers import (
8 AutoConfig,
9 AutoModelForCausalLM,
10 AutoProcessor,
11 AutoTokenizer,
12 Gemma4ForConditionalGeneration,
13 GenerationConfig,
14 set_seed,
15)
16
17source_model_id = "google/gemma-4-26B-A4B-it"
18save_folder = "/tmp/yujiepan/gemma-4-moe-tiny-random"
19
20processor = AutoProcessor.from_pretrained(source_model_id)
21processor.save_pretrained(save_folder)
22
23with open(
24 hf_hub_download(source_model_id, filename="config.json", repo_type="model"),
25 "r",
26 encoding="utf-8",
27) as f:
28 config_json = json.load(f)
29
30config_json["text_config"].update(
31 {
32 "global_head_dim": 64,
33 "head_dim": 32,
34 "hidden_size": 8,
35 # "hidden_size_per_layer_input": 0, # only "E" variants have this
36 "intermediate_size": 64,
37 "layer_types": [
38 "sliding_attention",
39 "full_attention",
40 "sliding_attention",
41 "full_attention",
42 ],
43 'moe_intermediate_size': 32,
44 "num_attention_heads": 8,
45 "num_hidden_layers": 4,
46 "num_key_value_heads": 4,
47 # "num_kv_shared_layers": 0, # only "E" variants have this
48 }
49)
50config_json["vision_config"].update(
51 {
52 "num_hidden_layers": 2,
53 "hidden_size": 8,
54 "intermediate_size": 64,
55 "head_dim": 32,
56 "global_head_dim": 32,
57 "num_attention_heads": 4,
58 "num_key_value_heads": 4,
59 }
60)
61
62with open(f"{save_folder}/config.json", "w", encoding="utf-8") as f:
63 json.dump(config_json, f, indent=2)
64
65config = AutoConfig.from_pretrained(
66 save_folder,
67 trust_remote_code=True,
68)
69print(config)
70
71torch.set_default_dtype(torch.bfloat16)
72model = Gemma4ForConditionalGeneration(config)
73torch.set_default_dtype(torch.float32)
74if file_exists(
75 filename="generation_config.json", repo_id=source_model_id, repo_type="model"
76):
77 model.generation_config = GenerationConfig.from_pretrained(
78 source_model_id,
79 trust_remote_code=True,
80 )
81set_seed(42)
82model = model.cpu()
83all_numels = 0
84for name, p in sorted(model.named_parameters()):
85 all_numels += p.numel()
86with torch.no_grad():
87 for name, p in sorted(model.named_parameters()):
88 torch.nn.init.normal_(p, 0, 0.2)
89 print(name, p.shape, f"{p.numel() / all_numels * 100: .4f}%")
90model.save_pretrained(save_folder)1Gemma4ForConditionalGeneration(
2 (model): Gemma4Model(
3 (vision_tower): Gemma4VisionModel(
4 (patch_embedder): Gemma4VisionPatchEmbedder(
5 (input_proj): Linear(in_features=768, out_features=8, bias=False)
6 )
7 (encoder): Gemma4VisionEncoder(
8 (rotary_emb): Gemma4VisionRotaryEmbedding()
9 (layers): ModuleList(
10 (0-1): 2 x Gemma4VisionEncoderLayer(
11 (self_attn): Gemma4VisionAttention(
12 (q_proj): Gemma4ClippableLinear(
13 (linear): Linear(in_features=8, out_features=128, bias=False)
14 )
15 (k_proj): Gemma4ClippableLinear(
16 (linear): Linear(in_features=8, out_features=128, bias=False)
17 )
18 (v_proj): Gemma4ClippableLinear(
19 (linear): Linear(in_features=8, out_features=128, bias=False)
20 )
21 (o_proj): Gemma4ClippableLinear(
22 (linear): Linear(in_features=128, out_features=8, bias=False)
23 )
24 (q_norm): Gemma4RMSNorm()
25 (k_norm): Gemma4RMSNorm()
26 (v_norm): Gemma4RMSNorm()
27 )
28 (mlp): Gemma4VisionMLP(
29 (gate_proj): Gemma4ClippableLinear(
30 (linear): Linear(in_features=8, out_features=64, bias=False)
31 )
32 (up_proj): Gemma4ClippableLinear(
33 (linear): Linear(in_features=8, out_features=64, bias=False)
34 )
35 (down_proj): Gemma4ClippableLinear(
36 (linear): Linear(in_features=64, out_features=8, bias=False)
37 )
38 (act_fn): GELUTanh()
39 )
40 (input_layernorm): Gemma4RMSNorm()
41 (post_attention_layernorm): Gemma4RMSNorm()
42 (pre_feedforward_layernorm): Gemma4RMSNorm()
43 (post_feedforward_layernorm): Gemma4RMSNorm()
44 )
45 )
46 )
47 (pooler): Gemma4VisionPooler()
48 )
49 (language_model): Gemma4TextModel(
50 (embed_tokens): Gemma4TextScaledWordEmbedding(262144, 8, padding_idx=0)
51 (layers): ModuleList(
52 (0): Gemma4TextDecoderLayer(
53 (self_attn): Gemma4TextAttention(
54 (q_proj): Linear(in_features=8, out_features=256, bias=False)
55 (q_norm): Gemma4RMSNorm()
56 (k_norm): Gemma4RMSNorm()
57 (v_norm): Gemma4RMSNorm()
58 (k_proj): Linear(in_features=8, out_features=128, bias=False)
59 (v_proj): Linear(in_features=8, out_features=128, bias=False)
60 (o_proj): Linear(in_features=256, out_features=8, bias=False)
61 )
62 (mlp): Gemma4TextMLP(
63 (gate_proj): Linear(in_features=8, out_features=64, bias=False)
64 (up_proj): Linear(in_features=8, out_features=64, bias=False)
65 (down_proj): Linear(in_features=64, out_features=8, bias=False)
66 (act_fn): GELUTanh()
67 )
68 (input_layernorm): Gemma4RMSNorm()
69 (post_attention_layernorm): Gemma4RMSNorm()
70 (pre_feedforward_layernorm): Gemma4RMSNorm()
71 (post_feedforward_layernorm): Gemma4RMSNorm()
72 (router): Gemma4TextRouter(
73 (norm): Gemma4RMSNorm()
74 (proj): Linear(in_features=8, out_features=128, bias=False)
75 )
76 (experts): Gemma4TextExperts(
77 (act_fn): GELUTanh()
78 )
79 (post_feedforward_layernorm_1): Gemma4RMSNorm()
80 (post_feedforward_layernorm_2): Gemma4RMSNorm()
81 (pre_feedforward_layernorm_2): Gemma4RMSNorm()
82 )
83 (1): Gemma4TextDecoderLayer(
84 (self_attn): Gemma4TextAttention(
85 (q_proj): Linear(in_features=8, out_features=512, bias=False)
86 (q_norm): Gemma4RMSNorm()
87 (k_norm): Gemma4RMSNorm()
88 (v_norm): Gemma4RMSNorm()
89 (k_proj): Linear(in_features=8, out_features=128, bias=False)
90 (o_proj): Linear(in_features=512, out_features=8, bias=False)
91 )
92 (mlp): Gemma4TextMLP(
93 (gate_proj): Linear(in_features=8, out_features=64, bias=False)
94 (up_proj): Linear(in_features=8, out_features=64, bias=False)
95 (down_proj): Linear(in_features=64, out_features=8, bias=False)
96 (act_fn): GELUTanh()
97 )
98 (input_layernorm): Gemma4RMSNorm()
99 (post_attention_layernorm): Gemma4RMSNorm()
100 (pre_feedforward_layernorm): Gemma4RMSNorm()
101 (post_feedforward_layernorm): Gemma4RMSNorm()
102 (router): Gemma4TextRouter(
103 (norm): Gemma4RMSNorm()
104 (proj): Linear(in_features=8, out_features=128, bias=False)
105 )
106 (experts): Gemma4TextExperts(
107 (act_fn): GELUTanh()
108 )
109 (post_feedforward_layernorm_1): Gemma4RMSNorm()
110 (post_feedforward_layernorm_2): Gemma4RMSNorm()
111 (pre_feedforward_layernorm_2): Gemma4RMSNorm()
112 )
113 (2): Gemma4TextDecoderLayer(
114 (self_attn): Gemma4TextAttention(
115 (q_proj): Linear(in_features=8, out_features=256, bias=False)
116 (q_norm): Gemma4RMSNorm()
117 (k_norm): Gemma4RMSNorm()
118 (v_norm): Gemma4RMSNorm()
119 (k_proj): Linear(in_features=8, out_features=128, bias=False)
120 (v_proj): Linear(in_features=8, out_features=128, bias=False)
121 (o_proj): Linear(in_features=256, out_features=8, bias=False)
122 )
123 (mlp): Gemma4TextMLP(
124 (gate_proj): Linear(in_features=8, out_features=64, bias=False)
125 (up_proj): Linear(in_features=8, out_features=64, bias=False)
126 (down_proj): Linear(in_features=64, out_features=8, bias=False)
127 (act_fn): GELUTanh()
128 )
129 (input_layernorm): Gemma4RMSNorm()
130 (post_attention_layernorm): Gemma4RMSNorm()
131 (pre_feedforward_layernorm): Gemma4RMSNorm()
132 (post_feedforward_layernorm): Gemma4RMSNorm()
133 (router): Gemma4TextRouter(
134 (norm): Gemma4RMSNorm()
135 (proj): Linear(in_features=8, out_features=128, bias=False)
136 )
137 (experts): Gemma4TextExperts(
138 (act_fn): GELUTanh()
139 )
140 (post_feedforward_layernorm_1): Gemma4RMSNorm()
141 (post_feedforward_layernorm_2): Gemma4RMSNorm()
142 (pre_feedforward_layernorm_2): Gemma4RMSNorm()
143 )
144 (3): Gemma4TextDecoderLayer(
145 (self_attn): Gemma4TextAttention(
146 (q_proj): Linear(in_features=8, out_features=512, bias=False)
147 (q_norm): Gemma4RMSNorm()
148 (k_norm): Gemma4RMSNorm()
149 (v_norm): Gemma4RMSNorm()
150 (k_proj): Linear(in_features=8, out_features=128, bias=False)
151 (o_proj): Linear(in_features=512, out_features=8, bias=False)
152 )
153 (mlp): Gemma4TextMLP(
154 (gate_proj): Linear(in_features=8, out_features=64, bias=False)
155 (up_proj): Linear(in_features=8, out_features=64, bias=False)
156 (down_proj): Linear(in_features=64, out_features=8, bias=False)
157 (act_fn): GELUTanh()
158 )
159 (input_layernorm): Gemma4RMSNorm()
160 (post_attention_layernorm): Gemma4RMSNorm()
161 (pre_feedforward_layernorm): Gemma4RMSNorm()
162 (post_feedforward_layernorm): Gemma4RMSNorm()
163 (router): Gemma4TextRouter(
164 (norm): Gemma4RMSNorm()
165 (proj): Linear(in_features=8, out_features=128, bias=False)
166 )
167 (experts): Gemma4TextExperts(
168 (act_fn): GELUTanh()
169 )
170 (post_feedforward_layernorm_1): Gemma4RMSNorm()
171 (post_feedforward_layernorm_2): Gemma4RMSNorm()
172 (pre_feedforward_layernorm_2): Gemma4RMSNorm()
173 )
174 )
175 (norm): Gemma4RMSNorm()
176 (rotary_emb): Gemma4TextRotaryEmbedding()
177 )
178 (embed_vision): Gemma4MultimodalEmbedder(
179 (embedding_projection): Linear(in_features=8, out_features=8, bias=False)
180 (embedding_pre_projection_norm): Gemma4RMSNorm()
181 )
182 )
183 (lm_head): Linear(in_features=8, out_features=262144, bias=False)
184)