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

トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2022-04-05 (火) 02:00:24 (48d)