nvidia docker2のインストール

当初Windowsでいろいろな機械学習のライブラリを試していたのですが、試すものによってシステム要件が異なり、特にcudaのバージョンやcudnnのバージョンの要件がまちまちで不便だったため、Ubuntuを使いnvidia docker2を導入することにしました。
使い始めてみると、もっと早くやっておけば良かった!とこの一言に尽きるぐらい便利です。

ホストマシンへのドライバ類インストール

ホストマシンとなるUbuntuにNVIDIAドライバ等を入れていきます。
Ubuntuのセットアップ時に入って動いている場合は、NVIDIAドライバのインストールをやり直す必要はありません。
(注:稀にnvidia driverのバグが原因でうまく動作しないプログラム等があったりしますので、その時は入れ替える必要があります)

まずaptリポジトリにppa:graphics-drivers/ppaを追加します。

sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt-get update

aptでnvidiaドライバをインストールします。
下記396の部分はバージョンですので、できるだけ新しいものを入れることをお勧めします。

sudo apt-get install nvidia-396

なお、ドライバを入れる前に古いドライバを削除しておいた方が良いケースがあります。(普通は削除しなくても動くと思います)
もともと入っているNVIDIA系のドライバ類を検索するには

dpkg -l | grep nvidia
dpkg -l | grep cuda

それらを削除するには

sudo apt-get --purge remove nvidia-*
sudo apt-get --purge remove cuda-*

インストールが終わったら再起動して動作を確認しましょう。

sudo reboot

再起動後にGUIがうまく起動しない場合は、Ctrl + Alt + F1でCLIモードに入ってドライバの入れ直しを行ったり、デュアルブート化の記事で記載したGRUB設定変更やnouveauドライバ無効化あたりの部分を確認してみましょう。

docker-ceのインストール

まずはdocker-ceを入れていきます。
必要となりそうなライブラリのインストールから。

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

GPG鍵を追加します。

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

リポジトリを追加します。

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

docker-ceをaptでインストールします。

sudo apt-get install docker-ce

Nvidia docker2のインストール

それでは、nvidia-docker2をインストールしていきましょう。
GPG鍵を追加します。

curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -

リポジトリを追加します。

curl -s -L https://nvidia.github.io/nvidia-docker/ubuntu16.04/amd64/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update

nvidia-doker2をaptでインストールします。

sudo apt-get install nvidia-docker2

起動しているdockerdを強制終了させ、nvidia-dockerを有効化して起動させます。

sudo pkill -SIGHUP dockerd

ホストマシンにログインしているユーザーをdockerグループに追加します。
この作業は必須ではありませんが、こうしておいた方がこの先の作業がやりやすいでしょう。

sudo gpasswd -a $USER docker

nvidia-docker2の起動

nvidiaのdockerリポジトリからcudaインストール済みのイメージを取得します。

このとき、当然ながらホストマシンのドライバよりも新しいバージョンは動作しないので注意が必要です。
たとえばcuda9.0-cudnn7-develを使う場合は以下のようにpullします。

docker pull nvidia/cuda:9.0-cudnn7-devel

nvidia系のものを有効にしてdockerを起動するコマンドは以下のようになります。

docker run --runtime=nvidia -it nvidia/cuda (image-id or image-name:tag)

画面を接続したりポートを割り当てたりしてdockerを起動する場合の書き方は別途詳細を記事にしたいと思いますが、このような書き方となります。

docker run --runtime=nvidia -it \
--env=DISPLAY=$DISPLAY \
--env=QT_X11_NO_MITSHM=1 \
--volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \
-p 8080:8080 \
--device=/dev/video0:/dev/video0 (image-id or image-name:tag)

覚えておくと便利なdockerコマンドたち

ここからは一般的な話です。
dockerの使い方について検索するとたくさん情報がありますが、取り急ぎよく使うものをご紹介しておきます。

docker imageの一覧

docker images

dockerコンテナの一覧

# 起動中のdocker
docker ps

# 停止中のものも含む
docker ps -a

docker imageからのdockerコンテナ作成と起動

docker run (image-id or image-name:tag)

docker containerの起動

docker start (container-id or container-name)

起動中のdocker containerへの接続

docker attach (container-id or container-name)

docker imageの削除

docker rmi (image-id or image-name:tag)

dockerコンテナの削除

docker rm (container-id or container-name)

dockerコンテナからのdockerイメージ作成

docker commit (container-id) (image-name:tag)

dockerに対してファイルをコピーする

docker cp (filename) (container-id):(directory)

接続中のdockerコンテナを起動したまま抜ける
Ctrlを押しながら、P→Qキーを順に押す(exitコマンドで抜けるとコンテナが停止してしまいます)

nvidia docker2のインストールにコメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です