qqc1989 commited on
Commit
73f29f0
·
verified ·
1 Parent(s): b4facc6

Upload 9 files

Browse files
.gitattributes CHANGED
@@ -38,3 +38,7 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
38
  *.png filter=lfs diff=lfs merge=lfs -text
39
  *.mp4 filter=lfs diff=lfs merge=lfs -text
40
  examples/red-panda.mp4 filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
38
  *.png filter=lfs diff=lfs merge=lfs -text
39
  *.mp4 filter=lfs diff=lfs merge=lfs -text
40
  examples/red-panda.mp4 filter=lfs diff=lfs merge=lfs -text
41
+ main_api_ax650 filter=lfs diff=lfs merge=lfs -text
42
+ main_api_axcl_x86 filter=lfs diff=lfs merge=lfs -text
43
+ main_ax650 filter=lfs diff=lfs merge=lfs -text
44
+ main_axcl_x86 filter=lfs diff=lfs merge=lfs -text
internvl3_tokenizer.py ADDED
@@ -0,0 +1,186 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from transformers import AutoTokenizer
2
+ from http.server import HTTPServer, BaseHTTPRequestHandler
3
+ import json
4
+ import argparse
5
+
6
+
7
+ class Tokenizer_Http():
8
+
9
+ def __init__(self):
10
+
11
+ path = 'internvl3_2b_tokenizer'
12
+ self.tokenizer = AutoTokenizer.from_pretrained(path,
13
+ trust_remote_code=True,
14
+ use_fast=False)
15
+
16
+ def encode(self, content):
17
+ prompt = f"<|im_start|>system\n你是由上海人工智能实验室联合商汤科技开发的书生多模态大模型,英文名叫InternVL, 是一个有用无害的人工智能助手。<|im_end|><|im_start|>user\n{content}<|im_end|><|im_start|>assistant\n"
18
+ input_ids = self.tokenizer.encode(prompt)
19
+ return input_ids
20
+
21
+ def encode_with_image(self, question, num_of_images, imgsz) -> list:
22
+ prompt = "<|im_start|>system\n你是书生·万象, 英文名是InternVL, 是由上海人工智能实验室、清华大学及多家合作单位联合开发的多模态大语言模型.<|im_end|>\n"
23
+
24
+ prompt += "<|im_start|>user\n" + question
25
+
26
+ context_len = 64
27
+ if imgsz == 448:
28
+ context_len = 256
29
+ elif imgsz == 224:
30
+ context_len = 64
31
+ else:
32
+ print(f"imgsz is {imgsz}")
33
+ return
34
+ print("context_len is ", context_len)
35
+
36
+ if num_of_images > 0:
37
+ for idx in range(num_of_images):
38
+ prompt += "\n<img>" + "<IMG_CONTEXT>" * context_len + "</img>\n"
39
+
40
+ prompt += "<|im_end|>\n<|im_start|>assistant"
41
+ print(f"prompt is {prompt}")
42
+ token_ids = self.tokenizer.encode(prompt)
43
+ return token_ids
44
+
45
+
46
+ def decode(self, token_ids):
47
+ return self.tokenizer.decode(token_ids,
48
+ clean_up_tokenization_spaces=False, skip_special_tokens=True)
49
+
50
+ @property
51
+ def bos_id(self):
52
+ return self.tokenizer.bos_token_id
53
+
54
+ @property
55
+ def eos_id(self):
56
+ return self.tokenizer.eos_token_id
57
+
58
+ @property
59
+ def bos_token(self):
60
+ return self.tokenizer.bos_token
61
+
62
+ @property
63
+ def eos_token(self):
64
+ return self.tokenizer.eos_token
65
+
66
+ @property
67
+ def img_start_token(self):
68
+ return self.tokenizer.encode("<img>")[0]
69
+
70
+ @property
71
+ def img_context_token(self):
72
+ return self.tokenizer.encode("<IMG_CONTEXT>")[0]
73
+
74
+ tokenizer = Tokenizer_Http()
75
+
76
+ print(tokenizer.bos_id, tokenizer.bos_token, tokenizer.eos_id,
77
+ tokenizer.eos_token, tokenizer.img_start_token, tokenizer.img_context_token)
78
+ token_ids = tokenizer.encode_with_image("你好", 1, 448)
79
+ print(token_ids)
80
+ print(len(token_ids))
81
+ token_ids = tokenizer.encode("hello world")
82
+ print(token_ids)
83
+ print(len(token_ids))
84
+
85
+
86
+ class Request(BaseHTTPRequestHandler):
87
+ #通过类继承,新定义类
88
+ timeout = 5
89
+ server_version = 'Apache'
90
+
91
+ def do_GET(self):
92
+ print(self.path)
93
+ #在新类中定义get的内容(当客户端向该服务端使用get请求时,本服务端将如下运行)
94
+ self.send_response(200)
95
+ self.send_header("type", "get") #设置响应头,可省略或设置多个
96
+ self.end_headers()
97
+
98
+ if self.path == '/bos_id':
99
+ bos_id = tokenizer.bos_id
100
+ # print(bos_id)
101
+ # to json
102
+ if bos_id is None:
103
+ msg = json.dumps({'bos_id': -1})
104
+ else:
105
+ msg = json.dumps({'bos_id': bos_id})
106
+ elif self.path == '/eos_id':
107
+ eos_id = tokenizer.eos_id
108
+ if eos_id is None:
109
+ msg = json.dumps({'eos_id': -1})
110
+ else:
111
+ msg = json.dumps({'eos_id': eos_id})
112
+ elif self.path == '/img_start_token':
113
+ img_start_token = tokenizer.img_start_token
114
+ if img_start_token is None:
115
+ msg = json.dumps({'img_start_token': -1})
116
+ else:
117
+ msg = json.dumps({'img_start_token': img_start_token})
118
+ elif self.path == '/img_context_token':
119
+ img_context_token = tokenizer.img_context_token
120
+ if img_context_token is None:
121
+ msg = json.dumps({'img_context_token': -1})
122
+ else:
123
+ msg = json.dumps({'img_context_token': img_context_token})
124
+ else:
125
+ msg = 'error'
126
+
127
+ print(msg)
128
+ msg = str(msg).encode() #转为str再转为byte格式
129
+
130
+ self.wfile.write(msg) #将byte格式的信息返回给客户端
131
+
132
+ def do_POST(self):
133
+ #在新类中定义post的内容(当客户端向该服务端使用post请求时,本服务端将如下运行)
134
+ data = self.rfile.read(int(
135
+ self.headers['content-length'])) #获取从客户端传入的参数(byte格式)
136
+ data = data.decode() #将byte格式转为str格式
137
+
138
+ self.send_response(200)
139
+ self.send_header("type", "post") #设置响应头,��省略或设置多个
140
+ self.end_headers()
141
+
142
+ if self.path == '/encode':
143
+ req = json.loads(data)
144
+ print(req)
145
+ prompt = req['text']
146
+ b_img_prompt = False
147
+ if 'img_prompt' in req:
148
+ b_img_prompt = req['img_prompt']
149
+ if b_img_prompt:
150
+ num_img = req['num_img']
151
+ imgsz = req['imgsz']
152
+ token_ids = tokenizer.encode_with_image(prompt, num_img, imgsz)
153
+ else:
154
+ token_ids = tokenizer.encode(prompt)
155
+ if token_ids is None:
156
+ msg = json.dumps({'token_ids': -1})
157
+ else:
158
+ msg = json.dumps({'token_ids': token_ids})
159
+
160
+ elif self.path == '/decode':
161
+ req = json.loads(data)
162
+ token_ids = req['token_ids']
163
+ text = tokenizer.decode(token_ids)
164
+ if text is None:
165
+ msg = json.dumps({'text': ""})
166
+ else:
167
+ msg = json.dumps({'text': text})
168
+ else:
169
+ msg = 'error'
170
+ print(msg)
171
+ msg = str(msg).encode() #转为str再转为byte格式
172
+
173
+ self.wfile.write(msg) #将byte格式的信息返回给客户端
174
+
175
+
176
+ if __name__ == "__main__":
177
+
178
+ args = argparse.ArgumentParser()
179
+ args.add_argument('--host', type=str, default='0.0.0.0')
180
+ args.add_argument('--port', type=int, default=12345)
181
+ args = args.parse_args()
182
+
183
+ host = (args.host, args.port) #设定地址与端口号,'localhost'等价于'127.0.0.1'
184
+ print('http://%s:%s' % host)
185
+ server = HTTPServer(host, Request) #根据地址端口号和新定义的类,创建服务器实例
186
+ server.serve_forever() #开启服务
main_api_ax650 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:9fc74b9dcf37c2b75d1894fa0f0ecaffe741b11f13a58dda0d30ff1b4ca8d508
3
+ size 6667616
main_api_axcl_x86 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:849231c5e30faa54cf62a55022a45b42ed767a7feb52ea26483e5c70eb9073dd
3
+ size 1927840
main_ax650 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:2b0bc06d4c78f592ae546a9f91f260dd62da7bf6b41a8f8a24a7a648d58c7f72
3
+ size 6568824
main_axcl_x86 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:273bac369315774e6e6df5e725647c49e5356f22cc512f1daadfd58066a37ef0
3
+ size 1840560
run_internvl_3_2b_448_api_ax650.sh ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ ./main_api_ax650 \
2
+ --template_filename_axmodel "./internvl3_2b_axmodel/qwen2_p128_l%d_together.axmodel" \
3
+ --axmodel_num 28 \
4
+ --filename_image_encoder_axmodedl "./vit_axmodel/internvl3_2b_vit_slim.axmodel" \
5
+ --use_mmap_load_embed 1 \
6
+ --filename_tokenizer_model "http://0.0.0.0:12345" \
7
+ --filename_post_axmodel "./internvl3_2b_axmodel/qwen2_post.axmodel" \
8
+ --filename_tokens_embed "./internvl3_2b_axmodel/model.embed_tokens.weight.bf16.bin" \
9
+ --tokens_embed_num 151674 \
10
+ --tokens_embed_size 1536
run_internvl_3_2b_448_api_axcl_x86.sh ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ./main_api_axcl_x86 \
2
+ --template_filename_axmodel "./internvl3_2b_axmodel/qwen2_p128_l%d_together.axmodel" \
3
+ --axmodel_num 28 \
4
+ --filename_image_encoder_axmodedl "./vit_axmodel/internvl3_2b_vit_slim.axmodel" \
5
+ --use_mmap_load_embed 1 \
6
+ --filename_tokenizer_model "http://0.0.0.0:12345" \
7
+ --filename_post_axmodel "./internvl3_2b_axmodel/qwen2_post.axmodel" \
8
+ --filename_tokens_embed "./internvl3_2b_axmodel/model.embed_tokens.weight.bf16.bin" \
9
+ --tokens_embed_num 151674 \
10
+ --tokens_embed_size 1536 \
11
+ --devices 0,2,4 \
run_internvl_3_2b_448_ax650.sh ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ./main_ax650 \
2
+ --template_filename_axmodel "./internvl3_2b_axmodel/qwen2_p128_l%d_together.axmodel" \
3
+ --axmodel_num 28 \
4
+ --filename_image_encoder_axmodedl "./vit_axmodel/internvl3_2b_vit_slim.axmodel" \
5
+ --use_mmap_load_embed 1 \
6
+ --filename_tokenizer_model "http://0.0.0.0:12345" \
7
+ --filename_post_axmodel "./internvl3_2b_axmodel/qwen2_post.axmodel" \
8
+ --filename_tokens_embed "./internvl3_2b_axmodel/model.embed_tokens.weight.bf16.bin" \
9
+ --tokens_embed_num 151674 \
10
+ --tokens_embed_size 1536 \
11
+ --live_print 1
run_internvl_3_2b_448_axcl_x86.sh ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ./main_axcl_x86 \
2
+ --template_filename_axmodel "./internvl3_2b_axmodel/qwen2_p128_l%d_together.axmodel" \
3
+ --axmodel_num 28 \
4
+ --filename_image_encoder_axmodedl "./vit_axmodel/internvl3_2b_vit_slim.axmodel" \
5
+ --use_mmap_load_embed 1 \
6
+ --filename_tokenizer_model "http://0.0.0.0:12345" \
7
+ --filename_post_axmodel "./internvl3_2b_axmodel/qwen2_post.axmodel" \
8
+ --filename_tokens_embed "./internvl3_2b_axmodel/model.embed_tokens.weight.bf16.bin" \
9
+ --tokens_embed_num 151674 \
10
+ --tokens_embed_size 1536 \
11
+ --devices 0,2,4 \
12
+ --live_print 1