0%

本地安装alphafold3

本地安装 alphafold3

关于这个 docker 的安装教程我无法按照教程实现 rootless docker,因此我只能用 docker 组来实现。原教程在: 安装 alphafold3

添加 sudo 权限

给某个用户添加 sudo 权限, 需要 sudo 权限来安装软件。

1
sudo usermod -aG sudo username

添加 docker 的官方权限

Ubuntu 22.04

1
2
3
4
5
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

openSUSE

openSUSE 不需要设置什么权限

安装 docker

Ubuntu 22.04

这是在添加源并且安装 docker

1
2
3
4
5
6
7
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo docker run hello-world

openSUSE

1
2
3
4
5
6
sudo zypper ref
sudo zypper install docker

# openSUSE需要手动启动docker
sudo systemctl enable docker # 设置开机启动
sudo systemctl start docker # 启动docker

将用户添加进 docker 组

1
sudo usermod -aG docker username

添加入 docker 组后要重启下 terminal 使其生效。

接下来我们就能不用 sudo 使用 docker 命令了。

可以用以下命令来测试 docker 是否安装完成。

1
docker run hello-world

这个命令会从 docker hub 拉下一个 hello-world 的 docker 镜像。

安装 NVIDIA 驱动

Ubuntu 22.04

如果还没安装驱动则用以下命令安装 (ubuntu 安装 NVIDIA 驱动好简单啊)。

1
2
3
4
5
6
sudo apt-get -y install alsa-utils ubuntu-drivers-common
sudo ubuntu-drivers install

sudo nvidia-smi --gpu-reset

nvidia-smi # Check that the drivers are installed.

openSUSE

添加 NVIDIA 的官方源

1
2
sudo zypper addrepo --refresh 'https://download.nvidia.com/opensuse/leap/$releasever' NVIDIA
sudo rpm --import https://www.nvidia.com/en-us/drivers/unix/nvidia-public.key

安装编译工具

1
sudo zypper install -t pattern devel_kernel

安装 NVIDIA 驱动

1
2
3
sudo zypper install x11-video-nvidiaG06
sudo reboot
nvidia-smi

为 docker 添加 NVIDIA 支持

Ubuntu 22.02

1
2
3
4
5
6
7
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
&& curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker --config=/etc/docker/daemon.json

openSUSE

添加库

1
2
https://nvidia.github.io/libnvidia-container/stable/rpm/nvidia-container-toolkit.repo
sudo rpm --import https://nvidia.github.io/libnvidia-container/gpgkey

安装 nvidia-container-toolkit

1
sudo zypper install -y nvidia-container-toolkit

获得 AlphaFold3 的代码

1
git clone https://github.com/google-deepmind/alphafold3.git

下载通用数据

1
2
cd alphafold3  # Navigate to the directory with cloned AlphaFold 3 repository.
./fetch_databases.sh [<DB_DIR>]

如果直接只写./fetch_databases.sh的话就会下载到家目录下的public_databases下。

获得模型参数

需要填这个来获得模型参数,这需要 2-3 天时间。我至今也没得到这个参数文件。

构建 AlphaFold3 的 docker 镜像

1
docker build -t alphafold3 -f docker/Dockerfile .

运行测试

在家目录下新建af_input, af_output, 通用数据在~/public_databases下,模型参数在~/models下。

1
2
3
cd ~
mkdir af_input
mkdir af_output

这是官网给的example 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"name": "2PV7",
"sequences": [
{
"protein": {
"id": ["A", "B"],
"sequence": "GMRESYANENQFGFKTINSDIHKIVIVGGYGKLGGLFARYLRASGYPISILDREDWAVAESILANADVVIVSVPINLTLETIERLKPYLTENMLLADLTSVKREPLAKMLEVHTGAVLGLHPMFGADIASMAKQVVVRCDGRFPERYEWLLEQIQIWGAKIYQTNATEHDHNMTYIQALRHFSTFANGLHLSKQPINLANLLALSSPIYRLELAMIGRLFAQDAELYADIIMDKSENLAVIETLKQTYDEALTFFENNDRQGFIDAFHKVRDWFGDYSEQFLKESRQLLQQANDLKQG"
}
}
],
"modelSeeds": [1],
"dialect": "alphafold3",
"version": 1
}

将他保存到~/af_input/fold_input.json里,然后运行以下的文件进行测试。

1
2
3
4
5
6
7
8
9
10
11
docker run -it \
--volume $HOME/af_input:/root/af_input \
--volume $HOME/af_output:/root/af_output \
--volume $HOME/models:/root/models \
--volume $HOME/public_databases:/root/public_databases \
--gpus all \
alphafold3 \
python run_alphafold.py \
--json_path=/root/af_input/fold_input.json \
--model_dir=/root/models \
--output_dir=/root/af_output

安装 singularity

因为要运行 docker 命令的话需要加入 docker 组,为了更方便使用,我们生成 singularity 镜像。

Ubuntu 22.04

1
2
3
wget https://github.com/sylabs/singularity/releases/download/v4.2.1/singularity-ce_4.2.1-jammy_amd64.deb
sudo dpkg --install singularity-ce_4.2.1-jammy_amd64.deb
sudo apt-get install -f

这三个命令首先下载.deb包,然后用dpkg去安装 (可能会一些错误),最后用apt-get解决依赖问题。

由 docker 镜像生成 singularity 镜像

先生成一个私有仓库:

1
2
3
docker run -d -p 5000:5000 --restart=always --name registry registry:2
docker tag alphafold3 localhost:5000/alphafold3
docker push localhost:5000/alphafold3

然后使用 singularity 生成容器:

1
SINGULARITY_NOHTTPS=1 singularity build alphafold3.sif docker://localhost:5000/alphafold3:latest

运行测试

可以运行以下的命令进行测试:

1
2
3
4
5
6
7
8
9
10
11
12
singularity exec \
--nv
--bind $HOME/af_input:/root/af_input \
--bind $HOME/af_output:/root/af_output \
--bind $HOME/models:/root/models \
--bind $HOME/public_databases:/root/public_databases \
alphafold3.sif \
python /app/alphafold/run_alphafold.py \
--json_path=/root/af_input/fold_input.json \
--model_dir=/root/models \
--db_dir=/root/public_databases \
--output_dir=/root/af_output

教程里也没告诉run_alphafold.py/ap/alphafold/

对应地,qsub 中的提交脚本为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#!/bin/bash
#$ -S /bin/bash
#$ -cwd
#$ -V
#$ -pe mpi 32
#$ -q [email protected]
#$ -N alphafold3
#$ -e stdout
#$ -o stdout

model_dir="<YOUR_MODEL_DIRECTORY>"
af_input_dir="<YOUR_AF_INPUT_DIRECTORY>"
af_output_dir="<YOUR_AF_OUTPUT_DIRECTORY>"
input_json="<INPUT_JSON>"

for i in $model_dir $af_input_dir $af_output_dir $input_json
do
if [[ "$i" =~ \<.*\> ]]; then
echo "Please set ${i} directory!" 1>&2
exit -1
fi
done

singularity exec \
--nv \
--bind ${af_input_dir}:/root/af_input \
--bind ${af_output_dir}:/root/af_output \
--bind ${model_dir}:/root/models \
--bind /home/shared/public_databases:/root/public_databases \
/home/shared/alphafold3.sif \
python /app/alphafold/run_alphafold.py \
--json_path=/root/af_input/${input_json} \
--model_dir=/root/models \
--db_dir=/root/public_databases \
--output_dir=/root/af_output