# FastFold ## 论文 - [https://arxiv.org/abs/2203.00854](https://arxiv.org/abs/2203.00854) ## 模型结构 模型基于Transformer架构,主要结构包括Evofomer(48 blocks)和Struture module(8 blocks)两个模块。 ![img](./docs/alphafold2.png) ## 算法原理 FastFold通过搜索同源序列和模板进行特征构造,基于蛋白质结构预测模型,进行推理的性能优化,预测蛋白质的结构。 ![img](./docs/alphafold2_1.png) ## 环境配置 提供[光源](https://www.sourcefind.cn/#/service-details)拉取推理的docker镜像: ``` docker pull image.sourcefind.cn:5000/dcu/admin/base/custom:fastfold-torch2.1.0-dtk24.04-centos7.6 # 用上面拉取docker镜像的ID替换 # 主机端路径 # 容器映射路径 docker run -it -d --name fastfold --device=/dev/kfd --privileged --network=host --device=/dev/dri --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -v /opt/hyhal:/opt/hyhal:ro -v /usr/local/hyhal:/usr/local/hyhal:ro --group-add video --shm-size 32G -v : ``` 镜像版本依赖: * DTK驱动:dtk24.04 * Pytorch: 2.1.0 * fastfold: 0.2.1 * python: python3.10 激活镜像环境: `source /home/env.sh` 单体测试目录: `/home/fastfold_pytorch` ## 数据集 推荐使用AlphaFold2中的开源数据集,包括BFD、MGnify、PDB70、Uniclust、Uniref90等,数据集大小约3TB。数据集格式如下: ``` $DOWNLOAD_DIR/ bfd/ bfd_metaclust_clu_complete_id30_c90_final_seq.sorted_opt_hhm.ffindex bfd_metaclust_clu_complete_id30_c90_final_seq.sorted_opt_hhm.ffdata bfd_metaclust_clu_complete_id30_c90_final_seq.sorted_opt_cs219.ffindex ... mgnify/ mgy_clusters_2018_12.fa params/ params_model_1.npz params_model_2.npz params_model_3.npz ... pdb70/ pdb_filter.dat pdb70_hhm.ffindex pdb70_hhm.ffdata ... pdb_mmcif/ mmcif_files/ 100d.cif 101d.cif 101m.cif ... obsolete.dat pdb_seqres/ pdb_seqres.txt small_bfd/ bfd-first_non_consensus_sequences.fasta uniclust30/ uniclust30_2018_08/ uniclust30_2018_08_md5sum uniclust30_2018_08_hhm_db.index uniclust30_2018_08_hhm_db ... uniprot/ uniprot.fasta uniref90/ uniref90.fasta ``` 我们提供了一个脚本download_all_data.sh用于下载使用的数据集和模型文件: ./scripts/download_all_data.sh 数据集下载目录 ## 推理 我们分别提供了基于Pytorch的单体和多体的推理脚本。 ### 单体 python inference.py T1024.fasta /data/pdb_mmcif/mmcif_files/ \ --output_dir ./output \ --gpus 4 \ --use_precomputed_alignments data/alignments/ \ --param_path /data/params/params_model_1.npz \ --uniref90_database_path /data/uniref90/uniref90.fasta \ --mgnify_database_path /data/mgnify/mgy_clusters_2018_12.fa \ --pdb70_database_path /data/pdb70/pdb70 \ --uniclust30_database_path /data/uniclust30/uniclust30_2018_08/uniclust30_2018_08 \ --bfd_database_path /data/bfd/bfd_metaclust_clu_complete_id30_c90_final_seq.sorted_opt \ --jackhmmer_binary_path `which jackhmmer` \ --hhblits_binary_path `which hhblits` \ --hhsearch_binary_path `which hhsearch` \ --kalign_binary_path `which kalign` \ --chunk_size 4 \ --inplace 或者使用`sh inference.sh` #### 单体推理参数说明 T1024.fasta为推理的单体序列;data修改为数据集下载目录; `--output_dir`为输出目录;`--gpus`为使用的gpu数量;`--use_precomputed_alignments`为搜索对齐目录,可以加载已经搜索对齐的序列,若不添加则进行搜索对齐; `--param_path`为加载单体模型路径,需要和`--model_name`保持一致,默认为model_1;`--chunk_size`为分块数量,设置为4,并且使用`--inplace`来降低显存占用; 默认不进行relax操作,若需要,添加`--relaxation`;默认不保存输出的.pkl文件,若需要,添加`--save_outputs`。 如果bfd数据集过大只能下载small_bfd数据集,请指定`--bfd_database_path`为small_bfd路径并且添加参数`--preset reduced_dbs`。 如果没有数据集、无法下载数据集、想进行快速测试,可使用`data/pkl/`下的对应pkl文件进行测试,将`inference.py`改为`inference_use_pkl.py`,此时不再需要alphafold数据集路径。 Alphafold的数据预处理需要花费大量时间,因此我们通过[ray](https://docs.ray.io/en/latest/workflows/concepts.html)加快了数据预处理工作流程。 要使用ray工作流运行推理,应将参数--enable_workflow添加到cmdline或`./inference.sh`脚本中。 ### 多体 本项目因为多体测试要进行序列搜索,昆山节点CPU在这项工作上非常耗时,所以没有提供对应的`alignments`以及内置`params_model_1_multimer.npz`,但经过测试确认能正常运行。 若您想要进行多体测试,请挂载AF2数据集目录至/data,例如在创建容器时添加`-v /public/DL_DATA/AI/alphaflod:/data:ro`。 python3 inference.py SUGP1.fasta /data/pdb_mmcif/mmcif_files \ --output_dir ./output \ --gpus 2 \ --model_preset multimer \ --uniref90_database_path /data/uniref90/uniref90.fasta \ --mgnify_database_path /data/mgnify/mgy_clusters_2018_12.fa \ --pdb70_database_path /data/pdb70/pdb70 \ --uniclust30_database_path /data/uniclust30/uniclust30_2018_08/uniclust30_2018_08 \ --bfd_database_path /data/bfd/bfd_metaclust_clu_complete_id30_c90_final_seq.sorted_opt \ --uniprot_database_path /data/uniprot/uniprot_sprot.fasta \ --pdb_seqres_database_path /data/pdb_seqres/pdb_seqres.txt \ --param_path /data/params/params_model_1_multimer.npz \ --model_name model_1_multimer \ --jackhmmer_binary_path `which jackhmmer` \ --hhblits_binary_path `which hhblits` \ --hhsearch_binary_path `which hhsearch` \ --kalign_binary_path `which kalign` \ --chunk_size 4 \ --inplace \ 或者使用`sh inference_multimer.sh`,请根据实际情况修改数据集路径。 #### 多体推理参数说明 SUGP1.fasta为推理的多体序列;`--param_path`为加载多体模型路径,需要和`--model_name`保持一致。 注意您运行多体测试时,如果挂载的AF2数据集如果没有`bfd`而是`small_bfd`,请删除`--bfd_database_path /data/bfd/bfd_metaclust_clu_complete_id30_c90_final_seq.sorted_opt`;如果提示您没有`/data/uniprot/uniprot_sprot.fasta`,请将`uniprot_sprot.fasta`换成您数据目录下有的`uniprot_*.fasta`,例如`/data/uniprot/uniprot_trembl.fasta`。 运行后您会发现卡在`running in multimer mode...`并且没有使用DCU,这是正常的,因为要使用CPU进行序列搜索一段时间,以本项目的多体测试为例,序列搜索结束后会输出`Finished running alignment for sp_Q8IWZ8_SUGP1_HUMAN_SURP_and_G-patch_domain-containing_protein_1_OS_Homo_sapiens_OX_9606_GN_SUGP1_PE_1-SV_2_188_242`信息,然后会卡在这个输出信息,无法使用DCU加速,这是正常现象,因为正在进行更加耗时的CPU操作,具体耗时与您的CPU型号有关。 ## result `--output_dir`目录结构如下: ``` alignments/ / bfd_uniclust_hits.a3m mgnify_hits.sto uniref90_hits.sto ... {target_name}_{model_name}_output_dict.pkl {target_name}_{model_name}_unrelaxed.pdb {target_name}_{model_name}_relaxed.pdb ``` [查看蛋白质3D结构](https://www.pdbus.org/3d-view)
Image
红色为真实结构,蓝色为预测结构
## 精度 测试数据:[casp14](https://www.predictioncenter.org/casp14/targetlist.cgi)、[uniprot](https://www.uniprot.org/),使用的加速卡:1张 Z100L-32G 准确性数据: | 数据类型 | 序列类型 | 序列标签 | 序列长度 | GDT-TS | GDT-HA | PLDDTS | TM score | MaxSub | RMSD | | :------: | :------: | :------: | :------: |:------: |:------: | :------: | :------: | :------: |:------: | | fp32 | 单体 | T1024 | 408 | 0.595 | 0.441 | 90.828 | 0.663 | 0.489 | 5.779 | | fp32 | 单体 | T1053 | 580 | 0.937 | 0.782 | 92.284 | 0.984 | 0.929 | 1.105 | | fp32 | 单体 | Q9NYK1 | 1046 | 0.907 | 0.744 | 86.642 | 0.962 | 0.905 | 5.757 | ## 应用场景 ### 算法类别 蛋白质结构预测 ### 热点应用行业 医疗,科研,教育 ## 源码仓库及问题反馈 * [https://developer.sourcefind.cn/codes/modelzoo/fastfold_pytorch](https://developer.sourcefind.cn/codes/modelzoo/fastfold_pytorch) ## 参考资料 * [https://github.com/deepmind/alphafold](https://github.com/deepmind/alphafold) * [https://github.com/hpcaitech/FastFold](https://github.com/hpcaitech/FastFold)