alphafold_non_docker版 alphafold_non_docker
dockerを使用するAlphafold. versionは2.1.2を取り上げてます.
dockerはdocker-ceでもちろん NVIDIA Container Toolkit 付きです. Alphafold v2.1.2が目下(2203)、alphafold_non_docker版では未対応のご様子. v2.1.1は対応済み
*CentOS7です
dockerを用意する †
[root@centos7 ~]# yum install yum-utils
[root@centos7 ~]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
[root@centos7 ~]# yum install docker-ce
[root@centos7 ~]# systemctl enable docker
[root@centos7 ~]# systemctl start docker
NVIDIA Container Toolkitのインストール †
[root@centos7 ~]# distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
[root@centos7 ~]# echo $distribution
centos7
[root@centos7 ~]#
[root@centos7 ~]# curl -s -o /etc/yum.repos.d/nvidia-docker.repo https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.repo
[root@centos7 ~]# yum install nvidia-container-toolkit nvidia-container-runtime
[root@centos7 ~]# systemctl restart docker
テスト
[root@centos7 ~]# nvidia-container-cli info
NVRM version: 495.29.05
CUDA version: 11.5
Device Index: 0
Device Minor: 0
Model: NVIDIA RTX A2000
Brand: Unknown
GPU UUID: GPU-23cc3ee7-31d3-a068-2f61-5aa00052d084
Bus Location: 00000000:13:00.0
Architecture: 8.6
[root@centos7 ~]# docker run --gpus all --rm nvidia/cuda:11.2.0-base-centos7 nvidia-smi
:
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 495.29.05 Driver Version: 495.29.05 CUDA Version: 11.5 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 NVIDIA RTX A2000 Off | 00000000:13:00.0 Off | Off |
| 30% 48C P0 N/A / 70W | 0MiB / 5940MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
[root@centos7 ~]#
上出来.
proxyでそのままではお外に出れない場合は
[root@centos7 ~]# EDITOR=vim systemctl edit docker.service
[Service]
Environment = 'http_proxy=http://proxy.sybyl.local:10080' 'https_proxy=http://proxy.sybyl.local:10080'
[root@centos7 ~]# systemctl restart docker
とする
っでユーザを group の docker に参加させる
[root@centos7 ~]# useradd -m illya
[root@centos7 ~]# usermod -aG docker illya
[root@centos7 ~]# id illya
uid=1000(illya) gid=1000(illya) groups=1000(illya),994(docker)
[root@centos7 ~]# su - illya
[illya@centos7 ~]$ docker run --gpus all --rm nvidia/cuda:11.2.0-base-centos7 nvidia-smi -L
GPU 0: NVIDIA RTX A2000 (UUID: GPU-23cc3ee7-31d3-a068-2f61-5aa00052d084)
[illya@centos7 ~]$
っでok
「Genetic databases」と「model parameters」を取得 †
この辺はalphafold_non_dockerを参照
alphafoldのdockerを作成 †
[root@centos7 ~]# mkdir /apps
[root@centos7 ~]# cd /apps/
[root@centos7 apps]# git clone https://github.com/deepmind/alphafold.git
[root@centos7 apps]# cd alphafold/
[root@centos7 alphafold]# docker build -f docker/Dockerfile -t alphafold .
実行環境を作る †
OSの上にのっけてもいいのだが、EnvironmentModulesで環境を分けたいので
[root@centos7 ~]# git clone https://github.com/yyuu/pyenv.git /apps/pyenv
[root@centos7 ~]# export PYENV_ROOT=/apps/pyenv
[root@centos7 ~]# export PATH=$PYENV_ROOT/bin:$PATH
[root@centos7 ~]# eval "$(pyenv init - --no-rehash)"
[root@centos7 ~]# pyenv install anaconda3-2021.11
[root@centos7 ~]# pyenv global anaconda3-2021.11
[root@centos7 ~]# export PATH=$PYENV_ROOT/versions/anaconda3-2021.11/bin/:$PATH
[root@centos7 ~]# conda update conda -y
そして環境を作って
[root@centos7 ~]# conda create -n alphafold-docker
[root@centos7 ~]# source activate alphafold-docker
(alphafold-docker) [root@centos7 ~]#
(alphafold-docker) [root@centos7 ~]# conda install pip
(alphafold-docker) [root@centos7 ~]# pip install -r apps/alphafold/docker/requirements.txt
(alphafold-docker) [root@centos7 ~]# source deactivate
[root@centos7 ~]#
っでmodulefilesを作成「/etc/modulefiles/alphafold-docker」
[root@centos7 ~]# yum install environment-modules.x86_64
[root@centos7 ~]# vi /etc/modulefiles/alphafold-docker
#%Module1.0
set root /apps/pyenv/versions/anaconda3-2021.11/envs/alphafold-docker
prepend-path PATH $root/bin
[root@centos7 ~]#
修正 †
ただこのままだとエラーが発生する
「Bad Request ("Unknown runtime specified nvidia")」とか.
回避方法として
https://www.suikou.fs.a.u-tokyo.ac.jp/blog/2021/08/12/ローカル版AlphaFoldを実行してdocker周りのエラーが出たら/
の他に
https://stackoverflow.com/questions/52865988/nvidia-docker-unknown-runtime-specified-nvidia
な方法がある.
後者は
[root@centos7 ~]# vi /etc/docker/daemon.json
{
"runtimes": {
"nvidia": {
"path": "/usr/bin/nvidia-container-runtime",
"runtimeArgs": []
}
}
}
[root@centos7 ~]# systemctl restart docker
でok. 前者は
| diff --git a/docker/run_docker.py b/docker/run_docker.py
index 860303d..1b92a70 100644
--- a/docker/run_docker.py
+++ b/docker/run_docker.py
@@ -226,7 +226,10 @@ def main(argv):
container = client.containers.run(
image=FLAGS.docker_image_name,
command=command_args,
- runtime='nvidia' if FLAGS.use_gpu else None,
+ runtime=None,
+ device_requests=[
+ docker.types.DeviceRequest(count=-1, capabilities=[['gpu']])
+ },
remove=True,
detach=True,
mounts=mounts,
|
とする.
使ってみる †
[illya@centos7 ~]$ cat query.fasta
>dummy_sequence
GWSTELEKHREELKEFLKKEGITNVEIRIDNGRLEVRVEGGTERLKRFLEELRQKLEKKGYTVDIKIE
[illya@centos7 ~]$
[illya@centos7 ~]$ mkdir /tmp/alphafold <-- 初回だけ
[illya@centos7 ~]$ module load alphafold-docker
[illya@centos7 ~]$ python /apps/alphafold/docker/run_docker.py --fasta_paths=query.fasta --max_template_date=2020-05-14 --data_dir=/AlphafoldData --db_preset=reduced_dbs
結果は「/tmp/alphafold/」に置かれる
memo †
作ったdocker imageの中身を探索してみる. 「alphafold/docker/Dockerfile」からimagesにはENTRYPOINTが張られているので
docker run -it --rm --entrypoint /bin/bash alphafold:latest
として中身を見ることができる.
Singularityで実行してみる †
dokcerの場合はroot権限の拝借が必要とか ...podなら不要だけど job queuing systemの中では微妙かなと。
なのでクラスター環境でも簡便に使えるコンテナのSingularityで用意してみた。
1
2
| [root@centos7 ~]# yum install epel-release
[root@centos7 ~]# yum install singularity.x86_64
|