BioRAG / app.py
C2MV's picture
Update app.py
4749da3 verified
raw
history blame
3.89 kB
import gradio as gr
import torch
from transformers import AutoTokenizer
import time
from functools import wraps
import sys
import spaces # Aseg煤rate de que este m贸dulo est茅 disponible y correctamente instalado
from model import GenerRNA # Importa tu modelo personalizado
# Decorador para medir el tiempo de ejecuci贸n
def medir_tiempo(func):
@wraps(func)
def wrapper(*args, **kwargs):
inicio = time.time()
resultado = func(*args, **kwargs)
fin = time.time()
tiempo_transcurrido = fin - inicio
print(f"Tiempo de ejecuci贸n de '{func.__name__}': {tiempo_transcurrido:.2f} segundos")
return resultado
return wrapper
# Decorador para asignar GPU durante la ejecuci贸n de la funci贸n
# Nota: Aseg煤rate de que el decorador @spaces.GPU est茅 disponible en tu entorno
@spaces.GPU(duration=120) # Asigna GPU durante 120 segundos
@medir_tiempo
def generar_rna_sequence(prompt, max_length=256):
"""
Funci贸n que genera una secuencia de RNA a partir de una secuencia inicial dada.
"""
try:
if not prompt.strip():
return "Por favor, ingresa una secuencia de inicio v谩lida."
# Tokenizar la entrada
inputs = tokenizer.encode(prompt, return_tensors="pt").to(device)
# Generar la secuencia
with torch.no_grad():
outputs = model.generate(
inputs,
max_length=max_length,
num_return_sequences=1,
no_repeat_ngram_size=2,
temperature=0.7,
top_k=50,
top_p=0.95,
do_sample=True
)
# Decodificar la secuencia generada
generated_sequence = tokenizer.decode(outputs[0], skip_special_tokens=True)
return generated_sequence
except Exception as e:
print(f"Error durante la generaci贸n de secuencia: {e}")
return f"Error al generar la secuencia: {e}"
# Configurar el dispositivo (GPU si est谩 disponible)
device = "cuda" if torch.cuda.is_available() else "cpu"
if device == "cpu":
print("Advertencia: CUDA no est谩 disponible. Se usar谩 la CPU, lo que puede ser lento.")
# Cargar el tokenizador
try:
print("Cargando el tokenizador...")
tokenizer = AutoTokenizer.from_pretrained("tokenizer_bpe_1024")
except ValueError as e:
print(f"Error al cargar el tokenizador: {e}")
sys.exit(1)
# Cargar el modelo GenerRNA
try:
print("Cargando el modelo GenerRNA...")
model = GenerRNA() # Instancia tu modelo personalizado
model.load_state_dict(torch.load("model.pt.recombined", map_location=device))
model.to(device)
model.eval()
print("Modelo GenerRNA cargado exitosamente.")
except Exception as e:
print(f"Error al cargar el modelo GenerRNA: {e}")
sys.exit(1)
# Definir la interfaz de Gradio
titulo = "GenerRNA - Generador de Secuencias de RNA"
descripcion = (
"GenerRNA es un modelo generativo de RNA basado en una arquitectura Transformer. "
"Ingresa una secuencia inicial opcional y define la longitud m谩xima para generar nuevas secuencias de RNA."
)
iface = gr.Interface(
fn=generar_rna_sequence,
inputs=[
gr.Textbox(
lines=5,
placeholder="Ingresa una secuencia de RNA inicial (opcional)...",
label="Secuencia Inicial"
),
gr.Slider(
minimum=50,
maximum=1000,
step=50,
value=256,
label="Longitud M谩xima de la Secuencia"
)
],
outputs=gr.Textbox(label="Secuencia de RNA Generada"),
title=titulo,
description=descripcion,
examples=[
[
"AUGGCUACGUAUCGACGUA"
],
[
"GCUAUGCUAGCUAGCUGAC"
]
],
cache_examples=False,
allow_flagging="never"
)
# Ejecutar la interfaz
if __name__ == "__main__":
iface.launch()