Philip Bradly等2022年7月在bioRxiv上发表《Peptide binding specificity prediction using fine-tuned protein structure prediction networks》。文章指出,深度神经网络已经实现了很高结构的预测精度,最成功的案例是AlphaFold2。但是,实际使用中会发现AF2预测MHC~抗原肽之间结合的特异性和准确度不高,极有可能是因为AF2的训练集的建立并未考虑阴性样本。由此,作者介绍了一种扩展这种网络以联合预测蛋白质结构和结合特异性的方法。一方面修改成熟的AF原生代码,另一方面根据MHC I类和II类结构和多肽结合数据微调其参数。微调(fine-tuning)模型在多肽-MHC结合特异性预测方面较为优秀,并可以推广到其他肽结合系统,如PDZ和SH3结构域。
目前,尽管文章尚未正式发表,但是项目代码已在GitHub释出。值得注意的是:“This repository is still under development. We plan to have everything squared away prior to publication. In the meantime, feel free to reach out with questions, comments, or other feedback. You can open a github issue or email pbradley@fredhutch.org.”本文旨在记录复现相关数据的历程。
为了解决「模型能否确定其预测中可能可靠的部分」的问题,研究人员在 AlphaFold 网络的基础上引入了两个信任度量:
第一个度量是 pLDDT(预测的 lDDT-Cα),它是在 0 -100范围内对局部置信度的每个残基的度量。pLDDT可以沿着一条链显著变化,使得模型能够表达结构域的高置信度,但在结构域之间的连接子(linker)上置信度低。研究人员提出了一些证据,证明低 pLDDT 的区域可能是孤立的非结构。pLDDT<50 的区域不应被解释,或者被解释为「可能的无序预测」。
第二个度量是 PAE(预测对齐误差),当预测和真实结构在残基y上对齐时,它报告AlphaFold在残基x处的预期位置误差。这对于评估对全局特征(尤其是域包装)的信心很有用。对于来自两个不同结构域的残基x和y,在(x,y)处始终较低的PAE表明α折叠对相对结构域位置更可信;在(x,y)处始终较高的PAE表明不应解释域的相对位置。用于生成PAE的一般方法,同样适用于预测各种基于叠加的度量,包括 TM-score 和 GDT。
1.准备工作
1.1.Linux服务器:由于项目关键包optax及其依赖包只支持Linux系统,所以我选择借助Linux服务器完成后面的运行工作。(配置待公布)。
1.2.代码及文件资源下载:
除了Github代码文件外,还需移步下载训练集和测试集(https://www.dropbox.com/s/k4gay3hwyq3k0rb/datasets_alphafold_finetune_v1_2022-08-02.tgz?dl=0;或http://123.121.7.172:10003/d/datasets_alphafold_finetune_v1_2022-08-02.tgz),并且根据作者的指示将下载的文件解压到alphafold_finetune/处:
```
tar -xzvf datasets_alphafold_finetune_v1_2022-08-02.tgz
```
如果是成功在alphafold_finetune/下生成包含4个文件(文件夹)的名为datasets_alphafold_finetune的子文件夹时,说明成功。另外,后续运行会报错
```
FileNotFoundError: [Errno 2] No such file or directory: '/home/pbradley/csdat/alphafold/data/params/params_model_2_ptm.npz'
```
这是因为目前GitHub中没有提供默认的AF2相关资料(已向原作者反馈),在/home下新建一个名为params/的子文件夹后,我们还需要直接在Linux服务器上输入
```
wget https://storage.googleapis.com/alphafold/alphafold_params_2022-03-02.tar
tar --extract --verbose --file=./alphafold_params_2022-03-02.tar --directory="./params/" --preserve-permissions
```
以下载并解压相关资源(一共16个文件)。注意:为了避免不必要的麻烦,可以选择将解压后的文件拷贝一份,一个放在/home/pbradley/csdat/alphafold/data/params/下,另一个放在/home/alphafold_finetune/alphafold/data/params/下。
最后是依赖列表的缺失(已有人建议提供),需要移步至AF处下载requirements.txt文件,为了起到提醒作用,我将文件名改为requirements_af2.txt。
将以上文件按要求整理到服务器/home/alphafold_finetune/等处,上传方法可参考https://www.cnblogs.com/marvin-wen/p/13064815.html。整理好后如下:
1.3.服务器环境配置:
这一部分主要请提供服务器的同学安装(感激!这篇稿子也是他力推我写的),存留的文件如下仅供参考:
CUDA安装可参考https://blog.csdn.net/xiaopang_love_study/article/details/116661915;
Conda安装使用可以参考https://www.jianshu.com/p/4e5c1ff7c784;https://zhuanlan.zhihu.com/p/84568790和https://zhuanlan.zhihu.com/p/489499097。
1.4.依赖包配置:
```
cd /home/alphafold_finetune/ #更改工作目录
conda create -n test python=3.7 #创建名为test的虚拟环境,py版本至少为3.7
conda activate test #激活环境
pip3 install -r requirements_af2.txt -i https://pypi.tuna.tsinghua.edu.cn/simple #根据依赖列表批量配置包
pip list #查看安装的包及其版本,此时直接运行finetune的命令会持续报错,因为尚且缺少必要的包,于是接下来继续安装
pip install optax==0.1.3 #此时运行finetune的命令会被告知jax与jaxlib版本不合
pip install -U jaxlib==0.3.14+cuda11.cudnn82 -f https://storage.googleapis.com/jax-releases/jax_cuda_releases.html #jaxlib需要下载GPU/TPU版本的(参考https://github.com/google/jax/discussions/10323)。但是如果此时运行代码,会出现AttributeError: module 'jaxlib.xla_extension' has no attribute 'CpuDevice'报错,实际上仍然是jax~jaxlib包版本选择问题,接下来进行处理。
pip install chex --upgrade #方法参考https://github.com/google/jax/issues/10331
pip install torch==1.13.0 -i https://pypi.tuna.tsinghua.edu.cn/simple #继续补充包
#此时运行finetune命令会提示AttributeError: module 'jax.ops' has no attribute 'index_add',有人指出这是由于jax包版本过新所致(保持平静)。
pip install jax==0.2.19
pip install -U jaxlib==0.1.69+cuda111 -f https://storage.googleapis.com/jax-releases/jax_cuda_releases.html #此处感谢wangy9711指路。
#新报错:AttributeError: module 'jax.random' has no attribute 'KeyArray',有人指出是chex版本不适配,于是:
pip3 install chex==0.1.2
#新报错:AttributeError: module 'jaxlib.xla_extension' has no attribute 'CompiledFunction',原因不详,但是降低dm-haiku版本后不再出现(参考了wang9711的信息)。
pip install dm-haiku==0.0.5
#新报错:OSError: /root/anaconda3/envs/finetune/lib/python3.7/site-packages/torch/lib/../../nvidia/cublas/lib/libcublas.so.11: undefined symbol: cublasLtGetStatusString, version libcublasLt.so.11,有人认为可能是pytorch的版本与cuda不合,因此需要移步pytorch官网找到安装cuda对应版本的pytorch下载。
pip install torch==1.12.1+cu113 torchvision==0.13.1+cu113 torchaudio==0.12.1 --extra-index-url https://download.pytorch.org/whl/cu113
```
#运行命令:python run_finetuning.py \
--binder_intercepts 0.80367635 --binder_intercepts 0.43373787 \
--freeze_binder \
--train_dataset examples/tiny_pmhc_finetune/tiny_example_train.tsv \
--valid_dataset examples/tiny_pmhc_finetune/tiny_example_valid.tsv > log.out 2>&1 &
#其中> log.out 2>&1 &后缀表示将日志文件保存到当前工作目录的log.out文件中,最后的&要求脚本在后台运行
#查看日志文件的更新情况:
tail -f /home/alphafold_finetune/log.out
```
到目前为止,再运行GitHub主页给出的测试代码已经可以运行。如果被告知:
```
RuntimeError: Resource exhausted: Out of memory while trying to allocate 3251417472 bytes.
```
即内存空间不够。
```
nvidia-smi #查看GPU使用情况
```