File size: 3,939 Bytes
5a798cc 32f8cf2 820a0dd 69463c7 32f8cf2 820a0dd 5a798cc 1baae24 ce0f331 5b7b502 32f8cf2 ce0f331 5b7b502 32f8cf2 ce0f331 69463c7 ce0f331 199e65d 32f8cf2 5b7b502 1baae24 69463c7 1baae24 4749da3 32f8cf2 4749da3 32f8cf2 4749da3 5b7b502 32f8cf2 4749da3 5b7b502 199e65d 5b7b502 1baae24 32f8cf2 5b7b502 32f8cf2 199e65d 32f8cf2 5b7b502 32f8cf2 199e65d 32f8cf2 5b7b502 32f8cf2 4749da3 5a798cc 32f8cf2 5b7b502 32f8cf2 5b7b502 165628b 5a798cc 32f8cf2 5b7b502 32f8cf2 5b7b502 32f8cf2 5a798cc 32f8cf2 5a798cc 32f8cf2 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 |
import gradio as gr
import torch
from transformers import pipeline
import time
from functools import wraps
import sys
from multimolecule import RnaTokenizer, RnaFmModel # Importar clases espec铆ficas de multimolecule
# 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
# Verificar si CUDA est谩 disponible para el modelo principal
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 modelo y el tokenizador
model_name = "multimolecule/mrnafm"
try:
print("Cargando el tokenizador...")
tokenizer = RnaTokenizer.from_pretrained(model_name)
except ValueError as e:
print(f"Error al cargar el tokenizador: {e}")
sys.exit(1)
try:
print("Cargando el modelo...")
model = RnaFmModel.from_pretrained(model_name)
model.to(device)
except Exception as e:
print(f"Error al cargar el modelo: {e}")
sys.exit(1)
@medir_tiempo
def predecir_fill_mask(secuencias):
"""
Funci贸n que realiza una predicci贸n de Fill-Mask para las secuencias de ARN proporcionadas.
"""
try:
if not secuencias.strip():
return "Por favor, ingresa una o m谩s secuencias de ARN v谩lidas con <mask> para predecir."
# Separar las secuencias por l铆neas y eliminar espacios vac铆os
secuencias_lista = [seq.strip().upper() for seq in secuencias.strip().split('\n') if seq.strip()]
resultados = []
# Crear el pipeline de fill-mask utilizando el tokenizador y modelo cargados
fill_mask = pipeline('fill-mask', model=model, tokenizer=tokenizer, device=0 if device == "cuda" else -1)
for seq in secuencias_lista:
# Asegurarse de que la secuencia contenga al menos un <mask>
if "<MASK>" not in seq and "<mask>" not in seq:
resultados.append(f"Secuencia sin token <mask>: {seq}. Agrega <mask> donde desees predecir.")
continue
# Realizar la predicci贸n de fill-mask
predictions = fill_mask(seq)
# Formatear las predicciones
pred_str = ""
for pred in predictions:
pred_str += f"Predicci贸n: {pred['sequence']}, Score: {pred['score']:.4f}\n"
resultados.append(f"Secuencia: {seq}\n{pred_str}")
return "\n\n".join(resultados)
except Exception as e:
print(f"Error durante la predicci贸n: {e}")
return f"Error al realizar la predicci贸n: {e}"
# Definir la interfaz de Gradio
titulo = "OmniGenome: Predicci贸n de Fill-Mask para Secuencias de ARN"
descripcion = (
"Ingresa una o m谩s secuencias de ARN (una por l铆nea) con un token <mask> donde deseas realizar la predicci贸n."
" El modelo utilizado es mRNA-FM de MultiMolecule, un modelo pre-entrenado de lenguaje para secuencias de ARN."
)
iface = gr.Interface(
fn=predecir_fill_mask,
inputs=gr.Textbox(
lines=10,
placeholder="Escribe tus secuencias de ARN aqu铆, una por l铆nea, incluyendo <mask> donde desees predecir...",
label="Secuencias de ARN con <mask>"
),
outputs=gr.Textbox(label="Predicciones de Fill-Mask"),
title=titulo,
description=descripcion,
examples=[
[
"AUGGCUACUUU<mask>G",
"GCGCGAU<mask>CGACGUAGCUAGC"
],
[
"AUAUGCGGUAUCGU<mask>GUA",
"GGAUACGUGAU<mask>GCUAGCAGU"
]
],
cache_examples=False,
allow_flagging="never"
)
# Ejecutar la interfaz
if __name__ == "__main__":
iface.launch()
|