RFdiffusion使用教程

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快速验证一下安装是否成功。其中contigmapHydra配置的一个子配置,适用于和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的一部分,负责介导胰岛素的多种作用。此外,实验确定了疏水关键相互作用残基Phe59Phe83Phe91,把它们作为结合剂的热点

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

参考

RFdiffusion_Tutorial_meilerlab
RFdiffusion_README

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值