han145 commited on
Commit
b7e162b
·
verified ·
1 Parent(s): f6f617a

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +44 -26
app.py CHANGED
@@ -1,18 +1,22 @@
 
1
  import re
2
  import gradio as gr
3
- from llama_cpp import Llama
4
-
5
- # 1. 加载 GGUF 量化模型(带 AVX2 优化后推理更快)
6
- llm = Llama.from_pretrained(
7
- repo_id="Qwen/Qwen2.5-1.5B-Instruct-GGUF",
8
- filename="*q4_k_m.gguf",
9
- n_ctx=1024, # 2048 降到 1024大幅减少 KV cache 内存
10
- n_threads=2,
11
- n_batch=256, # 从 512 降到 256
12
- verbose=False,
 
 
 
13
  )
14
 
15
- # 2. 流式生成函数
16
  def stream_response(message, history):
17
  messages = [{"role": "system", "content": "你是一个乐于助人的 AI 助手。"}]
18
  for h in history:
@@ -25,21 +29,35 @@ def stream_response(message, history):
25
  messages.append({"role": "assistant", "content": h[1]})
26
  messages.append({"role": "user", "content": message})
27
 
28
- # 3. 流式生成
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
29
  partial_text = ""
30
- for chunk in llm.create_chat_completion(
31
- messages=messages,
32
- max_tokens=512,
33
- temperature=0.7,
34
- stream=True,
35
- ):
36
- delta = chunk["choices"][0]["delta"]
37
- if "content" in delta:
38
- partial_text += delta["content"]
39
-
40
- # --- 实时符号过滤(保留你原有的逻辑) ---
41
- clean_display_text = re.sub(r'[\n\-\*\"""\"#]', '', partial_text)
42
- yield clean_display_text
43
 
44
  # 4. 界面设置
45
  demo = gr.ChatInterface(
@@ -50,4 +68,4 @@ demo = gr.ChatInterface(
50
  )
51
 
52
  if __name__ == "__main__":
53
- demo.launch(server_name="0.0.0.0", server_port=7860)
 
1
+ import torch
2
  import re
3
  import gradio as gr
4
+ from transformers import AutoModelForCausalLM, AutoTokenizer, TextIteratorStreamer
5
+ from threading import Thread
6
+
7
+ # 1. 设置 CPU 线程数
8
+ torch.set_num_threads(2)
9
+
10
+ # 2. 加载模型(float32 兼容 CPU0.5B 体积小速度快)
11
+ model_id = "Qwen/Qwen2.5-0.5B-Instruct"
12
+ tokenizer = AutoTokenizer.from_pretrained(model_id)
13
+ model = AutoModelForCausalLM.from_pretrained(
14
+ model_id,
15
+ torch_dtype=torch.float32,
16
+ device_map="cpu",
17
  )
18
 
19
+ # 3. 流式生成函数
20
  def stream_response(message, history):
21
  messages = [{"role": "system", "content": "你是一个乐于助人的 AI 助手。"}]
22
  for h in history:
 
29
  messages.append({"role": "assistant", "content": h[1]})
30
  messages.append({"role": "user", "content": message})
31
 
32
+ model_inputs = tokenizer.apply_chat_template(
33
+ messages,
34
+ add_generation_prompt=True,
35
+ return_tensors="pt",
36
+ return_dict=True,
37
+ ).to("cpu")
38
+
39
+ streamer = TextIteratorStreamer(
40
+ tokenizer, skip_prompt=True, skip_special_tokens=True
41
+ )
42
+
43
+ generate_kwargs = {
44
+ **model_inputs,
45
+ "streamer": streamer,
46
+ "max_new_tokens": 512,
47
+ "do_sample": True,
48
+ "temperature": 0.7,
49
+ "pad_token_id": tokenizer.eos_token_id,
50
+ }
51
+
52
+ thread = Thread(target=model.generate, kwargs=generate_kwargs)
53
+ thread.start()
54
+
55
  partial_text = ""
56
+ for new_text in streamer:
57
+ partial_text += new_text
58
+ clean_display_text = re.sub(r'[
59
+ \-\*\"""""#]', '', partial_text)
60
+ yield clean_display_text
 
 
 
 
 
 
 
 
61
 
62
  # 4. 界面设置
63
  demo = gr.ChatInterface(
 
68
  )
69
 
70
  if __name__ == "__main__":
71
+ demo.launch()