repd79 commited on
Commit
a2a2ab4
·
verified ·
1 Parent(s): 7ab6a95

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +18 -26
app.py CHANGED
@@ -3,13 +3,14 @@ import torch
3
  import gradio as gr
4
  from transformers import AutoTokenizer, AutoModelForCausalLM
5
 
6
- # Configurar la caché para evitar descargas repetitivas
7
  os.environ["TRANSFORMERS_CACHE"] = "/root/.cache/huggingface/"
 
8
 
9
  # Nombre del modelo
10
  model_name = "BSC-LT/ALIA-40b"
11
 
12
- # Intentar cargar el modelo desde la caché sin volver a descargarlo
13
  try:
14
  tokenizer = AutoTokenizer.from_pretrained(model_name, cache_dir=os.getenv("TRANSFORMERS_CACHE"), local_files_only=True)
15
  model = AutoModelForCausalLM.from_pretrained(
@@ -17,7 +18,8 @@ try:
17
  cache_dir=os.getenv("TRANSFORMERS_CACHE"),
18
  local_files_only=True,
19
  device_map="auto",
20
- torch_dtype=torch.bfloat16 # Precisión mixta para optimización de memoria
 
21
  )
22
  print("Modelo cargado desde caché.")
23
  except Exception as e:
@@ -27,41 +29,31 @@ except Exception as e:
27
  model_name,
28
  cache_dir=os.getenv("TRANSFORMERS_CACHE"),
29
  device_map="auto",
30
- torch_dtype=torch.bfloat16 # Precisión mixta para optimización de memoria
 
31
  )
32
-
33
- # Guardar el modelo localmente para futuras ejecuciones más rápidas
34
- local_path = "/root/model_storage/"
35
- tokenizer.save_pretrained(local_path)
36
- model.save_pretrained(local_path)
37
  print("Modelo guardado en caché para futuras cargas.")
38
 
39
- # Verificar si la GPU está disponible y mover el modelo a la GPU
40
- device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
41
- model.to(device)
42
  print(f"Modelo cargado en: {next(model.parameters()).device}")
43
 
44
  def generar_texto(entrada):
45
- # Liberar caché de la GPU antes de la inferencia para evitar problemas de memoria
46
- torch.cuda.empty_cache()
47
 
48
- # Tokenizar la entrada y mover a GPU
49
- input_ids = tokenizer(entrada, return_tensors="pt").input_ids.to(device)
50
 
51
- # Generar texto con parámetros optimizados
52
  output = model.generate(
53
  input_ids,
54
- max_length=100, # Limitar longitud para ahorrar memoria
55
- temperature=0.7, # Controla la aleatoriedad
56
- top_p=0.9, # Reduce la búsqueda del modelo
57
- num_return_sequences=1,# Genera una única respuesta
58
- do_sample=True, # Sampling para rapidez
59
- use_cache=True # Optimiza reutilizando cálculos previos
60
  )
61
 
62
- # Decodificar y retornar el texto generado
63
- texto_generado = tokenizer.decode(output[0], skip_special_tokens=True)
64
- return texto_generado
65
 
66
  # Crear la interfaz de Gradio
67
  interfaz = gr.Interface(
 
3
  import gradio as gr
4
  from transformers import AutoTokenizer, AutoModelForCausalLM
5
 
6
+ # Configurar caché y gestión de memoria
7
  os.environ["TRANSFORMERS_CACHE"] = "/root/.cache/huggingface/"
8
+ os.environ["PYTORCH_CUDA_ALLOC_CONF"] = "expandable_segments:True"
9
 
10
  # Nombre del modelo
11
  model_name = "BSC-LT/ALIA-40b"
12
 
13
+ # Cargar modelo desde caché si es posible
14
  try:
15
  tokenizer = AutoTokenizer.from_pretrained(model_name, cache_dir=os.getenv("TRANSFORMERS_CACHE"), local_files_only=True)
16
  model = AutoModelForCausalLM.from_pretrained(
 
18
  cache_dir=os.getenv("TRANSFORMERS_CACHE"),
19
  local_files_only=True,
20
  device_map="auto",
21
+ offload_folder="offload_cache",
22
+ torch_dtype=torch.bfloat16
23
  )
24
  print("Modelo cargado desde caché.")
25
  except Exception as e:
 
29
  model_name,
30
  cache_dir=os.getenv("TRANSFORMERS_CACHE"),
31
  device_map="auto",
32
+ offload_folder="offload_cache",
33
+ torch_dtype=torch.bfloat16
34
  )
35
+ tokenizer.save_pretrained("/root/model_storage/")
36
+ model.save_pretrained("/root/model_storage/")
 
 
 
37
  print("Modelo guardado en caché para futuras cargas.")
38
 
39
+ # Mostrar en qué dispositivo está el modelo
 
 
40
  print(f"Modelo cargado en: {next(model.parameters()).device}")
41
 
42
  def generar_texto(entrada):
43
+ torch.cuda.empty_cache() # Liberar caché antes de inferencia
 
44
 
45
+ input_ids = tokenizer(entrada, return_tensors="pt").input_ids.to("cuda")
 
46
 
 
47
  output = model.generate(
48
  input_ids,
49
+ max_length=50,
50
+ temperature=0.7,
51
+ top_p=0.9,
52
+ num_return_sequences=1,
53
+ do_sample=True
 
54
  )
55
 
56
+ return tokenizer.decode(output[0], skip_special_tokens=True)
 
 
57
 
58
  # Crear la interfaz de Gradio
59
  interfaz = gr.Interface(