Views
No views yet
| File path | Size |
|---|---|
| model.safetensors | 9.5MB |
1import torch
2from transformers import AutoModelForCausalLM, AutoProcessor
3
4model_id = "tiny-random/gemma-4-e"
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": "audio",
15 "audio": "https://github.com/google-gemma/cookbook/raw/refs/heads/main/apps/sample-data/journal1.wav",
16 },
17 {"type": "text", "text": "Transcribe the following speech segment."},
18 ],
19 },
20 {
21 "role": "assistant",
22 "content": [{"type": "text", "text": "Dummy response for audio"}],
23 },
24 {
25 "role": "user",
26 "content": [
27 {
28 "type": "image",
29 "url": "https://raw.githubusercontent.com/google-gemma/cookbook/4a352192744f73fba5b80aeea3a8ba9b543edd29/apps/sample-data/surprise.png",
30 },
31 {"type": "text", "text": "What is shown in this image?"},
32 ],
33 },
34 {
35 "role": "assistant",
36 "content": [{"type": "text", "text": "Dummy response for image"}],
37 },
38 {
39 "role": "user",
40 "content": [
41 {
42 "type": "video",
43 "video": "https://github.com/bebechien/gemma/raw/refs/heads/main/videos/ForBiggerBlazes.mp4",
44 },
45 {"type": "text", "text": "Describe this video."},
46 ],
47 },
48]
49inputs = processor.apply_chat_template(
50 messages,
51 tokenize=True,
52 return_dict=True,
53 return_tensors="pt",
54 add_generation_prompt=True,
55).to(model.device)
56input_len = inputs["input_ids"].shape[-1]
57print("input_len:", input_len)
58outputs = model.generate(**inputs, max_new_tokens=32)
59response = processor.decode(outputs[0], skip_special_tokens=False)
60response = response.replace("<|audio|>", "A")
61response = response.replace("<|image|>", "I")
62response = response.replace("<|video|>", "V")
63print(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-E4B-it"
18save_folder = "/tmp/tiny-random/gemma-4-e"
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["audio_config"].update(
31 {
32 "num_attention_heads": 2,
33 "num_hidden_layers": 2,
34 "hidden_size": 64,
35 "output_proj_dims": 32,
36 }
37)
38config_json["text_config"].update(
39 {
40 "global_head_dim": 64,
41 "head_dim": 32,
42 "hidden_size": 8,
43 "hidden_size_per_layer_input": 2,
44 "intermediate_size": 64,
45 "layer_types": [
46 "sliding_attention",
47 "full_attention",
48 "sliding_attention",
49 "full_attention",
50 ],
51 "num_attention_heads": 8,
52 "num_hidden_layers": 4,
53 "num_key_value_heads": 4,
54 "num_kv_shared_layers": 2,
55 }
56)
57config_json["vision_config"].update(
58 {
59 "num_hidden_layers": 2,
60 "hidden_size": 8,
61 "intermediate_size": 64,
62 "head_dim": 32,
63 "global_head_dim": 32,
64 "num_attention_heads": 4,
65 "num_key_value_heads": 4,
66 }
67)
68
69with open(f"{save_folder}/config.json", "w", encoding="utf-8") as f:
70 json.dump(config_json, f, indent=2)
71
72config = AutoConfig.from_pretrained(
73 save_folder,
74 trust_remote_code=True,
75)
76print(config)
77
78torch.set_default_dtype(torch.bfloat16)
79model = Gemma4ForConditionalGeneration(config)
80torch.set_default_dtype(torch.float32)
81if file_exists(
82 filename="generation_config.json", repo_id=source_model_id, repo_type="model"
83):
84 model.generation_config = GenerationConfig.from_pretrained(
85 source_model_id,
86 trust_remote_code=True,
87 )
88set_seed(42)
89model = model.cpu()
90all_numels = 0
91for name, p in sorted(model.named_parameters()):
92 all_numels += p.numel()
93with torch.no_grad():
94 for name, p in sorted(model.named_parameters()):
95 torch.nn.init.normal_(p, 0, 0.2)
96 print(name, p.shape, f"{p.numel() / all_numels * 100: .4f}%")
97model.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 (act_fn): GELUTanh()
73 (per_layer_input_gate): Linear(in_features=8, out_features=2, bias=False)
74 (per_layer_projection): Linear(in_features=2, out_features=8, bias=False)
75 (post_per_layer_input_norm): Gemma4RMSNorm()
76 )
77 (1): Gemma4TextDecoderLayer(
78 (self_attn): Gemma4TextAttention(
79 (q_proj): Linear(in_features=8, out_features=512, bias=False)
80 (q_norm): Gemma4RMSNorm()
81 (k_norm): Gemma4RMSNorm()
82 (v_norm): Gemma4RMSNorm()
83 (k_proj): Linear(in_features=8, out_features=256, bias=False)
84 (v_proj): Linear(in_features=8, out_features=256, bias=False)
85 (o_proj): Linear(in_features=512, out_features=8, bias=False)
86 )
87 (mlp): Gemma4TextMLP(
88 (gate_proj): Linear(in_features=8, out_features=64, bias=False)
89 (up_proj): Linear(in_features=8, out_features=64, bias=False)
90 (down_proj): Linear(in_features=64, out_features=8, bias=False)
91 (act_fn): GELUTanh()
92 )
93 (input_layernorm): Gemma4RMSNorm()
94 (post_attention_layernorm): Gemma4RMSNorm()
95 (pre_feedforward_layernorm): Gemma4RMSNorm()
96 (post_feedforward_layernorm): Gemma4RMSNorm()
97 (act_fn): GELUTanh()
98 (per_layer_input_gate): Linear(in_features=8, out_features=2, bias=False)
99 (per_layer_projection): Linear(in_features=2, out_features=8, bias=False)
100 (post_per_layer_input_norm): Gemma4RMSNorm()
101 )
102 (2): Gemma4TextDecoderLayer(
103 (self_attn): Gemma4TextAttention(
104 (q_proj): Linear(in_features=8, out_features=256, bias=False)
105 (q_norm): Gemma4RMSNorm()
106 (o_proj): Linear(in_features=256, out_features=8, bias=False)
107 )
108 (mlp): Gemma4TextMLP(
109 (gate_proj): Linear(in_features=8, out_features=64, bias=False)
110 (up_proj): Linear(in_features=8, out_features=64, bias=False)
111 (down_proj): Linear(in_features=64, out_features=8, bias=False)
112 (act_fn): GELUTanh()
113 )
114 (input_layernorm): Gemma4RMSNorm()
115 (post_attention_layernorm): Gemma4RMSNorm()
116 (pre_feedforward_layernorm): Gemma4RMSNorm()
117 (post_feedforward_layernorm): Gemma4RMSNorm()
118 (act_fn): GELUTanh()
119 (per_layer_input_gate): Linear(in_features=8, out_features=2, bias=False)
120 (per_layer_projection): Linear(in_features=2, out_features=8, bias=False)
121 (post_per_layer_input_norm): Gemma4RMSNorm()
122 )
123 (3): Gemma4TextDecoderLayer(
124 (self_attn): Gemma4TextAttention(
125 (q_proj): Linear(in_features=8, out_features=512, bias=False)
126 (q_norm): Gemma4RMSNorm()
127 (o_proj): Linear(in_features=512, out_features=8, bias=False)
128 )
129 (mlp): Gemma4TextMLP(
130 (gate_proj): Linear(in_features=8, out_features=64, bias=False)
131 (up_proj): Linear(in_features=8, out_features=64, bias=False)
132 (down_proj): Linear(in_features=64, out_features=8, bias=False)
133 (act_fn): GELUTanh()
134 )
135 (input_layernorm): Gemma4RMSNorm()
136 (post_attention_layernorm): Gemma4RMSNorm()
137 (pre_feedforward_layernorm): Gemma4RMSNorm()
138 (post_feedforward_layernorm): Gemma4RMSNorm()
139 (act_fn): GELUTanh()
140 (per_layer_input_gate): Linear(in_features=8, out_features=2, bias=False)
141 (per_layer_projection): Linear(in_features=2, out_features=8, bias=False)
142 (post_per_layer_input_norm): Gemma4RMSNorm()
143 )
144 )
145 (norm): Gemma4RMSNorm()
146 (rotary_emb): Gemma4TextRotaryEmbedding()
147 (embed_tokens_per_layer): Gemma4TextScaledWordEmbedding(262144, 8, padding_idx=0)
148 (per_layer_model_projection): Linear(in_features=8, out_features=8, bias=False)
149 (per_layer_projection_norm): Gemma4RMSNorm()
150 )
151 (audio_tower): Gemma4AudioModel(
152 (subsample_conv_projection): Gemma4AudioSubSampleConvProjection(
153 (layer0): Gemma4AudioSubSampleConvProjectionLayer(
154 (conv): Conv2d(1, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)
155 (norm): LayerNorm((128,), eps=1e-06, elementwise_affine=True)
156 (act): ReLU()
157 )
158 (layer1): Gemma4AudioSubSampleConvProjectionLayer(
159 (conv): Conv2d(128, 32, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)
160 (norm): LayerNorm((32,), eps=1e-06, elementwise_affine=True)
161 (act): ReLU()
162 )
163 (input_proj_linear): Linear(in_features=1024, out_features=64, bias=False)
164 )
165 (rel_pos_enc): Gemma4AudioRelPositionalEncoding()
166 (layers): ModuleList(
167 (0-1): 2 x Gemma4AudioLayer(
168 (feed_forward1): Gemma4AudioFeedForward(
169 (ffw_layer_1): Gemma4ClippableLinear(
170 (linear): Linear(in_features=64, out_features=256, bias=False)
171 )
172 (ffw_layer_2): Gemma4ClippableLinear(
173 (linear): Linear(in_features=256, out_features=64, bias=False)
174 )
175 (pre_layer_norm): Gemma4RMSNorm()
176 (post_layer_norm): Gemma4RMSNorm()
177 (act_fn): SiLUActivation()
178 )
179 (feed_forward2): Gemma4AudioFeedForward(
180 (ffw_layer_1): Gemma4ClippableLinear(
181 (linear): Linear(in_features=64, out_features=256, bias=False)
182 )
183 (ffw_layer_2): Gemma4ClippableLinear(
184 (linear): Linear(in_features=256, out_features=64, bias=False)
185 )
186 (pre_layer_norm): Gemma4RMSNorm()
187 (post_layer_norm): Gemma4RMSNorm()
188 (act_fn): SiLUActivation()
189 )
190 (self_attn): Gemma4AudioAttention(
191 (q_proj): Gemma4ClippableLinear(
192 (linear): Linear(in_features=64, out_features=64, bias=False)
193 )
194 (k_proj): Gemma4ClippableLinear(
195 (linear): Linear(in_features=64, out_features=64, bias=False)
196 )
197 (v_proj): Gemma4ClippableLinear(
198 (linear): Linear(in_features=64, out_features=64, bias=False)
199 )
200 (post): Gemma4ClippableLinear(
201 (linear): Linear(in_features=64, out_features=64, bias=False)
202 )
203 (relative_k_proj): Linear(in_features=64, out_features=64, bias=False)
204 )
205 (lconv1d): Gemma4AudioLightConv1d(
206 (linear_start): Gemma4ClippableLinear(
207 (linear): Linear(in_features=64, out_features=128, bias=False)
208 )
209 (linear_end): Gemma4ClippableLinear(
210 (linear): Linear(in_features=64, out_features=64, bias=False)
211 )
212 (depthwise_conv1d): Gemma4AudioCausalConv1d(64, 64, kernel_size=(5,), stride=(1,), groups=64, bias=False)
213 (pre_layer_norm): Gemma4RMSNorm()
214 (conv_norm): Gemma4RMSNorm()
215 (act_fn): SiLUActivation()
216 )
217 (norm_pre_attn): Gemma4RMSNorm()
218 (norm_post_attn): Gemma4RMSNorm()
219 (norm_out): Gemma4RMSNorm()
220 )
221 )
222 (output_proj): Linear(in_features=64, out_features=32, bias=True)
223 )
224 (embed_vision): Gemma4MultimodalEmbedder(
225 (embedding_projection): Linear(in_features=8, out_features=8, bias=False)
226 (embedding_pre_projection_norm): Gemma4RMSNorm()
227 )
228 (embed_audio): Gemma4MultimodalEmbedder(
229 (embedding_projection): Linear(in_features=32, out_features=8, bias=False)
230 (embedding_pre_projection_norm): Gemma4RMSNorm()
231 )
232 )
233 (lm_head): Linear(in_features=8, out_features=262144, bias=False)
234)