name: chai description: > 使用Chai-1(一个用于分子结构预测的基础模型)进行结构预测。 在以下情况使用此技能:(1) 预测蛋白质-蛋白质复合物结构,(2) 验证设计的结合剂,(3) 预测蛋白质-配体复合物,(4) 使用Chai API进行高通量预测,(5) 需要AlphaFold2的替代方案。
对于QC阈值,请使用protein-qc。 对于AlphaFold2预测,请使用alphafold。 对于基于ESM的分析,请使用esm。 license: MIT category: design-tools tags: [structure-prediction, validation, foundation-model] biomodals_script: modal_chai1.py
Chai-1 结构预测
前提条件
| 要求 | 最低 | 推荐 |
|---|---|---|
| Python | 3.10+ | 3.11 |
| CUDA | 12.0+ | 12.1+ |
| GPU VRAM | 24GB | 40GB (A100) |
| RAM | 32GB | 64GB |
如何运行
第一次使用? 请参阅安装指南来设置Modal和biomodals。
选项1:Modal
cd biomodals
modal run modal_chai1.py \
--input-faa complex.fasta \
--out-dir predictions/
GPU: A100 (40GB) | 超时: 默认30分钟
选项2:Chai API(推荐)
pip install chai_lab
python -c "
import chai_lab
from chai_lab.chai1 import run_inference
# 运行预测
run_inference(
fasta_file='complex.fasta',
output_dir='predictions/',
num_trunk_recycles=3
)
"
选项3:本地安装
git clone https://github.com/chaidiscovery/chai-lab.git
cd chai-lab
pip install -e .
chai-lab predict \
--fasta complex.fasta \
--output predictions/
FASTA 格式
蛋白质复合物
>binder
MKTAYIAKQRQISFVKSHFSRQLE...
>target
MVLSPADKTNVKAAWGKVGAHAGE...
蛋白质 + 配体
>protein
MKTAYIAKQRQISFVKSHFSRQLE...
>ligand|smiles
CCO
蛋白质 + DNA/RNA
>protein
MKTAYIAKQRQISFVKSHFSRQLE...
>dna
ATCGATCGATCG
关键参数
| 参数 | 默认值 | 范围 | 描述 |
|---|---|---|---|
num_trunk_recycles |
3 | 1-10 | 循环次数(越多越好) |
num_diffn_timesteps |
200 | 50-500 | 扩散步骤 |
seed |
0 | int | 随机种子 |
输出格式
predictions/
├── pred.model_idx_0.cif # 最佳模型(CIF格式)
├── pred.model_idx_1.cif # 第二模型
├── scores.json # 置信度分数
├── pae.npy # PAE矩阵
└── plddt.npy # pLDDT值
注意: Chai-1输出CIF格式。如需转换为PDB格式:
from Bio.PDB import MMCIFParser, PDBIO
parser = MMCIFParser()
structure = parser.get_structure("pred", "pred.model_idx_0.cif")
io = PDBIO()
io.set_structure(structure)
io.save("pred.model_idx_0.pdb")
提取指标
import numpy as np
import json
# 加载分数
with open('predictions/scores.json') as f:
scores = json.load(f)
plddt = np.load('predictions/plddt.npy')
pae = np.load('predictions/pae.npy')
print(f"pLDDT: {plddt.mean():.3f}")
print(f"pTM: {scores['ptm']:.3f}")
print(f"ipTM: {scores.get('iptm', 'N/A')}")
使用案例
结合剂验证
# 使用Chai预测复合物
chai-lab predict --fasta binder_target.fasta --output val/
# 检查 ipTM > 0.5
scores = json.load(open('val/scores.json'))
if scores['iptm'] > 0.5:
print("设计通过验证")
蛋白质-配体复合物
# 包含SMILES的FASTA
fasta = """
>protein
MKTA...
>ligand|smiles
CCO
"""
# Chai可同时处理蛋白质和小分子
批量预测
# 多个序列
for fasta in sequences/*.fasta; do
chai-lab predict \
--fasta "$fasta" \
--output "predictions/$(basename $fasta .fasta)"
done
与AF2的比较
| 方面 | Chai-1 | AlphaFold2 |
|---|---|---|
| 需要MSA | 否 | 是 |
| 小分子 | 是 | 否 |
| DNA/RNA | 是 | 有限 |
| 速度 | 更快 | 较慢 |
| 准确度 | 相当 | 参考标准 |
示例输出
成功运行
$ chai-lab predict --fasta complex.fasta --output predictions/
[INFO] 正在加载Chai-1模型...
[INFO] 正在运行推理...
[INFO] 已将5个模型保存至 predictions/
predictions/scores.json:
{
"ptm": 0.82,
"iptm": 0.71,
"ranking_score": 0.76
}
良好输出的特征:
- pTM: > 0.7(全局结构置信度高)
- ipTM: > 0.5(界面置信度高,> 0.7为高置信度)
- CIF文件具有合理的原子位置
决策树
我应该使用Chai吗?
│
├─ 您要预测什么?
│ ├─ 蛋白质-蛋白质复合物 → Chai ✓ 或 ColabFold
│ ├─ 蛋白质 + 小分子 → Chai ✓
│ ├─ 蛋白质 + DNA/RNA → Chai ✓
│ └─ 仅单个蛋白质 → 使用ESMFold(更快)
│
├─ 需要MSA吗?
│ ├─ 不需要 / 追求速度 → Chai ✓
│ └─ 需要 / 追求准确度 → ColabFold
│
└─ 优先级是什么?
├─ 最高准确度 → 带MSA的ColabFold
├─ 速度 / 无需MSA → Chai ✓
└─ 配体结合 → Chai ✓
典型性能
| 任务规模 | 时间 (A100) | 成本 (Modal) | 备注 |
|---|---|---|---|
| 100个复合物 | 30-60 分钟 | ~$10 | 标准验证 |
| 500个复合物 | 2-4小时 | ~$45 | 大型任务 |
| 1000个复合物 | 5-8小时 | ~$90 | 全面验证 |
每个复合物: 典型的结合剂-靶标复合物约需20-40秒。
验证
find predictions -name "*.cif" | wc -l # 应与输入数量匹配
故障排除
pLDDT过低: 增加 num_trunk_recycles ipTM过低: 检查链顺序、界面区域 内存不足错误: 使用A100-80GB或减少批次 预测速度慢: 减少 num_diffn_timesteps
错误解读
| 错误 | 原因 | 解决方法 |
|---|---|---|
RuntimeError: CUDA out of memory |
复合物过大 | 使用A100-80GB或拆分预测 |
KeyError: 'iptm' |
预测了单链 | 确保FASTA包含多条链 |
ValueError: invalid SMILES |
配体格式错误 | 使用RDKit验证SMILES |
torch.cuda.OutOfMemoryError |
GPU内存耗尽 | 将 num_diffn_timesteps 减少到100 |
下一步: 使用 protein-qc 进行筛选和排序。