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コマンドで抜けるとコンテナが停止してしまいます)