ESM2-Proteinsprachmodell
Voraussetzungen
| Anforderung | Minimum | Empfohlen |
|---|---|---|
| Python | 3.8+ | 3.10 |
| PyTorch | 1.10+ | 2.0+ |
| CUDA | 11.0+ | 11.7+ |
| GPU VRAM | 8GB | 24GB (A10G) |
| Arbeitsspeicher | 16GB | 32GB |
So führen Sie es aus
Zum ersten Mal? Siehe Installationsanleitung zum Einrichten von Modal und biomodals.
Option 1: Modal
cd biomodals
modal run modal_esm2_predict_masked.py \
--input-faa sequences.fasta \
--out-dir embeddings/
GPU: A10G (24GB) | Timeout: 300s Standard
Option 2: Python-API (empfohlen)
import torch
import esm
# Modell laden
model, alphabet = esm.pretrained.esm2_t33_650M_UR50D()
batch_converter = alphabet.get_batch_converter()
model = model.eval().cuda()
# Sequenzen verarbeiten
data = [("seq1", "MKTAYIAKQRQISFVK...")]
batch_labels, batch_strs, batch_tokens = batch_converter(data)
with torch.no_grad():
results = model(batch_tokens.cuda(), repr_layers=[33])
# Einbettungen abrufen
embeddings = results["representations"][33]
Wichtige Parameter
ESM2-Modelle
| Modell | Parameter | Geschwindigkeit | Qualität |
|---|---|---|---|
| esm2_t6_8M | 8M | Am schnellsten | Schnelles Screening |
| esm2_t12_35M | 35M | Schnell | Gut |
| esm2_t33_650M | 650M | Mittel | Besser |
| esm2_t36_3B | 3B | Langsam | Am besten |
Ausgabeformat
embeddings/
├── embeddings.npy # (N, 1280) Array
├── pll_scores.csv # PLL für jede Sequenz
└── metadata.json # Sequenzinformationen
Beispielausgabe
Erfolgreiche Ausführung
$ modal run modal_esm2_predict_masked.py --input-faa designs.fasta
[INFO] Lade ESM2-650M-Modell...
[INFO] Verarbeite 100 Sequenzen...
[INFO] Berechne Pseudolog-Likelihood...
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
...
Zusammenfassung:
Mittlerer PLL: -0.91
Sequenzen mit PLL > 0: 42/100 (42%)
So sieht eine gute Ausgabe aus:
- PLL_normalized: > 0.0 (natürlicher wirkend)
- Einbettungsform: (N, 1280) für 650M-Modell
- Höherer PLL = natürlichere Sequenz
Entscheidungsbaum
Sollte ich ESM2 verwenden?
│
├─ Was wird benötigt?
│ ├─ Sequenzplausibilitätswert → ESM2 PLL ✓
│ ├─ Einbettungen für Clustering → ESM2 ✓
│ ├─ Vorhersage von Varianteneffekten → ESM2 ✓
│ └─ Strukturvorhersage → ESMFold verwenden
│
├─ Welche Modellgröße?
│ ├─ Schnelles Screening → esm2_t12_35M
│ ├─ Standardnutzung → esm2_t33_650M ✓
│ └─ Beste Qualität → esm2_t36_3B
│
└─ Anwendungsfall?
├─ QC-Filterung → PLL > 0.0 Schwellenwert
├─ Diversitätsanalyse → Mittelwert-gepoolte Einbettungen
└─ Mutationsscanning → Log-Odds pro Position
PLL-Interpretation
| Normalisierter PLL | Interpretation |
|---|---|
| > 0.2 | Sehr natürliche Sequenz |
| 0.0 - 0.2 | Gut, natürlich wirkend |
| -0.5 - 0.0 | Akzeptabel |
| < -0.5 | Möglicherweise unnatürlich |
Typische Leistung
| Kampagnengröße | Zeit (A10G) | Kosten (Modal) | Anmerkungen |
|---|---|---|---|
| 100 Sequenzen | 5-10 Min | ~1 $ | Schnelles Screening |
| 1000 Sequenzen | 30-60 Min | ~5 $ | Standard |
| 5000 Sequenzen | 2-3 Std | ~20 $ | Große Charge |
Durchsatz: ~100-200 Sequenzen/Minute mit 650M-Modell.
Überprüfen
wc -l embeddings/pll_scores.csv # Sollte mit Eingabe + 1 (Kopfzeile) übereinstimmen
Fehlerbehebung
OOM-Fehler: Kleineres Modell verwenden oder Sequenzen bündeln Langsame Verarbeitung: esm2_t12_35M für Geschwindigkeit verwenden Niedrige PLL-Werte: Kann auf ungewöhnliche/designte Sequenzen hindeuten
Fehlerinterpretation
| Fehler | Ursache | Behebung |
|---|---|---|
RuntimeError: CUDA out of memory | Sequenz zu lang oder große Charge | Batch-Größe reduzieren |
KeyError: Darstellung | Falsche Schicht angefordert | Schicht 33 für 650M-Modell verwenden |
ValueError: Sequenz | Ungültige Aminosäure | Auf nicht standardmäßige AS prüfen |
Nächster Schritt: Strukturvorhersage mit chai oder boltz → protein-qc für Filterung.