File size: 3,894 Bytes
5a798cc 4749da3 820a0dd c3a5bd0 50560b1 4749da3 820a0dd 5a798cc 4749da3 b956a25 4749da3 b956a25 4749da3 165628b 50560b1 165628b 50560b1 4749da3 50560b1 4749da3 4251465 4749da3 4251465 165628b 5a798cc 4749da3 165628b 5a798cc 4749da3 165628b 4749da3 165628b 4749da3 5a798cc 4749da3 5a798cc 4749da3 5a798cc 50560b1 5a798cc |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 |
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()
|