qqc1989 commited on
Commit
f1994e9
·
verified ·
1 Parent(s): 1930ba8

Upload 6 files

Browse files
.gitattributes CHANGED
@@ -110,3 +110,4 @@ qwen2.5-3b-gptq-int4-ctx-ax650/qwen2_p128_l7_together.axmodel filter=lfs diff=lf
110
  qwen2.5-3b-gptq-int4-ctx-ax650/qwen2_p128_l8_together.axmodel filter=lfs diff=lfs merge=lfs -text
111
  qwen2.5-3b-gptq-int4-ctx-ax650/qwen2_p128_l9_together.axmodel filter=lfs diff=lfs merge=lfs -text
112
  qwen2.5-3b-gptq-int4-ctx-ax650/qwen2_post.axmodel filter=lfs diff=lfs merge=lfs -text
 
 
110
  qwen2.5-3b-gptq-int4-ctx-ax650/qwen2_p128_l8_together.axmodel filter=lfs diff=lfs merge=lfs -text
111
  qwen2.5-3b-gptq-int4-ctx-ax650/qwen2_p128_l9_together.axmodel filter=lfs diff=lfs merge=lfs -text
112
  qwen2.5-3b-gptq-int4-ctx-ax650/qwen2_post.axmodel filter=lfs diff=lfs merge=lfs -text
113
+ main_ax650 filter=lfs diff=lfs merge=lfs -text
main_ax650 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:d647c00b7f4f2d39216575e228e7713ef3efb029827d2ab90da733c686867788
3
+ size 985272
main_axcl_x86 CHANGED
@@ -1,3 +1,3 @@
1
  version https://git-lfs.github.com/spec/v1
2
- oid sha256:6cba0be8df523e351789fcfa745772423096f52a3b0a760f8d8c9f5b8bb2ec82
3
- size 1022384
 
1
  version https://git-lfs.github.com/spec/v1
2
+ oid sha256:d427677213e3b50b22ed55a1d0af10223f5b0711c1bf050d0655aedd3ffc8df9
3
+ size 1839824
post_config.json CHANGED
@@ -1,5 +1,5 @@
1
  {
2
- "enable_temperature" : true,
3
  "temperature" : 0.9,
4
 
5
  "enable_repetition_penalty" : false,
@@ -10,5 +10,5 @@
10
  "top_p" : 0.8,
11
 
12
  "enable_top_k_sampling" : true,
13
- "top_k" : 10
14
  }
 
1
  {
2
+ "enable_temperature" : false,
3
  "temperature" : 0.9,
4
 
5
  "enable_repetition_penalty" : false,
 
10
  "top_p" : 0.8,
11
 
12
  "enable_top_k_sampling" : true,
13
+ "top_k" : 1
14
  }
qwen2.5_tokenizer_uid.py ADDED
@@ -0,0 +1,199 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from transformers import AutoTokenizer, PreTrainedTokenizerFast
2
+ from http.server import HTTPServer, BaseHTTPRequestHandler
3
+ import json
4
+ import argparse
5
+ import uuid
6
+
7
+ # 全局字典:存储 uid 到 Tokenizer_Http 实例的映射
8
+ tokenizers = {}
9
+
10
+ class Tokenizer_Http():
11
+ def __init__(self):
12
+ model_id = "qwen2.5_tokenizer"
13
+ self.tokenizer = AutoTokenizer.from_pretrained(model_id)
14
+ self.messages = [
15
+ {"role": "system", "content": "You are Qwen, created by Alibaba Cloud. You are a helpful assistant."},
16
+ ]
17
+ self.token_ids = []
18
+
19
+ self.token_ids_cache = []
20
+
21
+ def encode(self, prompt, last_reply=None):
22
+ if last_reply is not None:
23
+ self.messages.append({"role": "assistant", "content": last_reply})
24
+ text = self.tokenizer.apply_chat_template(
25
+ self.messages,
26
+ tokenize=False,
27
+ add_generation_prompt=True
28
+ )
29
+ # print("生成的文本:\n============\n", text, "============\n")
30
+ self.token_ids = self.tokenizer.encode(text)[:-3]
31
+ self.messages.append({"role": "user", "content": prompt})
32
+
33
+ text = self.tokenizer.apply_chat_template(
34
+ self.messages,
35
+ tokenize=False,
36
+ add_generation_prompt=True
37
+ )
38
+ print("生成的文本:\n============\n", text, "============\n")
39
+ token_ids = self.tokenizer.encode(text)
40
+ # 找出新增部分
41
+ diff = token_ids[len(self.token_ids):]
42
+ self.token_ids = token_ids
43
+ print(self.decode(diff))
44
+ return token_ids, diff
45
+
46
+ def decode(self, token_ids):
47
+ self.token_ids_cache += token_ids
48
+ text = self.tokenizer.decode(self.token_ids_cache)
49
+ if "\ufffd" in text:
50
+ print("text 中包含非法字符")
51
+ return ""
52
+ else:
53
+ self.token_ids_cache.clear()
54
+ return text
55
+
56
+
57
+ @property
58
+ def bos_id(self):
59
+ return self.tokenizer.bos_token_id
60
+
61
+ @property
62
+ def eos_id(self):
63
+ return self.tokenizer.eos_token_id
64
+
65
+ @property
66
+ def bos_token(self):
67
+ return self.tokenizer.bos_token
68
+
69
+ @property
70
+ def eos_token(self):
71
+ return self.tokenizer.eos_token
72
+
73
+ def reset(self, system_prompt="You are Qwen, created by Alibaba Cloud. You are a helpful assistant."):
74
+ self.messages = [
75
+ {"role": "system", "content": system_prompt},
76
+ ]
77
+ text = self.tokenizer.apply_chat_template(
78
+ self.messages,
79
+ tokenize=False,
80
+ add_generation_prompt=True
81
+ )
82
+ token_ids = self.tokenizer.encode(text)[:-3]
83
+ self.token_ids = token_ids
84
+ print(self.decode(token_ids))
85
+ return token_ids
86
+
87
+
88
+ class Request(BaseHTTPRequestHandler):
89
+ timeout = 5
90
+ server_version = 'Apache'
91
+
92
+ def do_GET(self):
93
+ print("GET 请求路径:", self.path)
94
+ self.send_response(200)
95
+ self.send_header("Content-Type", "application/json")
96
+ self.end_headers()
97
+
98
+ # 新增接口:获取 uid
99
+ if '/get_uid' in self.path:
100
+ new_uid = str(uuid.uuid4())
101
+ print("新 uid:", new_uid)
102
+ # 为该 uid 创建一个新的 Tokenizer_Http 实例
103
+ tokenizers[new_uid] = Tokenizer_Http()
104
+ msg = json.dumps({'uid': new_uid})
105
+ elif '/bos_id' in self.path:
106
+ # 获取 uid 参数(例如 ?uid=xxx)
107
+ uid = self.get_query_param("uid")
108
+ instance: Tokenizer_Http = tokenizers.get(uid)
109
+ if instance is None:
110
+ msg = json.dumps({'error': 'Invalid uid'})
111
+ else:
112
+ bos_id = instance.bos_id
113
+ msg = json.dumps({'bos_id': bos_id if bos_id is not None else -1})
114
+ elif '/eos_id' in self.path:
115
+ uid = self.get_query_param("uid")
116
+ instance: Tokenizer_Http = tokenizers.get(uid)
117
+ if instance is None:
118
+ msg = json.dumps({'error': 'Invalid uid'})
119
+ else:
120
+ eos_id = instance.eos_id
121
+ msg = json.dumps({'eos_id': eos_id if eos_id is not None else -1})
122
+ else:
123
+ msg = json.dumps({'error': 'Invalid GET endpoint'})
124
+
125
+ print("响应消息:", msg)
126
+ self.wfile.write(msg.encode())
127
+
128
+ def do_POST(self):
129
+ content_length = int(self.headers.get('content-length', 0))
130
+ data = self.rfile.read(content_length).decode()
131
+ print("POST 请求路径:", self.path)
132
+ print("接收到的数据:", data)
133
+ req = json.loads(data)
134
+
135
+ self.send_response(200)
136
+ self.send_header("Content-Type", "application/json")
137
+ self.end_headers()
138
+
139
+ if '/encode' in self.path:
140
+ # 请求数据中必须包含 uid, text, 和可选的 last_reply
141
+ uid = req.get('uid')
142
+ prompt = req.get('text')
143
+ last_reply = req.get('last_reply')
144
+ instance: Tokenizer_Http = tokenizers.get(uid)
145
+ if instance is None:
146
+ msg = json.dumps({'error': 'Invalid uid'})
147
+ else:
148
+ token_ids, diff = instance.encode(prompt, last_reply)
149
+ msg = json.dumps({'token_ids': token_ids, 'diff': diff})
150
+ elif '/decode' in self.path:
151
+ uid = req.get('uid')
152
+ token_ids = req.get('token_ids')
153
+ instance: Tokenizer_Http = tokenizers.get(uid)
154
+ if instance is None:
155
+ msg = json.dumps({'error': 'Invalid uid'})
156
+ else:
157
+ text = instance.decode(token_ids)
158
+ msg = json.dumps({'text': text})
159
+ elif '/reset' in self.path:
160
+ uid = req.get("uid")
161
+ system_prompt = req.get("system_prompt")
162
+ instance: Tokenizer_Http = tokenizers.get(uid)
163
+ if instance is None:
164
+ msg = json.dumps({'error': 'Invalid uid'})
165
+ else:
166
+ if system_prompt is not None:
167
+ print("system_prompt:", system_prompt)
168
+ token_ids = instance.reset(system_prompt)
169
+ msg = json.dumps({'token_ids': token_ids})
170
+ else:
171
+ token_ids = instance.reset()
172
+ msg = json.dumps({'token_ids': token_ids})
173
+ else:
174
+ msg = json.dumps({'error': 'Invalid POST endpoint'})
175
+
176
+ print("响应消息:", msg)
177
+ self.wfile.write(msg.encode())
178
+
179
+ def get_query_param(self, key):
180
+ """
181
+ 辅助函数:从 GET 请求的 URL 中获取查询参数的值
182
+ 例如:/bos_id?uid=xxx
183
+ """
184
+ from urllib.parse import urlparse, parse_qs
185
+ query = urlparse(self.path).query
186
+ params = parse_qs(query)
187
+ values = params.get(key)
188
+ return values[0] if values else None
189
+
190
+ if __name__ == "__main__":
191
+ parser = argparse.ArgumentParser()
192
+ parser.add_argument('--host', type=str, default='0.0.0.0')
193
+ parser.add_argument('--port', type=int, default=12345)
194
+ args = parser.parse_args()
195
+
196
+ host = (args.host, args.port)
197
+ print('Server running at http://%s:%s' % host)
198
+ server = HTTPServer(host, Request)
199
+ server.serve_forever()
run_qwen2.5_3b_gptq_int4_ctx_ax650.sh ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ./main_ax650 \
2
+ --system_prompt "You are Qwen, created by Alibaba Cloud. You are a helpful assistant." \
3
+ --template_filename_axmodel "qwen2.5-3b-gptq-int4-ctx-ax650/qwen2_p128_l%d_together.axmodel" \
4
+ --axmodel_num 36 \
5
+ --tokenizer_type 2 \
6
+ --url_tokenizer_model "http://127.0.0.1:12345" \
7
+ --filename_post_axmodel "qwen2.5-3b-gptq-int4-ctx-ax650/qwen2_post.axmodel" \
8
+ --filename_tokens_embed "qwen2.5-3b-gptq-int4-ctx-ax650/model.embed_tokens.weight.bfloat16.bin" \
9
+ --tokens_embed_num 151936 \
10
+ --tokens_embed_size 2048 \
11
+ --use_mmap_load_embed 1 \
12
+ --live_print 1
13
+
14
+ # --kvcache_path /home/axera/ax-llm/build/kvcache_yuanqi \
run_qwen2.5_3b_gptq_int4_ctx_axcl_x86.sh ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ./main_axcl_x86 \
2
+ --system_prompt "You are Qwen, created by Alibaba Cloud. You are a helpful assistant." \
3
+ --template_filename_axmodel "qwen2.5-3b-gptq-int4-ctx-ax650/qwen2_p128_l%d_together.axmodel" \
4
+ --axmodel_num 36 \
5
+ --tokenizer_type 2 \
6
+ --url_tokenizer_model "http://127.0.0.1:12345" \
7
+ --filename_post_axmodel "qwen2.5-3b-gptq-int4-ctx-ax650/qwen2_post.axmodel" \
8
+ --filename_tokens_embed "qwen2.5-3b-gptq-int4-ctx-ax650/model.embed_tokens.weight.bfloat16.bin" \
9
+ --tokens_embed_num 151936 \
10
+ --tokens_embed_size 2048 \
11
+ --use_mmap_load_embed 0 \
12
+ --live_print 1 \
13
+ --devices 0
14
+
15
+ # --kvcache_path /home/axera/ax-llm/build/kvcache_yuanqi \