larry1129 commited on
Commit
aa6fb2d
·
verified ·
1 Parent(s): 64ca842

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +41 -43
app.py CHANGED
@@ -1,18 +1,9 @@
1
  import gradio as gr
2
- from transformers import AutoTokenizer, AutoModelForCausalLM
3
  from peft import PeftModel
4
  import torch
5
  import os
6
-
7
-
8
- # 打印已安装的包版本以进行调试
9
- import transformers
10
- import bitsandbytes
11
- import accelerate
12
-
13
- print(f"transformers version: {transformers.__version__}")
14
- print(f"bitsandbytes version: {bitsandbytes.__version__}")
15
- print(f"accelerate version: {accelerate.__version__}")
16
 
17
  # 获取 Hugging Face 访问令牌
18
  hf_token = os.getenv("HF_API_TOKEN")
@@ -23,56 +14,65 @@ base_model_name = "larry1129/meta-llama-3.1-8b-bnb-4bit" # 替换为你的基
23
  # 定义 adapter 模型名称
24
  adapter_model_name = "larry1129/WooWoof_AI" # 替换为你的 adapter 模型名称
25
 
26
- # 加载分词器
27
  tokenizer = AutoTokenizer.from_pretrained(base_model_name, use_auth_token=hf_token)
28
 
29
- # 加载基础模型
30
- base_model = AutoModelForCausalLM.from_pretrained(
31
- base_model_name,
32
- device_map="auto",
33
- torch_dtype=torch.float16,
34
- use_auth_token=hf_token,
35
- trust_remote_code=True # 如果你的模型使用自定义代码,请保留此参数
36
- )
37
-
38
- # 加载 adapter 并将其应用到基础模型上
39
- model = PeftModel.from_pretrained(
40
- base_model,
41
- adapter_model_name,
42
- device_map="auto",
43
- torch_dtype=torch.float16,
44
- use_auth_token=hf_token,
45
- trust_remote_code=True
46
- )
47
-
48
- # 设置 pad_token
49
- tokenizer.pad_token = tokenizer.eos_token
50
- model.config.pad_token_id = tokenizer.pad_token_id
51
-
52
- # 切换到评估模式
53
- model.eval()
54
 
55
  # 定义提示生成函数
56
  def generate_prompt(instruction, input_text=""):
57
  if input_text:
58
  prompt = f"""### Instruction:
59
  {instruction}
60
-
61
  ### Input:
62
  {input_text}
63
-
64
  ### Response:
65
  """
66
  else:
67
  prompt = f"""### Instruction:
68
  {instruction}
69
-
70
  ### Response:
71
  """
72
  return prompt
73
 
74
- # 定义生成响应的函数
 
75
  def generate_response(instruction, input_text):
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
76
  prompt = generate_prompt(instruction, input_text)
77
  inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
78
 
@@ -104,5 +104,3 @@ iface = gr.Interface(
104
 
105
  # 启动 Gradio 接口
106
  iface.launch()
107
-
108
-
 
1
  import gradio as gr
2
+ from transformers import AutoTokenizer
3
  from peft import PeftModel
4
  import torch
5
  import os
6
+ import spaces
 
 
 
 
 
 
 
 
 
7
 
8
  # 获取 Hugging Face 访问令牌
9
  hf_token = os.getenv("HF_API_TOKEN")
 
14
  # 定义 adapter 模型名称
15
  adapter_model_name = "larry1129/WooWoof_AI" # 替换为你的 adapter 模型名称
16
 
17
+ # 加载分词器(无需 GPU,可在全局加载)
18
  tokenizer = AutoTokenizer.from_pretrained(base_model_name, use_auth_token=hf_token)
19
 
20
+ # 定义一个全局变量用于缓存模型
21
+ model = None
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
22
 
23
  # 定义提示生成函数
24
  def generate_prompt(instruction, input_text=""):
25
  if input_text:
26
  prompt = f"""### Instruction:
27
  {instruction}
 
28
  ### Input:
29
  {input_text}
 
30
  ### Response:
31
  """
32
  else:
33
  prompt = f"""### Instruction:
34
  {instruction}
 
35
  ### Response:
36
  """
37
  return prompt
38
 
39
+ # 定义生成响应的函数,并使用 @spaces.GPU 装饰
40
+ @spaces.GPU
41
  def generate_response(instruction, input_text):
42
+ global model
43
+
44
+ if model is None:
45
+ # 在函数内部导入需要 GPU 的库
46
+ import bitsandbytes
47
+ from transformers import AutoModelForCausalLM
48
+
49
+ # 加载基础模型
50
+ base_model = AutoModelForCausalLM.from_pretrained(
51
+ base_model_name,
52
+ device_map="auto",
53
+ torch_dtype=torch.float16,
54
+ use_auth_token=hf_token,
55
+ trust_remote_code=True # 如果你的模型使用自定义代码,请保留此参数
56
+ )
57
+
58
+ # 加载 adapter 并将其应用到基础模型上
59
+ model = PeftModel.from_pretrained(
60
+ base_model,
61
+ adapter_model_name,
62
+ device_map="auto",
63
+ torch_dtype=torch.float16,
64
+ use_auth_token=hf_token,
65
+ trust_remote_code=True
66
+ )
67
+
68
+ # 设置 pad_token
69
+ tokenizer.pad_token = tokenizer.eos_token
70
+ model.config.pad_token_id = tokenizer.pad_token_id
71
+
72
+ # 切换到评估模式
73
+ model.eval()
74
+
75
+ # 生成提示
76
  prompt = generate_prompt(instruction, input_text)
77
  inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
78
 
 
104
 
105
  # 启动 Gradio 接口
106
  iface.launch()