han145 commited on
Commit
c7406df
·
verified ·
1 Parent(s): 9d92f7a

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +20 -5
app.py CHANGED
@@ -1,22 +1,34 @@
 
 
 
 
 
 
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 兼容 CPU,0.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
  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:
@@ -43,10 +55,13 @@ def stream_response(message, history):
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)
@@ -58,7 +73,7 @@ def stream_response(message, history):
58
  clean_display_text = re.sub(r'[\x0a\-\*""""#]', '', partial_text)
59
  yield clean_display_text
60
 
61
- # 4. 界面设置
62
  demo = gr.ChatInterface(
63
  fn=stream_response,
64
  title="Qwen2.5 流式对话助手",
 
1
+ import os
2
+ # 必须在 import torch 之前设置,防止线程超额分配
3
+ os.environ["OMP_NUM_THREADS"] = "2"
4
+ os.environ["MKL_NUM_THREADS"] = "2"
5
+ os.environ["OPENBLAS_NUM_THREADS"] = "2"
6
+
7
  import torch
8
  import re
9
  import gradio as gr
10
  from transformers import AutoModelForCausalLM, AutoTokenizer, TextIteratorStreamer
11
  from threading import Thread
12
 
13
+ # 1. 设置 CPU 线程数(匹配 2 vCPU,避免线程竞争反而变慢)
14
  torch.set_num_threads(2)
15
 
16
+ # 2. 加载模型
17
  model_id = "Qwen/Qwen2.5-0.5B-Instruct"
18
  tokenizer = AutoTokenizer.from_pretrained(model_id)
19
  model = AutoModelForCausalLM.from_pretrained(
20
  model_id,
21
  dtype=torch.float32,
22
  device_map="cpu",
23
+ attn_implementation="eager", # CPU 上 eager 比 sdpa 更快
24
+ use_cache=True, # 启用 KV cache,避免重复计算
25
  )
26
 
27
+ # 3. 关闭梯度计算,减少内存和计算开销
28
+ model.eval()
29
+
30
+ # 4. 流式生成函数
31
+ @torch.inference_mode()
32
  def stream_response(message, history):
33
  messages = [{"role": "system", "content": "你是一个乐于助人的 AI 助手。"}]
34
  for h in history:
 
55
  generate_kwargs = {
56
  **model_inputs,
57
  "streamer": streamer,
58
+ "max_new_tokens": 256, # 从 512 降到 256,减少总计算量
59
  "do_sample": True,
60
  "temperature": 0.7,
61
+ "top_k": 40, # 限制候选词范围,减少采样计算
62
+ "top_p": 0.9,
63
  "pad_token_id": tokenizer.eos_token_id,
64
+ "use_cache": True,
65
  }
66
 
67
  thread = Thread(target=model.generate, kwargs=generate_kwargs)
 
73
  clean_display_text = re.sub(r'[\x0a\-\*""""#]', '', partial_text)
74
  yield clean_display_text
75
 
76
+ # 5. 界面设置
77
  demo = gr.ChatInterface(
78
  fn=stream_response,
79
  title="Qwen2.5 流式对话助手",