alphafold2安裝記錄230610, Docker法安裝運(yùn)行
接下來是安裝docker,
? 其實(shí)之前公司幫忙安好了conda版的,可以通過module模式加載af2環(huán)境,類似deepEM_hancer_dev。就是沒下載Database,我一開始下載Database失敗,以為他沒裝好,一怒之下把所有alphafold相關(guān)的文件夾都刪干凈了,自然啥都沒有了。
? ? ? ? 為了不破壞集群環(huán)境,一開始嘗試使用conda版安裝,但是后面被我把conda環(huán)境搞壞了,報(bào)錯(cuò)逐漸加重,一開始是少數(shù)幾條命令報(bào)錯(cuò),搞到第二天,幾乎所有conda命令都報(bào)錯(cuò),而且也不彈出報(bào)錯(cuò)信息了,就卡住。??應(yīng)該是conda的python,user site-packages沒有隔離時(shí),運(yùn)行了pip install導(dǎo)致,但是我解決不了。看了下conda環(huán)境目錄的cryosparc還能正常運(yùn)行,deepEMhancer和Topaz現(xiàn)在都可以依賴cryosparc運(yùn)行,應(yīng)該也沒問題。還好,不算搞砸。
? ? ? ? 那只能用docker安裝了。docker我報(bào)了很多錯(cuò),查了許多教程,所以下面的命令可能是冗余的。
一開始列出可安裝的docker版本號(hào)
yum list docker-ce --showduplicates | sort -r
沒結(jié)果

需要設(shè)置鏡像倉庫。
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
顯示:都安裝好的
設(shè)置穩(wěn)定版?zhèn)}庫:
sudo yum-config-manager \
? --add-repo \
? https://download.docker.com/linux/centos/docker-ce.rep
然后再運(yùn)行上述命令,
yum list docker-ce --showduplicates | sort -r
可以的,就挑了一個(gè)版本安裝
?sudo yum install docker-ce-24.0.2-1 docker-ce-cli-24.0.2-1 containerd.io
報(bào)錯(cuò)

yum clean all
yum makecache
再運(yùn)行上面的安裝特定版本,成功安裝
啟動(dòng)docker
systemctl start docker
啟動(dòng)不了,報(bào)錯(cuò)
上面的命令可能有些是有用的,但我不清楚哪些有用。
yum update -y
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install docker-ce
啟動(dòng)docker
systemctl start docker
docker run hello-world
成功!

接下來設(shè)置非root啟動(dòng)docker
官方文檔
https://docs.docker.com/engine/install/linux-postinstall/#manage-docker-as-a-non-root-user
?sudo usermod -aG docker spuser
spuser是用戶名
應(yīng)用更改
newgrp docker
測(cè)試
?docker run hello-world
成功
接下來在docker中安裝?NVIDIA Container Toolkit for GPU support. 我們集群是CentOS7.9,就按官方文檔安裝。
Setup the repository and the GPG key:
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
?? curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.repo | sudo tee /etc/yum.repos.d/nvidia-container-toolkit.repo
sudo yum-config-manager --enable libnvidia-container-experimental
sudo yum clean expire-cache
sudo yum install -y nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
sudo docker run --rm --runtime=nvidia --gpus all nvidia/cuda:11.6.2-base-ubuntu20.04 nvidia-smi
上面的命令是檢查是否成功,命令輸入的版本號(hào)和自己版本號(hào)是不一樣的。
我輸入上述命令失敗后,又使用alphafold教程里的命令
docker run --rm --gpus all nvidia/cuda:11.0-base nvidia-smi
雖然我的cuda版本是11.2,高于11.0,還是失敗。當(dāng)時(shí)以為沒裝好,又反復(fù)找教程卸了重裝。
后來發(fā)現(xiàn)
sudo docker run --gpus all --rm nvidia/cuda:10.0-base nvidia-smi
輸入這個(gè)成功,看來檢測(cè)時(shí)也不能用版本太高的命令。
docker build -f docker/Dockerfile -t alphafold .
pip3 install -r docker/requirements.txt
等一兩個(gè)小時(shí)吧,就好了。
有教程改腳本,更改輸出目錄,但其實(shí)運(yùn)行alphafold時(shí)命令里可以添加輸出位置,不需要在腳本里改,但我還是改了
?cd alphafold/docker
?vim alphafold/docker/run_docker.py
output_dir后面改為輸出結(jié)果的絕對(duì)路徑
運(yùn)行官方命令報(bào)錯(cuò),索性用下面這個(gè)命令(所以改非管理員權(quán)限運(yùn)行docker改了個(gè)寂寞,最后還得管理員才不報(bào)錯(cuò))
sudo python3 /絕對(duì)路徑alphafold/docker/run_docker.py \
? --fasta_paths=/絕對(duì)路徑/linker.fasta \
? --max_template_date=2023-06-09(當(dāng)天或者當(dāng)天前一天,我傾向于前一天) \
? --model_preset=monomer(多條鏈的復(fù)合物就是multimer) \
? --data_dir=/絕對(duì)路徑/Database \
? --gpu_devices=0,1(GPU編號(hào)) \
? --output_dir=/絕對(duì)路徑/prediction/test
運(yùn)行上,會(huì)有報(bào)錯(cuò)消息,不影響運(yùn)行
?

TPU是谷歌創(chuàng)建的專用集成電路,可配合tensorflow使用
rocm是AMD顯卡加速
plugin那個(gè)可能跟tensorflow有關(guān),不管了。
運(yùn)行jackhmmer時(shí)間久了會(huì)報(bào)錯(cuò),斷開ssh
client_loop: send disconnect: Connection reset
但是我們服務(wù)器不是這樣的,就算好幾天不運(yùn)行任務(wù)也不會(huì)自動(dòng)斷開。只能是腳本運(yùn)行時(shí)出問題所以斷開。
另外確實(shí)輸出了文件,但是不確定是什么時(shí)候生成的
使用stat ranked_0.pdb查看生成時(shí)間,但系統(tǒng)時(shí)間是亂的(換算一下是次日上午八點(diǎn),但凌晨2點(diǎn)不到就已經(jīng)斷開ssh了),也不能確定。(這個(gè)如果有人知道為什么,是否需要解決,希望評(píng)論告知,不勝感謝)
為了測(cè)試運(yùn)行是否靠譜,使用colab運(yùn)行相同序列
AlphaFold.ipynb - Colaboratory (google.com)
This Colab notebook allows you to easily predict the structure of a protein using a slightly simplified version of?AlphaFold v2.3.2.
? ? ? ?這個(gè)版本運(yùn)行到第五步會(huì)出錯(cuò),不過在jackhmmer這一步進(jìn)行序列比對(duì)時(shí),花費(fèi)的時(shí)間和我在本地進(jìn)行的相似,1h42min,從而說明jackhmmer運(yùn)行時(shí)間久是正常的。
AlphaFold2.ipynb - Colaboratory (google.com)
ColabFold v1.5.2-patch: AlphaFold2 using MMseqs2,這個(gè)可能更輕量化。運(yùn)行成功了。
值得注意的是,選取預(yù)測(cè)的結(jié)果時(shí),看文件名的rank值,rank0最可信。而不是根據(jù)model數(shù),以前我用的都是model5。
比較colab和我本地運(yùn)行的結(jié)果,發(fā)現(xiàn)跨膜區(qū)基本相似,但都和未發(fā)表結(jié)構(gòu)差別不小。
? ? ? ? 胞外有兩部分,一個(gè)相對(duì)穩(wěn)定,第二部分取向不定。colab的簡化的模型預(yù)測(cè)的5種結(jié)果取向角度范圍窄。本地運(yùn)行的范圍寬,而且rank0和colab相比,第二部分靈活區(qū)差別非常大,沒有重合。根據(jù)一個(gè)低分辨率的電子云密度來放的話,他們似乎可以分別放進(jìn)成filp的兩個(gè)map中。這部分的取向和我憑感覺往密度里搭的完全不同。有一定參考意義,真實(shí)什么樣子還要靠繼續(xù)計(jì)算電子云密度。
? ? ? ? 隨后又從github issues 區(qū)找了一個(gè)jackhmmer fail的話題,copy了解決辦法提供的fasta文件的一段序列,進(jìn)行本地運(yùn)行,確保輸入沒問題。也運(yùn)行成功了。

運(yùn)行沒問題,alphafold應(yīng)該是搭成了。接下來把database拷到另一臺(tái)集群,再搭建應(yīng)該快很多。