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://huggingface.co/datasets/huggingface/documentation-images/resolve/main/p-blog/candy.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-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 (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 )
73 (1): Gemma4TextDecoderLayer(
74 (self_attn): Gemma4TextAttention(
75 (q_proj): Linear(in_features=8, out_features=512, bias=False)
76 (q_norm): Gemma4RMSNorm()
77 (k_norm): Gemma4RMSNorm()
78 (v_norm): Gemma4RMSNorm()
79 (k_proj): Linear(in_features=8, out_features=256, bias=False)
80 (o_proj): Linear(in_features=512, out_features=8, bias=False)
81 )
82 (mlp): Gemma4TextMLP(
83 (gate_proj): Linear(in_features=8, out_features=64, bias=False)
84 (up_proj): Linear(in_features=8, out_features=64, bias=False)
85 (down_proj): Linear(in_features=64, out_features=8, bias=False)
86 (act_fn): GELUTanh()
87 )
88 (input_layernorm): Gemma4RMSNorm()
89 (post_attention_layernorm): Gemma4RMSNorm()
90 (pre_feedforward_layernorm): Gemma4RMSNorm()
91 (post_feedforward_layernorm): Gemma4RMSNorm()
92 )
93 (2): Gemma4TextDecoderLayer(
94 (self_attn): Gemma4TextAttention(
95 (q_proj): Linear(in_features=8, out_features=256, bias=False)
96 (q_norm): Gemma4RMSNorm()
97 (k_norm): Gemma4RMSNorm()
98 (v_norm): Gemma4RMSNorm()
99 (k_proj): Linear(in_features=8, out_features=128, bias=False)
100 (v_proj): Linear(in_features=8, out_features=128, bias=False)
101 (o_proj): Linear(in_features=256, out_features=8, bias=False)
102 )
103 (mlp): Gemma4TextMLP(
104 (gate_proj): Linear(in_features=8, out_features=64, bias=False)
105 (up_proj): Linear(in_features=8, out_features=64, bias=False)
106 (down_proj): Linear(in_features=64, out_features=8, bias=False)
107 (act_fn): GELUTanh()
108 )
109 (input_layernorm): Gemma4RMSNorm()
110 (post_attention_layernorm): Gemma4RMSNorm()
111 (pre_feedforward_layernorm): Gemma4RMSNorm()
112 (post_feedforward_layernorm): Gemma4RMSNorm()
113 )
114 (3): Gemma4TextDecoderLayer(
115 (self_attn): Gemma4TextAttention(
116 (q_proj): Linear(in_features=8, out_features=512, bias=False)
117 (q_norm): Gemma4RMSNorm()
118 (k_norm): Gemma4RMSNorm()
119 (v_norm): Gemma4RMSNorm()
120 (k_proj): Linear(in_features=8, out_features=256, bias=False)
121 (o_proj): Linear(in_features=512, 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 )
134 )
135 (norm): Gemma4RMSNorm()
136 (rotary_emb): Gemma4TextRotaryEmbedding()
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)