Skip to content

Commit 8cf311f

Browse files
committed
[update] main_llm & main_vlm.
1 parent a9a4464 commit 8cf311f

File tree

5 files changed

+57
-33
lines changed

5 files changed

+57
-33
lines changed

projects/llm_framework/main_llm/openbuddy-llama3.2-1b-ax630c_tokenizer.py

Lines changed: 29 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ def bos_id(self):
3232
@property
3333
def eos_id(self):
3434
return self.tokenizer.eos_token_id
35-
35+
3636
@property
3737
def bos_token(self):
3838
return self.tokenizer.bos_token
@@ -44,71 +44,72 @@ def eos_token(self):
4444
class Request(BaseHTTPRequestHandler):
4545
#通过类继承,新定义类
4646
timeout = 5
47-
server_version = 'Apache'
47+
server_version = "Apache"
4848

4949
def do_GET(self):
5050
print(self.path)
51-
#在新类中定义get的内容(当客户端向该服务端使用get请求时,本服务端将如下运行)
51+
# 在新类中定义get的内容(当客户端向该服务端使用get请求时,本服务端将如下运行)
5252
self.send_response(200)
53-
self.send_header("type", "get") #设置响应头,可省略或设置多个
53+
self.send_header("type", "get") # 设置响应头,可省略或设置多个
5454
self.end_headers()
5555

56-
if self.path == '/bos_id':
56+
if self.path == "/bos_id":
5757
bos_id = tokenizer.bos_id
5858
# print(bos_id)
5959
# to json
6060
if bos_id is None:
61-
msg = json.dumps({'bos_id': -1})
61+
msg = json.dumps({"bos_id": -1})
6262
else:
63-
msg = json.dumps({'bos_id': bos_id})
64-
elif self.path == '/eos_id':
63+
msg = json.dumps({"bos_id": bos_id})
64+
elif self.path == "/eos_id":
6565
eos_id = tokenizer.eos_id
6666
if eos_id is None:
67-
msg = json.dumps({'eos_id': -1})
67+
msg = json.dumps({"eos_id": -1})
6868
else:
69-
msg = json.dumps({'eos_id': eos_id})
69+
msg = json.dumps({"eos_id": eos_id})
7070
else:
71-
msg = 'error'
71+
msg = "error"
7272

7373
print(msg)
74-
msg = str(msg).encode() #转为str再转为byte格式
74+
msg = str(msg).encode() # 转为str再转为byte格式
7575

76-
self.wfile.write(msg) #将byte格式的信息返回给客户端
76+
self.wfile.write(msg) # 将byte格式的信息返回给客户端
7777

7878
def do_POST(self):
79-
#在新类中定义post的内容(当客户端向该服务端使用post请求时,本服务端将如下运行)
80-
data = self.rfile.read(int(
81-
self.headers['content-length'])) #获取从客户端传入的参数(byte格式)
82-
data = data.decode() #将byte格式转为str格式
79+
# 在新类中定义post的内容(当客户端向该服务端使用post请求时,本服务端将如下运行)
80+
data = self.rfile.read(
81+
int(self.headers["content-length"])
82+
) # 获取从客户端传入的参数(byte格式)
83+
data = data.decode() # 将byte格式转为str格式
8384

8485
self.send_response(200)
85-
self.send_header("type", "post") #设置响应头,可省略或设置多个
86+
self.send_header("type", "post") # 设置响应头,可省略或设置多个
8687
self.end_headers()
8788

88-
if self.path == '/encode':
89+
if self.path == "/encode":
8990
req = json.loads(data)
9091
prompt = req['text']
9192

9293
token_ids = tokenizer.encode(prompt, args.content)
9394
if token_ids is None:
94-
msg = json.dumps({'token_ids': -1})
95+
msg = json.dumps({"token_ids": -1})
9596
else:
96-
msg = json.dumps({'token_ids': token_ids})
97+
msg = json.dumps({"token_ids": token_ids})
9798

98-
elif self.path == '/decode':
99+
elif self.path == "/decode":
99100
req = json.loads(data)
100-
token_ids = req['token_ids']
101+
token_ids = req["token_ids"]
101102
text = tokenizer.decode(token_ids)
102103
if text is None:
103-
msg = json.dumps({'text': ""})
104+
msg = json.dumps({"text": ""})
104105
else:
105-
msg = json.dumps({'text': text})
106+
msg = json.dumps({"text": text})
106107
else:
107-
msg = 'error'
108+
msg = "error"
108109
print(msg)
109-
msg = str(msg).encode() #转为str再转为byte格式
110+
msg = str(msg).encode() # 转为str再转为byte格式
110111

111-
self.wfile.write(msg) #将byte格式的信息返回给客户端
112+
self.wfile.write(msg) # 将byte格式的信息返回给客户端
112113

113114

114115
if __name__ == "__main__":

projects/llm_framework/main_llm/src/main.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -133,14 +133,13 @@ class llm_task {
133133
exit(1);
134134
}
135135
tokenizer_server_flage_ = true;
136-
// std::this_thread::sleep_for(std::chrono::seconds(10));
137136
SLOGI("port_=%s model_id=%s content=%s", std::to_string(port_).c_str(), (base_model + "tokenizer").c_str(), ("'" + prompt_ + "'").c_str());
138-
return -1;
137+
std::this_thread::sleep_for(std::chrono::seconds(10));
139138
}
140139
} else {
141140
mode_config_.filename_tokenizer_model = base_model + mode_config_.filename_tokenizer_model;
142141
}
143-
142+
SLOGI("filename_tokenizer_model: %s", mode_config_.filename_tokenizer_model.c_str());
144143
mode_config_.filename_tokens_embed = base_model + mode_config_.filename_tokens_embed;
145144
mode_config_.filename_post_axmodel = base_model + mode_config_.filename_post_axmodel;
146145
mode_config_.template_filename_axmodel = base_model + mode_config_.template_filename_axmodel;

projects/llm_framework/main_vlm/SConstruct

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ static_file += [AFile('../static_lib/libopencv-4.6-aarch64-none/lib/libzlib.a')]
5050
STATIC_LIB += static_file * 4
5151

5252
STATIC_FILES += [AFile('internvl2-1b-ax630c.json'),
53-
AFile('internvl2_tokenizer.py')
53+
AFile('internvl2-1b-ax630c_tokenizer.py')
5454
]
5555

5656
env['COMPONENTS'].append({'target':'llm_vlm',

projects/llm_framework/main_vlm/internvl2_tokenizer.py renamed to projects/llm_framework/main_vlm/internvl2-1b-ax630c_tokenizer.py

File renamed without changes.

projects/llm_framework/main_vlm/src/main.cpp

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ class llm_task {
5050
task_callback_t out_callback_;
5151
bool enoutput_;
5252
bool enstream_;
53+
std::atomic_bool tokenizer_server_flage_;
54+
unsigned int port_ = 8080;
5355

5456
void set_output(task_callback_t out_callback) {
5557
out_callback_ = out_callback;
@@ -122,6 +124,29 @@ class llm_task {
122124
CONFIG_AUTO_SET(file_body["mode_param"], b_dynamic_load_axmodel_layer);
123125
CONFIG_AUTO_SET(file_body["mode_param"], max_token_len);
124126

127+
if (mode_config_.filename_tokenizer_model.find("http:") != std::string::npos) {
128+
if (!tokenizer_server_flage_) {
129+
pid_t pid = fork();
130+
if (pid == 0) {
131+
execl("/usr/bin/python3", "python3",
132+
("/opt/m5stack/scripts/" + model_ + "_tokenizer.py").c_str(),
133+
"--host", "localhost",
134+
"--port", std::to_string(port_).c_str(),
135+
"--model_id", (base_model + "tokenizer").c_str(),
136+
"--content", ("'" + prompt_ + "'").c_str(),
137+
nullptr);
138+
perror("execl failed");
139+
exit(1);
140+
}
141+
tokenizer_server_flage_ = true;
142+
SLOGI("port_=%s model_id=%s content=%s", std::to_string(port_).c_str(), (base_model + "tokenizer").c_str(), ("'" + prompt_ + "'").c_str());
143+
std::this_thread::sleep_for(std::chrono::seconds(10));
144+
// return -1;
145+
}
146+
} else {
147+
mode_config_.filename_tokenizer_model = base_model + mode_config_.filename_tokenizer_model;
148+
}
149+
SLOGI("filename_tokenizer_model: %s", mode_config_.filename_tokenizer_model.c_str());
125150
mode_config_.filename_tokens_embed = base_model + mode_config_.filename_tokens_embed;
126151
mode_config_.filename_post_axmodel = base_model + mode_config_.filename_post_axmodel;
127152
mode_config_.filename_vpm_resampler_axmodedl = base_model + mode_config_.filename_vpm_resampler_axmodedl;
@@ -406,7 +431,6 @@ class llm_llm : public StackFlow {
406431
for (auto it = llm_task_obj->inputs_.begin(); it != llm_task_obj->inputs_.end();) {
407432
if (*it == data) {
408433
it = llm_task_obj->inputs_.erase(it);
409-
break;
410434
} else {
411435
++it;
412436
}

0 commit comments

Comments
 (0)