ESM2タンパク質言語モデル は何をしますか?
前提条件
| 要件 | 最小 | 推奨 |
|---|---|---|
| Python | 3.8+ | 3.10 |
| PyTorch | 1.10+ | 2.0+ |
| CUDA | 11.0+ | 11.7+ |
| GPU VRAM | 8GB | 24GB (A10G) |
| RAM | 16GB | 32GB |
実行方法
初めてですか? Modalとbiomodalsのセットアップ方法についてはインストールガイドを参照してください。
オプション1: Modal
cd biomodals
modal run modal_esm2_predict_masked.py \
--input-faa sequences.fasta \
--out-dir embeddings/
GPU: A10G (24GB) | タイムアウト: デフォルト300秒
オプション2: Python API(推奨)
import torch
import esm
# モデルのロード
model, alphabet = esm.pretrained.esm2_t33_650M_UR50D()
batch_converter = alphabet.get_batch_converter()
model = model.eval().cuda()
# 配列の処理
data = [("seq1", "MKTAYIAKQRQISFVK...")]
batch_labels, batch_strs, batch_tokens = batch_converter(data)
with torch.no_grad():
results = model(batch_tokens.cuda(), repr_layers=[33])
# 埋め込みの取得
embeddings = results["representations"][33]
主なパラメータ
ESM2モデル
| モデル | パラメータ数 | 速度 | 品質 |
|---|---|---|---|
| esm2_t6_8M | 8M | 最速 | 高速スクリーニング用 |
| esm2_t12_35M | 35M | 速い | 良好 |
| esm2_t33_650M | 650M | 中程度 | より良い |
| esm2_t36_3B | 3B | 遅い | 最良 |
出力形式
embeddings/
├── embeddings.npy # (N, 1280) 配列
├── pll_scores.csv # 各配列のPLL
└── metadata.json # 配列情報
出力例
正常な実行
$ modal run modal_esm2_predict_masked.py --input-faa designs.fasta
[INFO] ESM2-650Mモデルをロード中...
[INFO] 100配列を処理中...
[INFO] 擬似対数尤度を計算中...
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
...
サマリー:
平均PLL: -0.91
PLL > 0 の配列: 42/100 (42%)
良い出力の目安:
- PLL_normalized: > 0.0(より自然な配列)
- 埋め込み形状: (N, 1280)(650Mモデルの場合)
- PLLが高いほど自然な配列
決定木
ESM2を使うべきか?
│
├─ 何が必要か?
│ ├─ 配列の妥当性スコア → ESM2 PLL ✓
│ ├─ クラスタリング用埋め込み → ESM2 ✓
│ ├─ 変異影響予測 → ESM2 ✓
│ └─ 構造予測 → ESMFoldを使用
│
├─ どのモデルサイズ?
│ ├─ 高速スクリーニング → esm2_t12_35M
│ ├─ 標準的使用 → esm2_t33_650M ✓
│ └─ 最高品質 → esm2_t36_3B
│
└─ 使用用途?
├─ QCフィルタリング → PLL > 0.0 しきい値
├─ 多様性解析 → 平均プール埋め込み
└─ 変異スキャン → 位置ごとの対数オッズ
PLLの解釈
| 正規化PLL | 解釈 |
|---|---|
| > 0.2 | 非常に自然な配列 |
| 0.0 - 0.2 | 良好、自然に近い |
| -0.5 - 0.0 | 許容範囲 |
| < -0.5 | 人工的である可能性 |
標準的なパフォーマンス
| キャンペーンサイズ | 所要時間(A10G) | コスト(Modal) | 備考 |
|---|---|---|---|
| 100配列 | 5-10分 | 約$1 | 迅速なスクリーニング |
| 1000配列 | 30-60分 | 約$5 | 標準 |
| 5000配列 | 2-3時間 | 約$20 | 大規模バッチ |
スループット: 650Mモデルで約100-200配列/分
確認
wc -l embeddings/pll_scores.csv # 入力 + 1(ヘッダー)と一致する必要があります
トラブルシューティング
OOMエラー: より小さなモデルを使用するか、バッチを分割する 処理が遅い: 速度重視の場合はesm2_t12_35Mを使用する PLLスコアが低い: 異常な配列や人工的な配列の可能性を示唆
エラー解釈
| エラー | 原因 | 修正方法 |
|---|---|---|
RuntimeError: CUDA out of memory | 配列が長すぎる、またはバッチサイズが大きい | バッチサイズを減らす |
KeyError: representation | 誤った層が指定された | 650Mモデルでは層33を使用 |
ValueError: sequence | 無効なアミノ酸 | 非標準のアミノ酸がないか確認 |
次へ: chaiまたはboltzによる構造予測 → protein-qcでフィルタリング