過去ページ docker200322

nvidiaカードが入ったマシンにdockerを入れて、そのコンテナでGPU計算を行ってみる

docker/run
docker/Dockerfile

dockerのリポジトリをインストールします

OS提供ではなく docker 側で提供するリポジトリからdockerを入れる

[root@s ~]# yum install yum-utils
[root@s ~]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
[root@s ~]# yum list |grep docker-ce
containerd.io.x86_64                      1.4.3-3.1.el7                docker-ce-stable
docker-ce.x86_64                          3:20.10.2-3.el7              docker-ce-stable
docker-ce-cli.x86_64                      1:20.10.2-3.el7              docker-ce-stable
docker-ce-rootless-extras.x86_64          20.10.2-3.el7                docker-ce-stable
docker-ce-selinux.noarch                  17.03.3.ce-1.el7             docker-ce-stable
[root@s ~]#

一応yumで調べると、「docker.x86_64」はOS提供のリポジトリから得られるdockerのようで、
今回は「docker-ce.x86_64」を入れます。こちらは「docker」側で提供してパッケージみたい

[root@s ~]# yum install docker-ce
 
[root@s ~]# systemctl start docker
[root@s ~]# systemctl enable docker

一応ユーザ側でバージョン確認

[illya@s ~]$ docker --version
Docker version 20.10.3, build 48d30b5
 
[illya@s ~]$

次に「NVIDIA Container Toolkit」をインストールします

NVIDIA Container Toolkit(旧名: NVIDIA Docker?, nvidia-docker2?)をインスト

本家様 https://github.com/NVIDIA/nvidia-docker

次にdockerにnvidiaのツールキットを載せます.

[root@s ~]# distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
[root@s ~]# echo $distribution
centos7
 
[root@s ~]# curl -s -o /etc/yum.repos.d/nvidia-docker.repo https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.repo
[root@s ~]# cat /etc/yum.repos.d/nvidia-docker.repo
[libnvidia-container]
name=libnvidia-container
baseurl=https://nvidia.github.io/libnvidia-container/stable/centos7/$basearch
repo_gpgcheck=1
gpgcheck=0
enabled=1
gpgkey=https://nvidia.github.io/libnvidia-container/gpgkey
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
 :
 :
[root@s ~]# yum install nvidia-container-toolkit nvidia-container-runtime
[root@s ~]# systemctl restart docker

ここでちょいとテスト

[root@s ~]# docker run --gpus all --rm nvidia/cuda:11.2.0-base-centos7 nvidia-smi
 :
 :
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 460.27.04    Driver Version: 460.27.04    CUDA Version: 11.2     |
|-------------------------------+----------------------+----------------------+
| 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  GeForce GT 710      Off  | 00000000:05:00.0 N/A |                  N/A |
| 50%   40C    P0    N/A /  N/A |      0MiB /   981MiB |     N/A      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
 
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+
[root@s ~]#
[root@s ~]# docker images
REPOSITORY    TAG                   IMAGE ID       CREATED      SIZE
nvidia/cuda   11.2.0-base-centos7   c178fff98309   4 days ago   332MB
 
[root@s ~]#

特定のユーザがdockerを実行できるようにする

単にグループ「docker」にユーザを加えればいいです

[root@s ~]# usermod -aG docker illya
 
[root@s ~]# grep docker /etc/group
docker:x:993:illya
 
[root@s ~]# id
uid=1000(illya) gid=1000(illya) groups=1000(illya),993(docker)
[root@s ~]#

そのうえで

[illya@s ~]$ docker run --gpus all --rm nvidia/cuda:11.2.0-base-centos7 nvidia-smi -L
GPU 0: GeForce GT 710 (UUID: GPU-f0753e20-06f7-695a-f325-b5b6342393ba)
 
[illya@s ~]$

と利用可能である。

docker-compose

1つのコンテナを運用するならdockerコマンドでいいのでしょうが、複数のコンテナで運用するなら
docker-composeはすごく便利.
https://github.com/docker/compose/releasesを参照して最新版を入手します.
Releaseベースでは1.28.2が最新みたい(20210209). これをインストールします

[root@s ~]# curl -L -o /usr/local/bin/docker-compose "https://github.com/docker/compose/releases/download/1.28.2/docker-compose-$(uname -s)-$(uname -m)"
[root@s ~]# file /usr/local/bin/docker-compose
/usr/local/bin/docker-compose: ELF 64-bit LSB executable, x86-64, version 1 (略
 
[root@s ~]# chmod 755 /usr/local/bin/docker-compose
[root@s ~]# docker-compose -v
docker-compose version 1.28.2, build 67630359
[root@s ~]#

テスト

[root@s ~]# mkdir sample && cd sample
[root@s sample]# vi docker-compose.yml
version: '3'
services:
  nvsmi:
    image: nvidia/cuda:11.2.0-base-centos7
    runtime: nvidia
    environment:
      - NVIDIA_VISIBLE_DEVICES=all
    command: /bin/sh -c "tail -f /dev/null"
[root@s sample]#
 
[root@s sample]# docker-compose up -d
Creating network "sample_default" with the default driver
Creating sample_nvsmi_1 ... done
 
[root@s sample]# docker ps
CONTAINER ID   IMAGE                             COMMAND                  CREATED          STATUS          PORTS     NAMES
962592572c50   nvidia/cuda:11.2.0-base-centos7   "/bin/sh -c 'tail -f…"   14 seconds ago   Up 13 seconds             sample_nvsmi_1
[root@s sample]#
[root@s sample]# docker exec -it 962592572c50 bash
[root@962592572c50 /]# 
[root@962592572c50 /]# nvidia-smi -L
GPU 0: GeForce GT 710 (UUID: GPU-f0753e20-06f7-695a-f325-b5b6342393ba)
GPU 1: GeForce GT 710 (UUID: GPU-34c49ab7-b79d-e341-93e2-1659e9bd9e57)
[root@962592572c50 /]#

dockerの上でrelionを動かす

九州工業大学 生命情報工学科 情報工学部 安永研究室様にてDockerfileが公表されています。
http://www.yasunaga-lab.bio.kyutech.ac.jp/ja/
RELION3.1チュートリアル
それを使いたいと思う

git clone https://github.com/kttn8769/cryoem-docker
cd cryoem-docker
vi Dockerfile
 
docker build .

稼動させたコンテナに修正を加えたのでイメージとして保管したい

https://qiita.com/tubone/items/a3bad04abf4c700cae3d

dockerHUB

いろんなイメージが置かれてます
relionで検索すると結構な数があります。 https://hub.docker.com/search?q=relion&type=image
参照 https://hub.docker.com/r/sbobkov/relion3

docker pull sbobkov/relion3:latest

でイメージを取得して

docker run -it --user $(id -u):$(id -g) -v Working directory:/work -w /work sbobkov/relion3 relion_command

と実行例を示しています


トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2021-02-09 (火) 00:24:54 (20d)