Views
No views yet
| File path | Size |
|---|---|
| model.safetensors | 4.6MB |
1import torch
2from transformers import AutoModelForCausalLM, AutoProcessor
3
4model_id = "tiny-random/gemma-4-dense"
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://raw.githubusercontent.com/google-gemma/cookbook/refs/heads/main/Demos/sample-data/GoldenGate.png",
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-31B-it"
18save_folder = "/tmp/tiny-random/gemma-4-dense"
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 "num_attention_heads": 8,
44 "num_hidden_layers": 4,
45 "num_key_value_heads": 4,
46 # "num_kv_shared_layers": 0, # only "E" variants have this
47 }
48)
49config_json["vision_config"].update(
50 {
51 "num_hidden_layers": 2,
52 "hidden_size": 8,
53 "intermediate_size": 64,
54 "head_dim": 32,
55 "global_head_dim": 32,
56 "num_attention_heads": 4,
57 "num_key_value_heads": 4,
58 }
59)
60
61with open(f"{save_folder}/config.json", "w", encoding="utf-8") as f:
62 json.dump(config_json, f, indent=2)
63
64config = AutoConfig.from_pretrained(
65 save_folder,
66 trust_remote_code=True,
67)
68print(config)
69
70torch.set_default_dtype(torch.bfloat16)
71model = Gemma4ForConditionalGeneration(config)
72torch.set_default_dtype(torch.float32)
73if file_exists(
74 filename="generation_config.json", repo_id=source_model_id, repo_type="model"
75):
76 model.generation_config = GenerationConfig.from_pretrained(
77 source_model_id,
78 trust_remote_code=True,
79 )
80set_seed(42)
81model = model.cpu()
82all_numels = 0
83for name, p in sorted(model.named_parameters()):
84 all_numels += p.numel()
85with torch.no_grad():
86 for name, p in sorted(model.named_parameters()):
87 torch.nn.init.normal_(p, 0, 0.2)
88 print(name, p.shape, f"{p.numel() / all_numels * 100: .4f}%")
89model.save_pretrained(save_folder)1Gemma4ForConditionalGeneration(
2 (model): Gemma4Model(
3 (language_model): Gemma4TextModel(
4 (embed_tokens): Gemma4TextScaledWordEmbedding(262144, 8, padding_idx=0)
5 (layers): ModuleList(
6 (0): Gemma4TextDecoderLayer(
7 (self_attn): Gemma4TextAttention(
8 (q_norm): Gemma4RMSNorm()
9 (k_norm): Gemma4RMSNorm()
10 (v_norm): Gemma4RMSNorm()
11 (k_proj): Linear(in_features=8, out_features=128, bias=False)
12 (q_proj): Linear(in_features=8, out_features=256, bias=False)
13 (v_proj): Linear(in_features=8, out_features=128, bias=False)
14 (o_proj): Linear(in_features=256, out_features=8, bias=False)
15 )
16 (mlp): Gemma4TextMLP(
17 (gate_proj): Linear(in_features=8, out_features=64, bias=False)
18 (up_proj): Linear(in_features=8, out_features=64, bias=False)
19 (down_proj): Linear(in_features=64, out_features=8, bias=False)
20 (act_fn): GELUTanh()
21 )
22 (input_layernorm): Gemma4RMSNorm()
23 (post_attention_layernorm): Gemma4RMSNorm()
24 (pre_feedforward_layernorm): Gemma4RMSNorm()
25 (post_feedforward_layernorm): Gemma4RMSNorm()
26 )
27 (1): Gemma4TextDecoderLayer(
28 (self_attn): Gemma4TextAttention(
29 (q_norm): Gemma4RMSNorm()
30 (k_norm): Gemma4RMSNorm()
31 (v_norm): Gemma4RMSNorm()
32 (k_proj): Linear(in_features=8, out_features=256, bias=False)
33 (q_proj): Linear(in_features=8, out_features=512, bias=False)
34 (o_proj): Linear(in_features=512, out_features=8, bias=False)
35 )
36 (mlp): Gemma4TextMLP(
37 (gate_proj): Linear(in_features=8, out_features=64, bias=False)
38 (up_proj): Linear(in_features=8, out_features=64, bias=False)
39 (down_proj): Linear(in_features=64, out_features=8, bias=False)
40 (act_fn): GELUTanh()
41 )
42 (input_layernorm): Gemma4RMSNorm()
43 (post_attention_layernorm): Gemma4RMSNorm()
44 (pre_feedforward_layernorm): Gemma4RMSNorm()
45 (post_feedforward_layernorm): Gemma4RMSNorm()
46 )
47 (2): Gemma4TextDecoderLayer(
48 (self_attn): Gemma4TextAttention(
49 (q_norm): Gemma4RMSNorm()
50 (k_norm): Gemma4RMSNorm()
51 (v_norm): Gemma4RMSNorm()
52 (k_proj): Linear(in_features=8, out_features=128, bias=False)
53 (q_proj): Linear(in_features=8, out_features=256, bias=False)
54 (v_proj): Linear(in_features=8, out_features=128, bias=False)
55 (o_proj): Linear(in_features=256, out_features=8, bias=False)
56 )
57 (mlp): Gemma4TextMLP(
58 (gate_proj): Linear(in_features=8, out_features=64, bias=False)
59 (up_proj): Linear(in_features=8, out_features=64, bias=False)
60 (down_proj): Linear(in_features=64, out_features=8, bias=False)
61 (act_fn): GELUTanh()
62 )
63 (input_layernorm): Gemma4RMSNorm()
64 (post_attention_layernorm): Gemma4RMSNorm()
65 (pre_feedforward_layernorm): Gemma4RMSNorm()
66 (post_feedforward_layernorm): Gemma4RMSNorm()
67 )
68 (3): Gemma4TextDecoderLayer(
69 (self_attn): Gemma4TextAttention(
70 (q_norm): Gemma4RMSNorm()
71 (k_norm): Gemma4RMSNorm()
72 (v_norm): Gemma4RMSNorm()
73 (k_proj): Linear(in_features=8, out_features=256, bias=False)
74 (q_proj): Linear(in_features=8, out_features=512, bias=False)
75 (o_proj): Linear(in_features=512, out_features=8, bias=False)
76 )
77 (mlp): Gemma4TextMLP(
78 (gate_proj): Linear(in_features=8, out_features=64, bias=False)
79 (up_proj): Linear(in_features=8, out_features=64, bias=False)
80 (down_proj): Linear(in_features=64, out_features=8, bias=False)
81 (act_fn): GELUTanh()
82 )
83 (input_layernorm): Gemma4RMSNorm()
84 (post_attention_layernorm): Gemma4RMSNorm()
85 (pre_feedforward_layernorm): Gemma4RMSNorm()
86 (post_feedforward_layernorm): Gemma4RMSNorm()
87 )
88 )
89 (norm): Gemma4RMSNorm()
90 (rotary_emb): Gemma4TextRotaryEmbedding()
91 )
92 (vision_tower): Gemma4VisionModel(
93 (patch_embedder): Gemma4VisionPatchEmbedder(
94 (input_proj): Linear(in_features=768, out_features=8, bias=False)
95 )
96 (encoder): Gemma4VisionEncoder(
97 (rotary_emb): Gemma4VisionRotaryEmbedding()
98 (layers): ModuleList(
99 (0-1): 2 x Gemma4VisionEncoderLayer(
100 (self_attn): Gemma4VisionAttention(
101 (q_proj): Gemma4ClippableLinear(
102 (linear): Linear(in_features=8, out_features=128, bias=False)
103 )
104 (k_proj): Gemma4ClippableLinear(
105 (linear): Linear(in_features=8, out_features=128, bias=False)
106 )
107 (v_proj): Gemma4ClippableLinear(
108 (linear): Linear(in_features=8, out_features=128, bias=False)
109 )
110 (o_proj): Gemma4ClippableLinear(
111 (linear): Linear(in_features=128, out_features=8, bias=False)
112 )
113 (q_norm): Gemma4RMSNorm()
114 (k_norm): Gemma4RMSNorm()
115 (v_norm): Gemma4RMSNorm()
116 )
117 (mlp): Gemma4VisionMLP(
118 (gate_proj): Gemma4ClippableLinear(
119 (linear): Linear(in_features=8, out_features=64, bias=False)
120 )
121 (up_proj): Gemma4ClippableLinear(
122 (linear): Linear(in_features=8, out_features=64, bias=False)
123 )
124 (down_proj): Gemma4ClippableLinear(
125 (linear): Linear(in_features=64, out_features=8, bias=False)
126 )
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 )
134 )
135 )
136 (pooler): Gemma4VisionPooler()
137 )
138 (embed_vision): Gemma4MultimodalEmbedder(
139 (embedding_projection): Linear(in_features=8, out_features=8, bias=False)
140 (embedding_pre_projection_norm): Gemma4RMSNorm()
141 )
142 )
143 (lm_head): Linear(in_features=8, out_features=262144, bias=False)
144)