Modelo de Lenguaje de Proteínas ESM2
Prerrequisitos
| Requisito | Mínimo | Recomendado |
|---|---|---|
| Python | 3.8+ | 3.10 |
| PyTorch | 1.10+ | 2.0+ |
| CUDA | 11.0+ | 11.7+ |
| VRAM de GPU | 8GB | 24GB (A10G) |
| RAM | 16GB | 32GB |
Cómo ejecutar
¿Es tu primera vez? Consulta la Guía de instalación para configurar Modal y biomodals.
Opción 1: Modal
cd biomodals
modal run modal_esm2_predict_masked.py \
--input-faa sequences.fasta \
--out-dir embeddings/
GPU: A10G (24GB) | Tiempo de espera: 300s predeterminado
Opción 2: API de Python (recomendada)
import torch
import esm
# Cargar modelo
model, alphabet = esm.pretrained.esm2_t33_650M_UR50D()
batch_converter = alphabet.get_batch_converter()
model = model.eval().cuda()
# Procesar secuencias
data = [("seq1", "MKTAYIAKQRQISFVK...")]
batch_labels, batch_strs, batch_tokens = batch_converter(data)
with torch.no_grad():
results = model(batch_tokens.cuda(), repr_layers=[33])
# Obtener embeddings
embeddings = results["representations"][33]
Parámetros clave
Modelos ESM2
| Modelo | Parámetros | Velocidad | Calidad |
|---|---|---|---|
| esm2_t6_8M | 8M | Más rápido | Cribado rápido |
| esm2_t12_35M | 35M | Rápido | Buena |
| esm2_t33_650M | 650M | Media | Mejor |
| esm2_t36_3B | 3B | Lenta | Óptima |
Formato de salida
embeddings/
├── embeddings.npy # Array (N, 1280)
├── pll_scores.csv # PLL para cada secuencia
└── metadata.json # Información de la secuencia
Ejemplo de salida
Ejecución exitosa
$ modal run modal_esm2_predict_masked.py --input-faa designs.fasta
[INFO] Cargando modelo ESM2-650M...
[INFO] Procesando 100 secuencias...
[INFO] Calculando pseudo-log-verosimilitud...
embeddings/pll_scores.csv:
sequence_id,pll,pll_normalized,length
design_0,-0.82,0.15,78
design_1,-0.95,0.08,85
design_2,-1.23,-0.12,72
...
Resumen:
PLL media: -0.91
Secuencias con PLL > 0: 42/100 (42%)
¿Qué es una buena salida?
- PLL_normalized: > 0.0 (más similar a la naturaleza)
- Forma de embeddings: (N, 1280) para el modelo de 650M
- PLL más alto = secuencia más natural
Árbol de decisión
¿Debería usar ESM2?
│
├─ ¿Qué necesitas?
│ ├─ Puntuación de plausibilidad de secuencia → PLL de ESM2 ✓
│ ├─ Embeddings para agrupamiento → ESM2 ✓
│ ├─ Predicción de efectos de variantes → ESM2 ✓
│ └─ Predicción de estructura → Usa ESMFold
│
├─ ¿Qué tamaño de modelo?
│ ├─ Cribado rápido → esm2_t12_35M
│ ├─ Uso estándar → esm2_t33_650M ✓
│ └─ Mejor calidad → esm2_t36_3B
│
└─ ¿Caso de uso?
├─ Filtrado de control de calidad → umbral PLL > 0.0
├─ Análisis de diversidad → Embeddings promediados por media
└─ Escaneo de mutaciones → Log-odds por posición
Interpretación del PLL
| PLL normalizado | Interpretación |
|---|---|
| > 0.2 | Secuencia muy natural |
| 0.0 - 0.2 | Buena, similar a la natural |
| -0.5 - 0.0 | Aceptable |
| < -0.5 | Puede ser no natural |
Rendimiento típico
| Tamaño de campaña | Tiempo (A10G) | Costo (Modal) | Notas |
|---|---|---|---|
| 100 secuencias | 5-10 min | ~$1 | Cribado rápido |
| 1000 secuencias | 30-60 min | ~$5 | Estándar |
| 5000 secuencias | 2-3h | ~$20 | Lote grande |
Rendimiento: ~100-200 secuencias/minuto con el modelo de 650M.
Verificar
wc -l embeddings/pll_scores.csv # Debe coincidir con entrada + 1 (cabecera)
Solución de problemas
Errores OOM: Usa un modelo más pequeño o procesa las secuencias por lotes Procesamiento lento: Usa esm2_t12_35M para mayor velocidad Puntuaciones PLL bajas: Pueden indicar secuencias inusuales/diseñadas
Interpretación de errores
| Error | Causa | Solución |
|---|---|---|
RuntimeError: CUDA out of memory | Secuencia demasiado larga o lote grande | Reduce el tamaño del lote |
KeyError: representation | Capa solicitada incorrecta | Usa la capa 33 para el modelo de 650M |
ValueError: sequence | Aminoácido no válido | Verifica que no haya aminoácidos no estándar |
Siguiente: Predicción de estructura con chai o boltz → protein-qc para filtrado.