過去ページ 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.9-3.1.el7 docker-ce-stable
docker-ce.x86_64 3:20.10.8-3.el7 docker-ce-stable
docker-ce-cli.x86_64 1:20.10.8-3.el7 docker-ce-stable
docker-ce-rootless-extras.x86_64 20.10.8-3.el7 docker-ce-stable
docker-ce-selinux.noarch 17.03.3.ce-1.el7 docker-ce-stable
docker-scan-plugin.x86_64 0.8.0-3.el7 docker-ce-stable
[root@s ~]#
一応yumで調べると、「docker.x86_64」はOS提供のリポジトリから得られるdockerのようで、
今回は「docker-ce.x86_64」を入れます。こちらは「docker」側で提供してパッケージみたい
[root@s ~]# yum install docker-ce
(同時に containerd.io、docker-ce-cli、docker-ce-rootless-extras、docker-scan-plugin もインストールされる)
[root@s ~]# systemctl start docker
[root@s ~]# systemctl enable docker
一応ユーザ側でバージョン確認
[illya@s ~]$ docker --version
Docker version 20.10.8, build 3967b7d
[illya@s ~]$
次に「NVIDIA Container Toolkit」をインストールします
NVIDIA Container Toolkit(旧名: NVIDIA Docker?, nvidia-docker2?)をインスト †
本家様 https://github.com/NVIDIA/nvidia-docker
docker/NVIDIAContainerToolkit
次に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 ~]# yum install nvidia-container-toolkit nvidia-container-runtime
(「libnvidia-container-tools」と「libnvidia-container1」が同時にインストールされる)
[root@s ~]# systemctl restart docker
ここでちょいとテスト
[root@s ~]# nvidia-container-cli info
NVRM version: 470.42.01
CUDA version: 11.4
Device Index: 0
Device Minor: 0
Model: NVIDIA GeForce GT 710
Brand: GeForce
GPU UUID: GPU-f0753e20-06f7-695a-f325-b5b6342393ba
Bus Location: 00000000:01:00.0
Architecture: 3.5
Device Index: 1
Device Minor: 1
Model: NVIDIA GeForce GT 710
Brand: GeForce
GPU UUID: GPU-34c49ab7-b79d-e341-93e2-1659e9bd9e57
Bus Location: 00000000:06:00.0
Architecture: 3.5
[root@s ~]# docker run --gpus all --rm nvidia/cuda:11.2.0-base-centos7 nvidia-smi
:
:
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 470.42.01 Driver Version: 470.42.01 CUDA Version: 11.4 |
|-------------------------------+----------------------+----------------------+
| 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 GeForce ... Off | 00000000:01:00.0 N/A | N/A |
| 50% 55C P0 N/A / N/A | 0MiB / 2002MiB | N/A Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
| 1 NVIDIA GeForce ... Off | 00000000:06:00.0 N/A | N/A |
| 50% 55C 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 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nvidia/cuda 11.2.0-base-centos7 80633fb8c41a 3 weeks ago 370MB
[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: NVIDIA GeForce GT 710 (UUID: GPU-f0753e20-06f7-695a-f325-b5b6342393ba)
GPU 1: NVIDIA GeForce GT 710 (UUID: GPU-34c49ab7-b79d-e341-93e2-1659e9bd9e57)
[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
と実行例を示しています