askbyte commited on
Commit
42eebfb
verified
1 Parent(s): 822dc03

Create app_4bit.py

Browse files
Files changed (1) hide show
  1. app_4bit.py +106 -0
app_4bit.py ADDED
@@ -0,0 +1,106 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ Versi贸n con cuantizaci贸n de 4 bits para reducir a煤n m谩s el uso de memoria.
3
+ Renombra este archivo a app.py para usar esta versi贸n ultra optimizada.
4
+ """
5
+
6
+ import gradio as gr
7
+ from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig, pipeline
8
+ import torch
9
+ import gc
10
+ import os
11
+
12
+ # Funci贸n para cargar el prompt desde el archivo
13
+ def get_system_prompt():
14
+ with open("prompt.txt", "r", encoding="utf-8") as f:
15
+ return f.read().strip()
16
+
17
+ # Funci贸n para generar respuestas
18
+ def generate_response(user_message):
19
+ try:
20
+ if not user_message.strip():
21
+ return "Por favor, escribe una pregunta para que pueda ayudarte."
22
+
23
+ # Obtener el prompt del sistema
24
+ system_prompt = get_system_prompt()
25
+
26
+ # Crear el prompt completo
27
+ prompt = f"{system_prompt}\n\nPregunta: {user_message}\n\nRespuesta:"
28
+
29
+ # Generar respuesta usando el pipeline
30
+ response = generator(
31
+ prompt,
32
+ max_new_tokens=512,
33
+ temperature=0.7,
34
+ top_p=0.9,
35
+ do_sample=True,
36
+ num_return_sequences=1
37
+ )[0]["generated_text"]
38
+
39
+ # Extraer solo la respuesta (despu茅s de "Respuesta:")
40
+ assistant_response = response.split("Respuesta:")[-1].strip()
41
+
42
+ # Forzar recolecci贸n de basura
43
+ gc.collect()
44
+ torch.cuda.empty_cache() if torch.cuda.is_available() else None
45
+
46
+ return assistant_response
47
+
48
+ except Exception as e:
49
+ print(f"Error: {str(e)}")
50
+ return f"Lo siento, ha ocurrido un error: {str(e)}"
51
+
52
+ # Cargar el modelo y crear el pipeline
53
+ print("Cargando modelo Phi-2 con cuantizaci贸n de 4 bits...")
54
+
55
+ # Configuraci贸n de cuantizaci贸n de 4 bits
56
+ quantization_config = BitsAndBytesConfig(
57
+ load_in_4bit=True,
58
+ bnb_4bit_compute_dtype=torch.float16,
59
+ bnb_4bit_quant_type="nf4",
60
+ bnb_4bit_use_double_quant=True
61
+ )
62
+
63
+ # Usar un modelo peque帽o optimizado para espa帽ol
64
+ model_name = "microsoft/phi-2" # Modelo de 2.7B par谩metros, mucho m谩s ligero que 7B
65
+
66
+ # Configuraci贸n para reducir el uso de memoria con cuantizaci贸n de 4 bits
67
+ tokenizer = AutoTokenizer.from_pretrained(model_name)
68
+ model = AutoModelForCausalLM.from_pretrained(
69
+ model_name,
70
+ quantization_config=quantization_config,
71
+ device_map="auto",
72
+ low_cpu_mem_usage=True
73
+ )
74
+
75
+ # Crear el pipeline de generaci贸n de texto
76
+ generator = pipeline(
77
+ "text-generation",
78
+ model=model,
79
+ tokenizer=tokenizer
80
+ )
81
+
82
+ print("Modelo cargado correctamente con cuantizaci贸n de 4 bits!")
83
+
84
+ # Crear la interfaz de Gradio
85
+ demo = gr.Interface(
86
+ fn=generate_response,
87
+ inputs=gr.Textbox(
88
+ placeholder="Escribe tu pregunta sobre emprendimiento aqu铆...",
89
+ label="Tu pregunta"
90
+ ),
91
+ outputs=gr.Textbox(label="Respuesta de BITER"),
92
+ title="BITER - Tu Mentor en Tiempo Real para Decisiones de Negocio",
93
+ description="BITER es un asistente de IA que responde dudas de emprendedores como si fuera un CEO experimentado.",
94
+ examples=[
95
+ ["驴C贸mo puedo validar mi idea de negocio con poco presupuesto?"],
96
+ ["驴Cu谩l es la mejor estrategia para conseguir mis primeros clientes?"],
97
+ ["驴Deber铆a invertir en publicidad en redes sociales o en SEO?"]
98
+ ],
99
+ allow_flagging="never"
100
+ )
101
+
102
+ # Lanzar la aplicaci贸n con configuraci贸n para ahorrar memoria
103
+ if __name__ == "__main__":
104
+ # Configurar menos workers para ahorrar memoria
105
+ demo.queue(max_size=1).launch(share=False, debug=False)
106
+