File size: 4,479 Bytes
5a798cc ce0f331 820a0dd ce0f331 820a0dd 5a798cc ce0f331 4749da3 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 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 |
import gradio as gr
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
import time
from functools import wraps
# Asegúrate de que el módulo 'spaces' esté disponible y correctamente instalado.
# Si 'spaces.GPU' no está disponible, puedes omitir o implementar una alternativa.
# En este ejemplo, se asume que 'spaces.GPU' es un decorador válido en tu entorno.
try:
import spaces
except ImportError:
# Si el módulo 'spaces' no está disponible, define un decorador vacío
# para evitar errores. Esto es útil si no estás utilizando características
# específicas de Hugging Face Spaces que requieran este decorador.
def GPU(duration):
def decorator(func):
return func
return decorator
spaces = type('spaces', (), {'GPU': GPU})
# 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
# 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 desde Hugging Face Hub
model_name = "pfnet/GenerRNA"
try:
print("Cargando el tokenizador desde Hugging Face Hub...")
tokenizer = AutoTokenizer.from_pretrained(model_name)
except ValueError as e:
print(f"Error al cargar el tokenizador: {e}")
sys.exit(1)
# Cargar el modelo desde Hugging Face Hub
try:
print("Cargando el modelo GenerRNA desde Hugging Face Hub...")
model = AutoModelForCausalLM.from_pretrained(
model_name,
torch_dtype=torch.float16 if device == "cuda" else torch.float32,
revision="main" # Asegúrate de que la rama correcta esté especificada
).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)
@spaces.GPU(duration=120) # Decorador para asignar 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}"
# 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()
|