Modelo de Linguagem Proteica ESM2
Pré-requisitos
| Requisito | Mínimo | Recomendado |
|---|---|---|
| Python | 3.8+ | 3.10 |
| PyTorch | 1.10+ | 2.0+ |
| CUDA | 11.0+ | 11.7+ |
| VRAM da GPU | 8GB | 24GB (A10G) |
| RAM | 16GB | 32GB |
Como executar
Primeira vez? Consulte o Guia de Instalação para configurar Modal e biomodals.
Opção 1: Modal
cd biomodals
modal run modal_esm2_predict_masked.py \
--input-faa sequences.fasta \
--out-dir embeddings/
GPU: A10G (24GB) | Timeout: 300s padrão
Opção 2: API Python (recomendada)
import torch
import esm
# Carregar modelo
model, alphabet = esm.pretrained.esm2_t33_650M_UR50D()
batch_converter = alphabet.get_batch_converter()
model = model.eval().cuda()
# Processar sequências
data = [("seq1", "MKTAYIAKQRQISFVK...")]
batch_labels, batch_strs, batch_tokens = batch_converter(data)
with torch.no_grad():
results = model(batch_tokens.cuda(), repr_layers=[33])
# Obter embeddings
embeddings = results["representations"][33]
Parâmetros principais
Modelos ESM2
| Modelo | Parâmetros | Velocidade | Qualidade |
|---|---|---|---|
| esm2_t6_8M | 8M | Mais rápido | Triagem rápida |
| esm2_t12_35M | 35M | Rápido | Bom |
| esm2_t33_650M | 650M | Médio | Melhor |
| esm2_t36_3B | 3B | Lento | Ótimo |
Formato de saída
embeddings/
├── embeddings.npy # Array (N, 1280)
├── pll_scores.csv # PLL para cada sequência
└── metadata.json # Informações das sequências
Exemplo de saída
Execução bem-sucedida
$ modal run modal_esm2_predict_masked.py --input-faa designs.fasta
[INFO] Carregando modelo ESM2-650M...
[INFO] Processando 100 sequências...
[INFO] Calculando pseudo-log-verossimilhança...
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
...
Resumo:
PLL média: -0.91
Sequências com PLL > 0: 42/100 (42%)
O que é uma saída boa:
- PLL_normalized: > 0.0 (mais semelhante ao natural)
- Forma dos embeddings: (N, 1280) para modelo 650M
- PLL maior = sequência mais natural
Árvore de decisão
Devo usar ESM2?
│
├─ O que você precisa?
│ ├─ Pontuação de plausibilidade de sequência → ESM2 PLL ✓
│ ├─ Embeddings para agrupamento → ESM2 ✓
│ ├─ Previsão de efeito de variante → ESM2 ✓
│ └─ Previsão de estrutura → Use ESMFold
│
├─ Qual tamanho de modelo?
│ ├─ Triagem rápida → esm2_t12_35M
│ ├─ Uso padrão → esm2_t33_650M ✓
│ └─ Melhor qualidade → esm2_t36_3B
│
└─ Caso de uso?
├─ Filtragem de QC → Limiar PLL > 0.0
├─ Análise de diversidade → Embeddings com média por pool
└─ Varredura de mutações → Log-odds por posição
Interpretação do PLL
| PLL Normalizado | Interpretação |
|---|---|
| > 0.2 | Sequência muito natural |
| 0.0 - 0.2 | Bom, semelhante ao natural |
| -0.5 - 0.0 | Aceitável |
| < -0.5 | Pode ser não natural |
Desempenho típico
| Tamanho da campanha | Tempo (A10G) | Custo (Modal) | Observações |
|---|---|---|---|
| 100 sequências | 5-10 min | ~$1 | Triagem rápida |
| 1000 sequências | 30-60 min | ~$5 | Padrão |
| 5000 sequências | 2-3h | ~$20 | Lote grande |
Throughput: ~100-200 sequências/minuto com modelo 650M.
Verificar
wc -l embeddings/pll_scores.csv # Deve corresponder à entrada + 1 (cabeçalho)
Solução de problemas
Erros OOM: Use modelo menor ou lote de sequências menor Processamento lento: Use esm2_t12_35M para velocidade Pontuações PLL baixas: Pode indicar sequências incomuns/projetadas
Interpretação de erros
| Erro | Causa | Solução |
|---|---|---|
RuntimeError: CUDA out of memory | Sequência muito longa ou lote grande | Reduza o tamanho do lote |
KeyError: representation | Camada solicitada errada | Use camada 33 para modelo 650M |
ValueError: sequence | Aminoácido inválido | Verifique AAs não padrão |
Próximo: Previsão de estrutura com chai ou boltz → protein-qc para filtragem.