Views
No views yet
| File path | Size |
|---|---|
| model.safetensors | 3.8MB |
1import torch
2from transformers import AutoModelForImageTextToText, AutoProcessor
3
4model_id = "tiny-random/glm-ocr"
5model = AutoModelForImageTextToText.from_pretrained(
6 model_id, dtype=torch.bfloat16, device_map="cuda",
7)
8processor = AutoProcessor.from_pretrained(model_id)
9messages = [
10 {
11 "role": "user",
12 "content": [
13 {
14 "type": "image",
15 "image": "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen-VL/assets/demo.jpeg",
16 },
17 {"type": "text", "text": "Describe this image."},
18 ],
19 }
20]
21
22# Preparation for inference
23inputs = processor.apply_chat_template(
24 messages,
25 tokenize=True,
26 add_generation_prompt=True,
27 return_dict=True,
28 return_tensors="pt"
29).to(model.device)
30inputs.pop("token_type_ids", None)
31generated_ids = model.generate(**inputs, max_new_tokens=16)
32output_text = processor.decode(generated_ids[0], skip_special_tokens=False)
33print(output_text)1import json
2from copy import deepcopy
3from pathlib import Path
4
5import accelerate
6import torch
7import torch.nn as nn
8from huggingface_hub import file_exists, hf_hub_download
9from transformers import (
10 AutoConfig,
11 AutoModelForCausalLM,
12 AutoProcessor,
13 GenerationConfig,
14 GlmOcrForConditionalGeneration,
15 set_seed,
16)
17
18source_model_id = "zai-org/GLM-OCR"
19save_folder = "/tmp/tiny-random/glm-ocr"
20
21processor = AutoProcessor.from_pretrained(
22 source_model_id, trust_remote_code=True)
23processor.save_pretrained(save_folder)
24
25with open(hf_hub_download(source_model_id, filename='config.json', repo_type='model'), 'r', encoding='utf-8') as f:
26 config_json: dict = json.load(f)
27
28config_json['text_config'].update({
29 "head_dim": 32,
30 "hidden_size": 8,
31 "intermediate_size": 64,
32 "num_attention_heads": 8,
33 "num_hidden_layers": 2,
34 "num_key_value_heads": 4,
35 "rope_parameters": {
36 "rope_type": "default",
37 "mrope_section": [4, 4, 8],
38 "partial_rotary_factor": 1.0,
39 "rope_theta": 10000,
40 },
41})
42config_json['vision_config'].update({
43 "hidden_size": 32,
44 "depth": 2,
45 "num_heads": 1,
46 "intermediate_size": 64,
47 "out_hidden_size": 8,
48})
49with open(f"{save_folder}/config.json", "w", encoding='utf-8') as f:
50 json.dump(config_json, f, indent=2)
51
52config = AutoConfig.from_pretrained(
53 save_folder,
54 trust_remote_code=True,
55)
56print(config)
57torch.set_default_dtype(torch.bfloat16)
58model = GlmOcrForConditionalGeneration(config)
59torch.set_default_dtype(torch.float32)
60
61if file_exists(filename="generation_config.json", repo_id=source_model_id, repo_type='model'):
62 model.generation_config = GenerationConfig.from_pretrained(
63 source_model_id, trust_remote_code=True,
64 )
65 model.generation_config.do_sample = True
66 print(model.generation_config)
67
68model = model.cpu()
69set_seed(42)
70n_params = sum(p.numel() for p in model.parameters())
71with torch.no_grad():
72 for name, p in sorted(model.named_parameters()):
73 torch.nn.init.normal_(p, 0, 0.1)
74 print(name, p.shape, p.numel() / n_params * 100, '%')
75# MTP
76set_seed(42)
77config = config.get_text_config()
78model.model.language_model.layers.append(nn.ModuleDict(dict(
79 shared_head=nn.ModuleDict(dict(
80 norm=nn.RMSNorm(config.hidden_size),
81 head=deepcopy(model.model.language_model.embed_tokens),
82 )),
83 embed_tokens=deepcopy(model.model.language_model.embed_tokens),
84 eh_proj=nn.Linear(config.hidden_size * 2,
85 config.hidden_size, bias=False),
86 enorm=nn.RMSNorm(config.hidden_size),
87 hnorm=nn.RMSNorm(config.hidden_size),
88 input_layernorm=nn.RMSNorm(config.hidden_size),
89 post_mlp_layernorm=nn.RMSNorm(config.hidden_size),
90 post_attention_layernorm=nn.RMSNorm(config.hidden_size),
91 post_self_attn_layernorm=nn.RMSNorm(config.hidden_size),
92 self_attn=deepcopy(model.model.language_model.layers[1].self_attn),
93 mlp=deepcopy(model.model.language_model.layers[1].mlp),
94)))
95# for i in range(1, len(model.model.language_model.layers)):
96# model.model.language_model.layers[i].mlp.gate.e_score_correction_bias = torch.rand_like(
97# model.model.language_model.layers[i].mlp.gate.e_score_correction_bias).float()
98model.save_pretrained(save_folder)
99print(model)1GlmOcrForConditionalGeneration(
2 (model): GlmOcrModel(
3 (visual): GlmOcrVisionModel(
4 (patch_embed): GlmOcrVisionPatchEmbed(
5 (proj): Conv3d(3, 32, kernel_size=(2, 14, 14), stride=(2, 14, 14))
6 )
7 (rotary_pos_emb): GlmOcrVisionRotaryEmbedding()
8 (blocks): ModuleList(
9 (0-1): 2 x GlmOcrVisionBlock(
10 (norm1): GlmOcrRMSNorm((32,), eps=1e-05)
11 (norm2): GlmOcrRMSNorm((32,), eps=1e-05)
12 (attn): GlmOcrVisionAttention(
13 (qkv): Linear(in_features=32, out_features=96, bias=True)
14 (proj): Linear(in_features=32, out_features=32, bias=True)
15 (q_norm): GlmOcrRMSNorm((32,), eps=1e-05)
16 (k_norm): GlmOcrRMSNorm((32,), eps=1e-05)
17 )
18 (mlp): GlmOcrVisionMlp(
19 (gate_proj): Linear(in_features=32, out_features=64, bias=True)
20 (up_proj): Linear(in_features=32, out_features=64, bias=True)
21 (down_proj): Linear(in_features=64, out_features=32, bias=True)
22 (act_fn): SiLUActivation()
23 )
24 )
25 )
26 (merger): GlmOcrVisionPatchMerger(
27 (proj): Linear(in_features=8, out_features=8, bias=False)
28 (post_projection_norm): LayerNorm((8,), eps=1e-05, elementwise_affine=True)
29 (gate_proj): Linear(in_features=8, out_features=24, bias=False)
30 (up_proj): Linear(in_features=8, out_features=24, bias=False)
31 (down_proj): Linear(in_features=24, out_features=8, bias=False)
32 (act1): GELU(approximate='none')
33 (act_fn): SiLUActivation()
34 )
35 (downsample): Conv2d(32, 8, kernel_size=(2, 2), stride=(2, 2))
36 (post_layernorm): GlmOcrRMSNorm((32,), eps=1e-05)
37 )
38 (language_model): GlmOcrTextModel(
39 (embed_tokens): Embedding(59392, 8, padding_idx=59246)
40 (layers): ModuleList(
41 (0-1): 2 x GlmOcrTextDecoderLayer(
42 (self_attn): GlmOcrTextAttention(
43 (q_proj): Linear(in_features=8, out_features=256, bias=False)
44 (k_proj): Linear(in_features=8, out_features=128, bias=False)
45 (v_proj): Linear(in_features=8, out_features=128, bias=False)
46 (o_proj): Linear(in_features=256, out_features=8, bias=False)
47 )
48 (mlp): GlmOcrTextMLP(
49 (gate_up_proj): Linear(in_features=8, out_features=128, bias=False)
50 (down_proj): Linear(in_features=64, out_features=8, bias=False)
51 (activation_fn): SiLUActivation()
52 )
53 (input_layernorm): GlmOcrRMSNorm((8,), eps=1e-05)
54 (post_attention_layernorm): GlmOcrRMSNorm((8,), eps=1e-05)
55 (post_self_attn_layernorm): GlmOcrRMSNorm((8,), eps=1e-05)
56 (post_mlp_layernorm): GlmOcrRMSNorm((8,), eps=1e-05)
57 )
58 (2): ModuleDict(
59 (shared_head): ModuleDict(
60 (norm): RMSNorm((8,), eps=None, elementwise_affine=True)
61 (head): Embedding(59392, 8, padding_idx=59246)
62 )
63 (embed_tokens): Embedding(59392, 8, padding_idx=59246)
64 (eh_proj): Linear(in_features=16, out_features=8, bias=False)
65 (enorm): RMSNorm((8,), eps=None, elementwise_affine=True)
66 (hnorm): RMSNorm((8,), eps=None, elementwise_affine=True)
67 (input_layernorm): RMSNorm((8,), eps=None, elementwise_affine=True)
68 (post_mlp_layernorm): RMSNorm((8,), eps=None, elementwise_affine=True)
69 (post_attention_layernorm): RMSNorm((8,), eps=None, elementwise_affine=True)
70 (post_self_attn_layernorm): RMSNorm((8,), eps=None, elementwise_affine=True)
71 (self_attn): GlmOcrTextAttention(
72 (q_proj): Linear(in_features=8, out_features=256, bias=False)
73 (k_proj): Linear(in_features=8, out_features=128, bias=False)
74 (v_proj): Linear(in_features=8, out_features=128, bias=False)
75 (o_proj): Linear(in_features=256, out_features=8, bias=False)
76 )
77 (mlp): GlmOcrTextMLP(
78 (gate_up_proj): Linear(in_features=8, out_features=128, bias=False)
79 (down_proj): Linear(in_features=64, out_features=8, bias=False)
80 (activation_fn): SiLUActivation()
81 )
82 )
83 )
84 (norm): GlmOcrRMSNorm((8,), eps=1e-05)
85 (rotary_emb): GlmOcrTextRotaryEmbedding()
86 )
87 )
88 (lm_head): Linear(in_features=8, out_features=59392, bias=False)
89)