目录
RFdiffusion
是用于蛋白质结构生成的一款AI程序,由来自华盛顿大学医学院、哥伦比亚大学和麻省理工学院的计算生物学家团队开发。RFdiffusion
在多个问题上都优于现有的蛋白质设计方法,包括拓扑约束的单体设计、蛋白结合剂(binder)设计、对称寡聚物设计、酶活性位点支架设计、对称基序设计等。
RFdiffudion
可以通过在线平台 ColabFold 访问。源码可以通过 github仓库 下载。
注意:RFdiffusion
是蛋白结构骨架生成模型,不能用这些骨架生成序列。可以使用ProteinMPNN
生成骨架的氨基酸序列。此外还需要结构预测方法(如AlphaFold2
)来验证生成序列是否能正确折叠。
1. 安装
1)安装&配置
首先,下载代码和权重文件/模型。
# 克隆代码库
git clone https://github.com/RosettaCommons/RFdiffusion.git
# 下载权重文件
cd RFdiffusion
mkdir models && cd models
wget http://files.ipd.uw.edu/pub/RFdiffusion/6f5902ac237024bdd0c176cb93063dc4/Base_ckpt.pt
wget http://files.ipd.uw.edu/pub/RFdiffusion/e29311f6f1bf1af907f9ef9f44b8328b/Complex_base_ckpt.pt
wget http://files.ipd.uw.edu/pub/RFdiffusion/60f09a193fb5e5ccdc4980417708dbab/Complex_Fold_base_ckpt.pt
wget http://files.ipd.uw.edu/pub/RFdiffusion/74f51cfb8b440f50d70878e05361d8f0/InpaintSeq_ckpt.pt
wget http://files.ipd.uw.edu/pub/RFdiffusion/76d00716416567174cdb7ca96e208296/InpaintSeq_Fold_ckpt.pt
wget http://files.ipd.uw.edu/pub/RFdiffusion/5532d2e1f3a4738decd58b19d633b3c3/ActiveSite_ckpt.pt
wget http://files.ipd.uw.edu/pub/RFdiffusion/12fc204edeae5b57713c5ad7dcb97d39/Base_epoch8_ckpt.pt
##可选
wget http://files.ipd.uw.edu/pub/RFdiffusion/f572d396fae9206628714fb2ce00f72e/Complex_beta_ckpt.pt
##原始结构预测权重
wget http://files.ipd.uw.edu/pub/RFdiffusion/1befcb9b28e2f778f53d47f18b7597fa/RF_structure_prediction_weights.pt
然后,使用conda
配置环境。
# 安装 SE(3)-Transformers 的 NVIDIA 实现
conda env create -f env/SE3nv.yml
# 安装依赖
conda activate SE3nv
cd env/SE3Transformer
pip install --no-cache-dir -r requirements.txt
python setup.py install
cd ../..
pip install -e .
注:由于用户使用的 GPU 类型和驱动程序各不相同,无法制作一个可在所有设置上运行的环境。因此,只提供一个支持 CUDA 11.1 的 yml 文件,让用户根据自己的设置进行自定义。这种定制涉及更改 yml 文件中指定的 cudatoolkit 和(可能)PyTorch 版本。
最后,运行scripts/run_inference.py
快速验证一下安装是否成功。其中contigmap
是Hydra配置的一个子配置,适用于和contig字符串(定义了将被构建的蛋白质)相关的内容。具体可查看配置文件:configs/inference/base.yml
。配置内容都可以通过命令行重写。
#解压示例文件
#tar -xvf examples/ppi_scaffolds_subset.tar.gz -C examples/
#
mkdir out_test
./scripts/run_inference.py \
'contigmap.contigs=[150-150]' \
inference.output_prefix=out_test/test \
inference.num_designs=10
注:首次运行时,需要一些时间计算 IGSO3(扩散模型)。然后模型将被缓存起来供以后使用,因此只需运行一次。
2)模型
由于希望扩散能做所有事情,因此不存在一个万能模型。例如想进行二级结构调整,就需要使用与不进行二级结构调整时不同的模型。后台默认会处理大部分此类问题–解析输入,并找出最合适的检查点,这就是配置设置的作用。
推理时使用的精确模型检查点包含了训练时使用的所有参数,因此只需在配置文件中填入这些值,推理就能按设计运行。
如果想指定一个不同的检查点(例如训练了一个新模型,需要对其进行测试),只需确保它与用例相匹配。例如试图给一个没有训练过二级结构特征的模型赋予二级结构特征,模型就会崩溃。
模型 | 适用场景 |
---|---|
Base_ckpt.pt | 默认 |
Complex_beta_ckpt.pt | 产生更多样化的拓扑结构,base 偏向生成α螺旋 |
ActiveSite_ckpt.pt | 小基序(如酶活性位点)的支架生成 |
2. 用例
1)Unconditional monomer
目标:从头创建一个无约束的新蛋白质。蛋白质长度为150个氨基酸。
cd out_monomer
~/software/RFdiffusion/scripts/run_inference.py \
'contigmap.contigs=[150-150]' \ #指定蛋白长度为150aa
inference.output_prefix=./mono_gen \ #path/to/output/prefix, 输出目录必需已提前创建
inference.num_design=5 #生成骨架数量
输出文件
脚本完成后,输出文件夹包含以下3类文件:
- *.pdb:以PDB格式存储的生成骨架;
- *.trb:与特定run相关的所有元数据,包括所有输入选项;
- traj/:文件夹包含了所有trajectory文件,即多步骤 pdbs,显示了整个去噪过程的运行情况;
- pX0:每个时间步结束时的预测模型;
- Xt-1:每个时间步输入的扩散模型结构;
可以使用PyMOL
查看生成的结构。
2)Binder design
目标:为靶标生成新结合剂。其中靶标(insulin_target.pdb
)是RTK的一部分,负责介导胰岛素的多种作用。此外,实验确定了疏水关键相互作用残基Phe59
、Phe83
和Phe91
,把它们作为结合剂的热点。
cd out_binder
mkdir -p base beta
~/software/RFdiffusion/scripts/run_inference.py \
inference.input_pdb=/path/to/insulin_target.pdb \ #蛋白靶标
inference.deterministic=True \ #使后续的研究结果具有可重复性
'contigmap.contigs=[A1-150/0 50-80]' \ #①指定靶标的固定部分:A1-150/0(/0表示链断裂);②粘合剂长度:50-80;
'ppi.hotspot_res=[A59,A83,A91]' \ #指定界面区域的热点,即热点残基的链ID和位置。
inference.num_designs=2 \ #生成2个设计
inference.output_prefix=./base/binder_base #输出到base目录
由于扩散需要大量计算,建议在所需界面位置周围裁剪靶标蛋白。然而,裁剪可能会暴露出之前被埋藏的疏水核心残基,进而可能误导结合剂进入这些新暴露的区域,而不是靶标表面的预期互作位点。为了解决这个问题,建议定义热点,使扩散过程偏向于这些残基。
PyMOL
可视化结果显示生成的2个模型看起来无法与靶标正确结合,也无法正确覆盖热点。而且,它们都只是长螺旋,这是因为默认模型
生成的大多是螺旋结合剂。
尽管螺旋蛋白通常有较高的成功率,在某些情况下也可能需要其它类型的拓扑结构。因此开发者提供了一个beta模型
,它可以生成更多样化的拓扑结构,但尚未经过广泛的实验验证。可以通过参数inference.ckpt_override_path
修改模型路径。
# 目录models/下包含多个适用于各种任务的模型
~/software/RFdiffusion/scripts/run_inference.py \
inference.input_pdb=/path/to/insulin_target.pdb \
inference.deterministic=True \
'contigmap.contigs=[A1-150/0 50-80]' \
'ppi.hotspot_res=[A59,A83,A91]' \
inference.num_designs=2 \
inference.output_prefix=./beta/binder_beta \
inference.ckpt_override_path=~/software/RFdiffusion/models/Complex_beta_ckpt.pt
注:在实际应用中,决定使用哪个模型非常重要。此外,通常生成的模型远不止两个。通常会对成千上万的骨架进行属性检查和筛选,以确定最佳粘合剂。
binder实际设计中考虑因素
选择靶点
候选结合靶点:应有 >~3 个疏水残基供结合剂相互作用。
结合困难的靶点:带电极性位点。靠近糖类的位点。非结构化环?
截短靶蛋白
截短靶蛋白可以避免不必要的计算成本。截短靶标是一门艺术。对于某些靶标,自然截断点是两个结构域通过柔性连接子连接的地方。而其他蛋白质的截断点就不太明显。一般来说,保留二级结构并尽可能少地引入断链。应尽量在目标靶点两侧各保留 ~10A 的靶标蛋白。建议使用 PyMol 来截短靶标蛋白质。
选择热点
热点是RFdiffusion
集成到模型中的一项功能,用于控制结合剂与靶标互作的位点。原始论文将热点定义为靶标蛋白质上与结合剂距离在 10A Cbeta 范围内的残基。在靶标蛋白上鉴定出的所有热点中,有 0-20% 的热点被实际提供给模型,其余的则被屏蔽。这对于理解在推理时如何选择热点非常重要;模型预计的接触比指定的要多。通常建议选择 3-6 个热点,在生成数千个设计之前,应先进行几次试运行,以确保指定的热点数量能产生预期结果。
结合剂设计规模
原始论文为每个靶标生成了 ~10,000 个骨架。然后,使用 ProteinMPNN-FastRelax 为每个骨架生成两个序列。使用 AF2 筛选了 ~20,000 个设计,并进行了初步猜测和靶标模板化。
鉴于在论文中观察到的高成功率,对于某些靶标,在一次设计中只生成 ~1,000 个骨架可能就足够了。需要获得足够多的、pAE_interaction<10 的设计进行后续合成。
结合剂的序列设计
原始论文中使用ProteinMPNN-FastRelax
进行序列设计,建议用户也这样做。虽然没有发现FastRelax
能像RifDock
生成的对接那样大幅提高计算成功率,但它仍然是增加每个骨架序列命中次数的好方法。如果不使用FastRelax
,直接在结合剂上运行ProteinMPNN
也行得通,但计算成本会更高。
结合剂设计过滤
结合剂设计流程最重要的一部分是过滤步骤,用于评估结合剂是否能被预测有效。原论文中使用带有初始猜测和目标模板的AlphaFold2
进行过滤。结果发现在 pae_interaction < 10 时进行过滤,可以很好地预测结合剂是否能在实验中发挥作用。
3)Loop remodeling
目标:改进/重塑上述用例中最佳粘合剂binder_beta_0.pdb
的一个靠近界面的环,该环可能是相互作用的重要组成部分。该环包括A链残基63-69,用长度为6-12的环重塑该区域。
cd out_remodeling
~/software/RFdiffusion/scripts/run_inference.py \
inference.input_pdb=/path/to/binder_beta_0.pdb \
'contigmap.contigs=[A1-62/6-12/A70-77/0 B78-227]' \ #①保留该区域之前(A1-62)和之后(A70-77)的所有残基。②添加断链(/0)和目标蛋白质(B78-227)。
inference.output_prefix=./remodel_loop \
inference.num_designs=5
输出结果如下图所示,可以看到甘氨酸链内的一个新部分(“-”标记的网络新扩散/新生成的所有位置)。
可以通过PyMOL
可视化骨架之间的差异。
4)Motif scaffolding
目标:从8U08.pdb
中提取与抗体10E8互作的HIV包膜蛋白的MPER区域,并为该区域设计一种表位支架,使其在结合构象中稳定。
重要参数:通过contigs
指定输入。①以字母为前缀的内容表示这是一个motif,字母对应于输入pdb中的链字母。②没有字母前缀的内容表示要构建的蛋白。可以将长度范围作为输入,每次迭代会从该范围随机采样。③使用 /0 指定断链。
cd out_scaffold
##在motif(pdb中C链96-107片段)的N端建立39个残基片段,在C端建立范围在20-50的随机长度的残基片段。
##空格用于在输入中添加一个大的残留跳跃(200aa),这样模型就会认为第一条链与第二条链是分开的。
##用"H1-131/0 L2-119/0"消除10E8抗体重链和轻链的Fv片段
~/software/RFdiffusion/scripts/run_inference.py \
inference.input_pdb=/path/to/8U0B.pdb \
'contigmap.contigs=[39-39/C96-107/20-50/0 H1-131/0 L2-119/0]' \
inference.output_prefix=./out_scaffold/scaffold \
inference.num_designs=2
5)Partial diffusion
目标:对结构进行部分噪声和去噪,以获得一般折叠的多样性。
重要参数:①diffuser.parial_T
指定噪声。diffuser.T
默认为50,相当于80个噪声步长,即diffuser.partial_T=20
。建议取不同的值,以便找到最佳参数。②由于是对已知结构进行扩散,这会导致某些限制。可以使用contig输入,但必须生成与输入蛋白长度完全相同的contig字符串。③contigmap.provide_seq
提供一个范围,保持范围内部分固定。
cd out_partialdiffusion
# example1. 对起始结构进行部分噪声和去噪处理,以产生折叠结构的多样性。
../scripts/run_inference.py \
inference.output_prefix=pd \
inference.input_pdb=2KL8.pdb \ #输入pdb包含79aa
'contigmap.contigs=[79-79]' \ #对整个结构进行噪声处理[79-79];[A1-19/59]仅处理后59个残基;无论哪种情景,contig长度必须与输入pdb长度加和?
inference.num_designs=10 \ #对10个步骤(整个轨迹的20%)进行噪声和去噪处理
diffuser.partial_T=10
# example2. 为靶肽生成binder,在binder结构周围添加噪声。
../scripts/run_inference.py \
inference.output_prefix=pd_pepWithSeq \
inference.input_pdb=pep_complex_ideal_helix.pdb \ #输入pdb
'contigmap.contigs=["172-172/0 34-34"]' \ #支架长172aa;肽长34aa;
'contigmap.provide_seq=[172-205]' #多肽序列,0-indexed
diffuser.partial_T=10 \ #噪声增加10步
inference.num_designs=10 \
6)Fold conditioning
原理:根据特定拓扑结构进行结合剂设计(或单体生成)是一种有效的方法。这可以通过向经过训练的模型提供二级结构和区块邻接信息来实现。
输入:使用 helper_scripts/make_secstruc_adj.py
处理 pdb 文件,并输出二级结构和邻接 pytorch 文件,作为模型输入。如果正在进行PPI,还应为靶标蛋白生成这些文件,并将其提供给模型。
重要参数:
#
./make_secstruc_adj.py --input_pdb ./2KL8.pdb --out_dir /path/to/adj_secstruct
./scripts/run_inference.py \
inference.output_prefix=./test \
scaffoldguided.scaffoldguided=True \
scaffoldguided.target_pdb=False \
scaffoldguided.scaffold_dir=./examples/ppi_scaffolds_subset
#scaffoldguided.target_pdb=True \
#scaffoldguided.target_path=input_pdbs/insulin_target.pdb \
#inference.output_prefix=insulin_binder/jordi_ss_insulin_noise0_job0 \
#'ppi.hotspot_res=[A59,A83,A91]' \
#scaffoldguided.target_ss=target_folds/insulin_target_ss.pt \
#scaffoldguided.target_adj=target_folds/insulin_target_adj.pt
7)symmetric oligomer design
原理:对称低聚物设计是通过在 t=T 时对称采样噪声,并在每个时间步对称输入来实现的。
重要参数:由于对称扩散与上文描述的扩散有很大不同,因此软件将与对称相关的配置打包到一个新文件configs/inference/symmetry.yml
中,指定该配置后(--config-name symmetry
),扩散就会进入对称模式。
./scripts/run_inference.py \
--config-name symmetry \ #指定配置文件
inference.symmetry=tetrahedral \ #指定四面体对称,目前已经实现的还有环状对称和二面体对称
'contigmap.contigs=[360]' \ #寡聚体的总长度,因此必须能被 n 条链整除
inference.output_prefix=test_sample/tetrahedral \
inference.num_designs=1