README.md 5.02 KB
Newer Older
Shenggan's avatar
Shenggan committed
1
2
![](/assets/fold.jpg)

shenggan's avatar
shenggan committed
3
# FastFold
Shenggan's avatar
Shenggan committed
4

Shenggan's avatar
Shenggan committed
5
[![](https://img.shields.io/badge/Paper-PDF-green?style=flat&logo=arXiv&logoColor=green)](https://arxiv.org/abs/2203.00854)
Shenggan's avatar
Shenggan committed
6
![](https://img.shields.io/badge/Made%20with-ColossalAI-blueviolet?style=flat)
Shenggan's avatar
Shenggan committed
7
8
![](https://img.shields.io/github/v/release/hpcaitech/FastFold)
[![GitHub license](https://img.shields.io/github/license/hpcaitech/FastFold)](https://github.com/hpcaitech/FastFold/blob/main/LICENSE)
Shenggan's avatar
Shenggan committed
9

shenggan's avatar
shenggan committed
10
Optimizing Protein Structure Prediction Model Training and Inference on GPU Clusters
Shenggan's avatar
Shenggan committed
11
12
13
14
15
16

FastFold provides a **high-performance implementation of Evoformer** with the following characteristics.

1. Excellent kernel performance on GPU platform
2. Supporting Dynamic Axial Parallelism(DAP)
    * Break the memory limit of single GPU and reduce the overall training time
Shenggan's avatar
Shenggan committed
17
    * DAP can significantly speed up inference and make ultra-long sequence inference possible
Shenggan's avatar
Shenggan committed
18
3. Ease of use
Shenggan's avatar
Shenggan committed
19
    * Huge performance gains with a few lines changes
Shenggan's avatar
Shenggan committed
20
21
22
23
    * You don't need to care about how the parallel part is implemented

## Installation

24
25
26
27
28
29
30
31
32
33
To install and use FastFold, you will need:
+ Python 3.8 or later
+ [NVIDIA CUDA](https://developer.nvidia.com/cuda-downloads) 11.1 or above
+ PyTorch 1.10 or above 

For now, You can install FastFold:
### Using Conda (Recommended)

We highly recommend installing an Anaconda or Miniconda environment and install PyTorch with conda.
Lines below would create a new conda environment called "fastfold":
Shenggan's avatar
Shenggan committed
34

Fazzie-Maqianli's avatar
Fazzie-Maqianli committed
35
36
37
```shell
git clone https://github.com/hpcaitech/FastFold
cd FastFold
Shenggan's avatar
Shenggan committed
38
conda env create --name=fastfold -f environment.yml
Shenggan's avatar
Shenggan committed
39
conda activate fastfold
Shenggan's avatar
Shenggan committed
40
bash scripts/patch_openmm.sh
41
python setup.py install
Shenggan's avatar
Shenggan committed
42
43
```

44
45
### Using PyPi
You can download FastFold with pre-built CUDA extensions.
Shenggan's avatar
Shenggan committed
46
47

```shell
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
pip install fastfold -f https://release.colossalai.org/fastfold
```

## Use Docker

### Build On Your Own
Run the following command to build a docker image from Dockerfile provided.

> Building FastFold from scratch requires GPU support, you need to use Nvidia Docker Runtime as the default when doing `docker build`. More details can be found [here](https://stackoverflow.com/questions/59691207/docker-build-with-nvidia-runtime).

```shell
cd ColossalAI
docker build -t fastfold ./docker
```

Run the following command to start the docker container in interactive mode.
```shell
docker run -ti --gpus all --rm --ipc=host fastfold bash
Shenggan's avatar
Shenggan committed
66
67
```

Shenggan's avatar
Shenggan committed
68
69
## Usage

70
You can use `Evoformer` as `nn.Module` in your project after `from fastfold.model.fastnn import Evoformer`:
Shenggan's avatar
Shenggan committed
71
72

```python
73
from fastfold.model.fastnn import Evoformer
Shenggan's avatar
Shenggan committed
74
75
76
evoformer_layer = Evoformer()
```

Shenggan's avatar
Shenggan committed
77
If you want to use Dynamic Axial Parallelism, add a line of initialize with `fastfold.distributed.init_dap`.
Shenggan's avatar
Shenggan committed
78
79
80
81
82
83
84

```python
from fastfold.distributed import init_dap

init_dap(args.dap_size)
```

Fazzie-Maqianli's avatar
Fazzie-Maqianli committed
85
86
87
88
89
### Download the dataset
You can down the dataset used to train FastFold  by the script `download_all_data.sh`:

    ./scripts/download_all_data.sh data/

90
91
### Inference

Shenggan's avatar
Shenggan committed
92
You can use FastFold with `inject_fastnn`. This will replace the evoformer from OpenFold with the high performance evoformer from FastFold.
93
94

```python
95
from fastfold.utils import inject_fastnn
96
97
98
99

model = AlphaFold(config)
import_jax_weights_(model, args.param_path, version=args.model_name)

100
model = inject_fastnn(model)
101
102
103
104
105
```

For Dynamic Axial Parallelism, you can refer to `./inference.py`. Here is an example of 2 GPUs parallel inference:

```shell
106
python inference.py target.fasta data/pdb_mmcif/mmcif_files/ \
Shenggan's avatar
Shenggan committed
107
    --output_dir ./ \
108
    --gpus 2 \
109
110
111
112
113
    --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 \
Shenggan's avatar
Shenggan committed
114
115
116
117
    --jackhmmer_binary_path `which jackhmmer` \
    --hhblits_binary_path `which hhblits` \
    --hhsearch_binary_path `which hhsearch` \
    --kalign_binary_path `which kalign`
118
119
```

Shenggan's avatar
Shenggan committed
120
121
122
123
124
125
126
127
128
## Performance Benchmark

We have included a performance benchmark script in `./benchmark`. You can benchmark the performance of Evoformer using different settings.

```shell
cd ./benchmark
torchrun --nproc_per_node=1 perf.py --msa-length 128 --res-length 256
```

Shenggan's avatar
Shenggan committed
129
130
131
132
133
134
135
Benchmark Dynamic Axial Parallelism with 2 GPUs:

```shell
cd ./benchmark
torchrun --nproc_per_node=2 perf.py --msa-length 128 --res-length 256 --dap-size 2
```

Shenggan's avatar
Shenggan committed
136
137
138
139
140
141
142
143
144
145
146
If you want to benchmark with [OpenFold](https://github.com/aqlaboratory/openfold), you need to install OpenFold first and benchmark with option `--openfold`:

```shell
torchrun --nproc_per_node=1 perf.py --msa-length 128 --res-length 256 --openfold
```

## Cite us

Cite this paper, if you use FastFold in your research publication.

```
Shenggan's avatar
Shenggan committed
147
148
149
150
151
152
153
154
@misc{cheng2022fastfold,
      title={FastFold: Reducing AlphaFold Training Time from 11 Days to 67 Hours}, 
      author={Shenggan Cheng and Ruidong Wu and Zhongming Yu and Binrui Li and Xiwen Zhang and Jian Peng and Yang You},
      year={2022},
      eprint={2203.00854},
      archivePrefix={arXiv},
      primaryClass={cs.LG}
}
Shenggan's avatar
Shenggan committed
155
```