askbyte commited on
Commit
b06d928
verified
1 Parent(s): 1cf5c88

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +33 -25
app.py CHANGED
@@ -2,6 +2,7 @@ import gradio as gr
2
  from transformers import AutoModelForCausalLM, AutoTokenizer
3
  import torch
4
  import os
 
5
 
6
  # Variables globales para el modelo y tokenizador
7
  model = None
@@ -17,21 +18,27 @@ def load_model_if_needed():
17
  global model, tokenizer
18
 
19
  if model is None:
20
- print("Cargando modelo Zephyr-7B...")
21
 
22
  # Cargar el tokenizador
23
- model_name = "HuggingFaceH4/zephyr-7b-beta"
24
  tokenizer = AutoTokenizer.from_pretrained(model_name)
25
 
26
- # Cargar el modelo con configuraciones para ahorrar memoria
27
  model = AutoModelForCausalLM.from_pretrained(
28
  model_name,
29
- torch_dtype=torch.float16, # Usar precisi贸n reducida
30
- device_map="auto", # Distribuir el modelo autom谩ticamente
31
- load_in_8bit=True, # Cuantizaci贸n a 8 bits
32
  )
33
 
34
- print("Modelo cargado correctamente!")
 
 
 
 
 
 
 
35
 
36
  # Funci贸n principal que procesa las preguntas del usuario
37
  def generate_response(user_message):
@@ -45,25 +52,22 @@ def generate_response(user_message):
45
  # Obtener el prompt del sistema
46
  system_prompt = get_system_prompt()
47
 
48
- # Crear el formato de conversaci贸n para Zephyr
49
- messages = [
50
- {"role": "system", "content": system_prompt},
51
- {"role": "user", "content": user_message}
52
- ]
53
 
54
- # Convertir mensajes al formato que espera el modelo
55
- prompt = tokenizer.apply_chat_template(messages, tokenize=False)
56
 
57
- # Generar respuesta
58
- inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
59
-
60
- # Configuraci贸n de generaci贸n
61
  generation_config = {
62
- "max_new_tokens": 500,
63
  "temperature": 0.7,
64
  "top_p": 0.9,
65
  "do_sample": True,
66
- "pad_token_id": tokenizer.eos_token_id
 
67
  }
68
 
69
  # Generar respuesta
@@ -73,8 +77,12 @@ def generate_response(user_message):
73
  # Decodificar la respuesta
74
  full_response = tokenizer.decode(outputs[0], skip_special_tokens=True)
75
 
76
- # Extraer solo la respuesta del asistente (despu茅s del 煤ltimo mensaje del usuario)
77
- assistant_response = full_response.split("assistant:")[-1].strip()
 
 
 
 
78
 
79
  return assistant_response
80
 
@@ -100,7 +108,7 @@ demo = gr.Interface(
100
  allow_flagging="never"
101
  )
102
 
103
- # Lanzar la aplicaci贸n
104
  if __name__ == "__main__":
105
- demo.launch()
106
-
 
2
  from transformers import AutoModelForCausalLM, AutoTokenizer
3
  import torch
4
  import os
5
+ import gc
6
 
7
  # Variables globales para el modelo y tokenizador
8
  model = None
 
18
  global model, tokenizer
19
 
20
  if model is None:
21
+ print("Cargando modelo Mistral-7B-Instruct-v0.1...")
22
 
23
  # Cargar el tokenizador
24
+ model_name = "mistralai/Mistral-7B-Instruct-v0.1"
25
  tokenizer = AutoTokenizer.from_pretrained(model_name)
26
 
27
+ # Configuraci贸n para CPU con optimizaciones de memoria
28
  model = AutoModelForCausalLM.from_pretrained(
29
  model_name,
30
+ torch_dtype=torch.float32, # Usar float32 para CPU
31
+ low_cpu_mem_usage=True, # Optimizaci贸n para CPU con poca memoria
 
32
  )
33
 
34
+ # Mover el modelo a CPU expl铆citamente
35
+ model = model.to("cpu")
36
+
37
+ # Forzar recolecci贸n de basura para liberar memoria
38
+ gc.collect()
39
+ torch.cuda.empty_cache() if torch.cuda.is_available() else None
40
+
41
+ print("Modelo cargado correctamente en CPU!")
42
 
43
  # Funci贸n principal que procesa las preguntas del usuario
44
  def generate_response(user_message):
 
52
  # Obtener el prompt del sistema
53
  system_prompt = get_system_prompt()
54
 
55
+ # Formato de prompt para Mistral-7B-Instruct-v0.1
56
+ prompt = f"""<s>[INST] {system_prompt}
57
+
58
+ Pregunta del usuario: {user_message} [/INST]</s>"""
 
59
 
60
+ # Tokenizar el prompt
61
+ inputs = tokenizer(prompt, return_tensors="pt")
62
 
63
+ # Configuraci贸n de generaci贸n optimizada para CPU
 
 
 
64
  generation_config = {
65
+ "max_new_tokens": 512, # Limitar tokens para ahorrar memoria
66
  "temperature": 0.7,
67
  "top_p": 0.9,
68
  "do_sample": True,
69
+ "pad_token_id": tokenizer.eos_token_id,
70
+ "num_return_sequences": 1
71
  }
72
 
73
  # Generar respuesta
 
77
  # Decodificar la respuesta
78
  full_response = tokenizer.decode(outputs[0], skip_special_tokens=True)
79
 
80
+ # Extraer solo la respuesta del asistente (despu茅s del prompt)
81
+ assistant_response = full_response.replace(prompt.replace("<s>", "").replace("</s>", ""), "").strip()
82
+
83
+ # Forzar recolecci贸n de basura para liberar memoria
84
+ gc.collect()
85
+ torch.cuda.empty_cache() if torch.cuda.is_available() else None
86
 
87
  return assistant_response
88
 
 
108
  allow_flagging="never"
109
  )
110
 
111
+ # Lanzar la aplicaci贸n con configuraci贸n para ahorrar memoria
112
  if __name__ == "__main__":
113
+ # Configurar menos workers para ahorrar memoria
114
+ demo.queue(max_size=1).launch(share=False, debug=False)