Modèle de Langage Protéique ESM2
Prérequis
| Exigence | Minimum | Recommandé |
|---|---|---|
| Python | 3.8+ | 3.10 |
| PyTorch | 1.10+ | 2.0+ |
| CUDA | 11.0+ | 11.7+ |
| VRAM GPU | 8 Go | 24 Go (A10G) |
| RAM | 16 Go | 32 Go |
Exécution
Première fois ? Consultez le Guide d'installation pour configurer Modal et biomodals.
Option 1 : Modal
cd biomodals
modal run modal_esm2_predict_masked.py \
--input-faa sequences.fasta \
--out-dir embeddings/
GPU : A10G (24 Go) | Time out : 300 s par défaut
Option 2 : API Python (recommandée)
import torch
import esm
# Charger le modèle
model, alphabet = esm.pretrained.esm2_t33_650M_UR50D()
batch_converter = alphabet.get_batch_converter()
model = model.eval().cuda()
# Traiter les séquences
data = [("seq1", "MKTAYIAKQRQISFVK...")]
batch_labels, batch_strs, batch_tokens = batch_converter(data)
with torch.no_grad():
results = model(batch_tokens.cuda(), repr_layers=[33])
# Obtenir les embeddings
embeddings = results["representations"][33]
Paramètres clés
Modèles ESM2
| Modèle | Paramètres | Vitesse | Qualité |
|---|---|---|---|
| esm2_t6_8M | 8M | Très rapide | Criblage rapide |
| esm2_t12_35M | 35M | Rapide | Bonne |
| esm2_t33_650M | 650M | Moyenne | Meilleure |
| esm2_t36_3B | 3B | Lente | Excellente |
Format de sortie
embeddings/
├── embeddings.npy # Tableau (N, 1280)
├── pll_scores.csv # PLL pour chaque séquence
└── metadata.json # Informations sur les séquences
Exemple de résultat
Exécution réussie
$ modal run modal_esm2_predict_masked.py --input-faa designs.fasta
[INFO] Chargement du modèle ESM2-650M...
[INFO] Traitement de 100 séquences...
[INFO] Calcul de la pseudo-log-vraisemblance...
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
...
Résumé :
PLL moyenne : -0.91
Séquences avec PLL > 0 : 42/100 (42 %)
Ce qu'indique un bon résultat :
- PLL_normalisée > 0,0 (séquence plus naturelle)
- Forme des embeddings : (N, 1280) pour le modèle 650M
- Une PLL plus élevée = séquence plus naturelle
Arbre de décision
Dois-je utiliser ESM2 ?
│
├─ De quoi avez-vous besoin ?
│ ├─ Score de plausibilité de séquence → ESM2 PLL ✓
│ ├─ Embeddings pour clustering → ESM2 ✓
│ ├─ Prédiction d'effet de variants → ESM2 ✓
│ └─ Prédiction de structure → Utilisez ESMFold
│
├─ Quelle taille de modèle ?
│ ├─ Criblage rapide → esm2_t12_35M
│ ├─ Usage standard → esm2_t33_650M ✓
│ └─ Meilleure qualité → esm2_t36_3B
│
└─ Cas d'utilisation ?
├─ Filtrage QC → Seuil PLL > 0,0
├─ Analyse de diversité → Embeddings moyennés
└─ Balayage de mutations → Log-odds par position
Interprétation de la PLL
| PLL normalisée | Interprétation |
|---|---|
| > 0,2 | Séquence très naturelle |
| 0,0 - 0,2 | Bonne, semblable au naturel |
| -0,5 - 0,0 | Acceptable |
| < -0,5 | Peut être non naturelle |
Performances typiques
| Taille de campagne | Temps (A10G) | Coût (Modal) | Notes |
|---|---|---|---|
| 100 séquences | 5-10 min | ~1 $ | Criblage rapide |
| 1000 séquences | 30-60 min | ~5 $ | Standard |
| 5000 séquences | 2-3 h | ~20 $ | Gros lot |
Débit : ~100-200 séquences/minute avec le modèle 650M.
Vérification
wc -l embeddings/pll_scores.csv # Doit correspondre à l'entrée + 1 (en-tête)
Dépannage
Erreurs OOM : Utilisez un modèle plus petit ou traitez les séquences par lots Traitement lent : Utilisez esm2_t12_35M pour la vitesse Faibles scores PLL : Peut indiquer des séquences inhabituelles/conçues
Interprétation des erreurs
| Erreur | Cause | Correctif |
|---|---|---|
RuntimeError: CUDA out of memory | Séquence trop longue ou lot trop grand | Réduire la taille du lot |
KeyError: representation | Mauvaise couche demandée | Utiliser la couche 33 pour le modèle 650M |
ValueError: sequence | Acide aminé invalide | Vérifier la présence d'AA non standards |
Suite : Prédiction de structure avec chai ou boltz → protein-qc pour le filtrage.