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 (더 자연스러운 서열)
- 임베딩 shape: (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로 필터링.