読者です 読者をやめる 読者になる 読者になる

ボンジニアの備忘録

凡人エンジニア、通称ボンジニアによる備忘録です。勉強した内容を書いていきます。ジャンル問わずです!間違っていたら指摘をお願いします!

機械学習のためのnvidia-dockerを使ったGPU環境構築

環境

Ubuntu 16.04.2 LTS (GNU/Linux 4.4.0-72-generic x86_64)
NVIDIA Corporation GM204GL [Tesla M60] (rev a1)

nvidia driverのインストール

下記から必要なインストーラをインストールする。
https://developer.nvidia.com/cuda-downloads
f:id:yujikawa11:20170409080005p:plain

$ wget https://developer.nvidia.com/compute/cuda/8.0/Prod2/local_installers/cuda-repo-ubuntu-deb
$ sudo dpkg -i cuda-repo-ubuntu1604-8-0-local-ga2_8.0.61-1_amd64.deb
$ sudo apt-get update
$ sudo apt-get -y install cuda
$ sudo shutdown -r now

Dockerのインストール

必要な依存パッケージをインストールする。

$ sudo apt-get install apt-transport-https ca-certificates curl software-properties-common

APT の認証鍵をインストールする。

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

Docker エンジンをインストールするための公式リポジトリを登録する。

$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

リポジトリの内容を更新する。

$ sudo apt-get update

Docker エンジン (Community Edition) をインストールする。

$ sudo apt-get -y install docker-ce

動作確認

$ sudo docker version
Client:
Version:      17.03.1-ce
API version:  1.27
Go version:   go1.7.5
Git commit:   c6d412e
Built:        Mon Mar 27 17:14:09 2017
OS/Arch:      linux/amd64

Server:
Version:      17.03.1-ce
API version:  1.27 (minimum version 1.12)
Go version:   go1.7.5
Git commit:   c6d412e
Built:        Mon Mar 27 17:14:09 2017
OS/Arch:      linux/amd64
Experimental: false

dockerを一般ユーザでも使用する設定

dockerグループを作成(dockerを入れたらたぶん自動でできてる)

$ sudo groupadd docker

dockerグループに所属させたいユーザを指定(例:hogehoge)

$ sudo usermod -g docker hogehoge

dockerの再起動

$ sudo /bin/systemctl restart docker.service

再起動ができたら一旦ログアウトしないと反映されない(一度接続しなおす必要あり)

nvidia-dockerを導入する

任意の作業フォルダに移動して作業を行う。

wget https://github.com/NVIDIA/nvidia-docker/releases/download/v1.0.1/nvidia-docker_1.0.1-1_amd64.deb

取得したファイルをインストールする。

$ sudo dpkg -i nvidia-docker_1.0.1-1_amd64.deb

サービスの起動確認

$ systemctl list-units --type=service | grep -i nvidia-docker
nvidia-docker.service                                 loaded active running NVIDIA Docker plugin

動作確認

$ docker pull nvidia/cuda:8.0-cudnn5-runtime
$ nvidia-docker run --rm nvidia/cuda nvidia-smi

Sat Apr  8 22:59:24 2017
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 375.51                 Driver Version: 375.51                    |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Tesla M60           Off  | 8BEA:00:00.0     Off |                  Off |
| N/A   27C    P8    14W / 150W |      0MiB /  8123MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID  Type  Process name                               Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

GPUの情報が表示されたらOK!

Dockerで動かす。

Dockerfileを作成する。

例えば下記のようなDockerfileを作成します。

FROM nvidia/cuda:8.0-cudnn5-runtime

LABEL maintainer "hogehoge@exmaple.com"

RUN apt-get update
RUN apt-get -y install python3-pip curl vim less
RUN pip3 install keras tensorflow-gpu sklearn chainer pillow h5py

Dockerfileからbuildを行う。

$ docker build -t nvidia_gpu .
  • vオプションでホスト側とコンテナ側の共有フォルダを設定します。この場合は~/hogehoge/sampleにしています。
$ nvidia-docker run --rm -i -v ~/hogehoge/sample:/share:rw -t nvidia_gpu /bin/bash

コマンド実行後コンテナの中に入るので、/shareフォルダに移動すると~/hogehoge/sampleの中にあるプログラムたちがいます。
あとはプログラムを実行するだけです。

$ python3 sample.py