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()