Docker/nvidia-docker2のコンテナ上にAnacondaをインストールする
TensorFlow、Chainerなどのディープラーニング用のフレームワークの種類によって、使用するNVIDIAの「CUDA Toolkit」(開発環境)「cuDNN」(ライブラリ)のバージョンが異なります。
Dockerとnvidia-docker2を使用すれば1つのホストOS上にコンテナと呼ばれる複数の環境を構築することが可能です。
※各コンテナはホストOSのカーネルを共有します。
1つのOSで複数の環境構築以外にも大きなメリットがあります。
Windows/macなどメインで使用しているパソコンのブラウザから、ホストOS上のコンテナにあるJupyter Notebookにアクセスできるようになります。
それでは、次章から各インストールの解説となります。
前提条件
Ubuntu 16.04 |
NVIDIAのドライバがインストール済み |
※検索エンジンから訪れた方はPythonの使い方の「ディープラーニングの環境構築」もご参考にして下さい。
1. Dockerのインストール
次のコマンドを上から順に実行します。 ※Docker公式を参考
sudo apt-get update sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo apt-key fingerprint 0EBFCD88 sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable" sudo apt-get update sudo apt-get install docker-ce
Dockerが正しくインストールできたかをテストします。
sudo docker run hello-world
次にdockerコマンドをsudoなしで実行できるようにします。
sudo gpasswd -a $USER docker
ここで再起動します。そして、sudoなしでdockerコマンドをテストします。
docker run hello-world
このように表示されればDockerのインストールは完了です。
2. nvidia-docker2のインストール
次のコマンドを上から順に実行します。 ※NVIDIA公式を参考
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 sudo apt-get install -y nvidia-docker2 sudo pkill -SIGHUP dockerd
コンテナ上でGPUが利用可能か確認します。
docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi
[コマンド解説]
run | 新しいコンテナを実行する |
--runtime=nvidia | コンテナでNVIDIAランタイムを使用する |
--rm | コンテナ終了時、コンテナを自動的に削除 |
nvidia/cuda | NVIDIAが提供する最新のDockerイメージ |
nvidia-smi | NVIDIAのシステム管理インターフェイス |
runコマンドの詳細はDocker公式をご覧ください。
3. 共有フォルダを作成する
ホストOSに次のフォルダを作成します。
※ユーザー名は自分の環境に合わせて下さい。tensorの名称は任意です。
4. コンテナを作成する
今回はTensorFlowに必要な環境であるCUDA Toolkit 9.0、cuDNN SDK v7でコンテナを作成します。※2018年7月時点
時間の経過で必要な環境が変わった場合は「nvidia/cudaのリポジトリ」を参考にしてください。次の9.0-cudnn7-develの箇所を変更すればOKです。
tensorというコンテナを作成してバッググラウンドで実行します。
docker run --runtime=nvidia --name tensor -d -it -p 8888:8888 -v /home/ユーザー名/tensor:/foo nvidia/cuda:9.0-cudnn7-devel
※ユーザー名は自分の環境に合わせて下さい。fooの名称は任意です。
コンテナにアタッチする。
docker attach tensor
アタッチするとターミナルがコンテナのroot@xxxになります。
これでコンテナ上の操作を行います。次章はroot@xxxでインストします。
5. コンテナにAnacondaをインストール
はじめにAnaconda公式でダウンロードするURLをコピペします。
次のコマンドを上から順に実行します。(2番目のコマンドは任意)
apt update apt -y upgrade apt install -y wget
ダウングレードはTensorFlow(GPU版)/KerasのインストールからHello World の3章をご覧ください。
それか、「apt -y upgrade」を実行しないという事も可能です。
次のURLはさきほど、コピペしたURLにして下さい。
wget https://repo.continuum.io/archive/Anaconda3-5.1.0-Linux-x86_64.sh
次のコマンドでインストールが開始されます。最初は説明があるので、Enterキーを何度も押します。以降、yes、Enter、yes、noの順番にします。
bash Anaconda3-5.1.0-Linux-x86_64.sh
そして、環境設定ファイルの内容を反映します。
source ~/.bashrc
Jupyter Notebookを起動します。
jupyter notebook --ip=0.0.0.0 --allow-root
http://の部分を右クリックでリンクを開くとJupyter Notebookがブラウザで表示されます。
rootなのでFilesは「/home/user」ではなく「/」が表示されています。
ファイルを作成する場合はコンテナ上では「/foo」(実際はホストOSの/home/ユーザー名/tensor)に作成してください。それ以外の場所に作成するとJupyter Notebookでは削除できませんのでご注意ください。
Jupyter Notebookのサーバーをシャットダウンするにはターミナルで
を押せばサーバーを落とせます。
コンテナの操作状態(root@xxx)を解除するには
です。
Windowsなどの別マシンからJupyter Notebookにアクセスするには
を
に変換するとブラウザでアクセス可能です。
また、Jupyter Notebookの「Files」タブではソースファイルなどをブラウザへドロップでアップロードできます。(日本語ファイル名除く)
6. コンテナの操作
次は最低限、必要なコマンドです。 ※詳細はDocker公式
コンテナの作成/実行 | docker run |
コンテナの停止 | docker stop コンテナ名 |
コンテナの開始 | docker start コンテナ名 |
コンテナにアタッチ | docker attach コンテナ名 |
コンテナの一覧(起動中) | docker ps |
コンテナの一覧(全て) | docker ps -a |
コンテナの削除 | docker rm コンテナID ※コンテナIDはコンテナ一覧で取得する |