Docker+Minicondaによる機械学習用コンテナでJupyterを起動するまで

2019年11月19日

Minicondaの公式イメージを使用して、機械学習・データサイエンス用のDocker環境を構築します。Dockerのインストールから、コンテナへのpythonパッケージのインストール、Jupyter notebookを開くまでの手順をまとめました。

dockerで機械学習用の環境を構築するメリットは、

  • ライブラリ/バージョンの違いがシビアな深層学習フレームワークの環境を手っ取り早く構築できる。
  • (Ubuntuの場合) 導入が面倒なTensorflow・LightGBMのGPU版をかんたんに利用できる
  • (Windows, Macの場合) Linux系のみ対応のライブラリを使用できる
  • Conda環境が壊れてもすぐ復旧できる

などが挙げられます。

Dockerのインストール

各OSへのDockerのインストールはこちらです。
UbuntuWindows ProMac

DockerでGPUコンテナを利用できるのはUbuntuのみです。WindowsやMac OSのパソコンしかなくてGPUコンテナを使いたい場合は、外付けSSDからUbuntuを起動するなどの手があります。

Minicondaイメージの取得・コンテナ作成

公式Dockerイメージ(Anaconda 2 or 3、Miniconda 2 or 3)が以下にあります。https://github.com/ContinuumIO/docker-images

Miniconda 3 (python 3.7ベースのMiniconda)イメージは端末から次のコマンドで取得できます。

# dockerコンテナ内と共有するファイルを入れる場所を作っておく
mkdir -p docker/miniconda
# miniconda3の公式イメージを取得
docker pull continuumio/miniconda3
# minicondaコンテナを起動する
docker run --name miniconda3 -it -p 8888:8888 -v /home/[USER名]/docker/miniconda:/home continuumio/miniconda3 /bin/bash

docker run時のオプションの説明
--name :作るコンテナにつける名前
-it:コンテナとホストのコマンドプロンプトをつなぐ
-p :ホストとコンテナのポートをつなぐ:jupyter notebookをブラウザから開けるようになる
-v:ホストのフォルダ(ここでは/home/docker/miniconda)をコンテナ内の/homeと共有する。先に「mkdir -p docker/miniconda」で作成したフォルダ内にファイル(解析データなど)を入れておくと、コンテナ内と共有できる。

ここでは一応「-v」オプションで共有フォルダをマウントしています。jupyter notebookだとブラウザを経由してファイルをコンテナ内へアップロード・ダウンロードできるので不要っちゃ不要かもしれません。

Minicondaコンテナ内での作業

先のコマンドでコンテナ内のコマンドプロンプトには入れているので、(必要に応じて仮想環境をつくり)パッケージをインストールします。

# ML用の仮想環境を作成
conda create -n ML
# 機械学習・データサイエンス関連のパッケージをインストール
conda install numpy scipy pandas matplotlib seaborn bokeh jupyter jupyterlab scikit-learn 

コンテナ内のJupyter notebookを起動

# jupyter notebookを開く
jupyter notebook --port 8888 --ip=0.0.0.0 --allow-root
# jupyter labの場合は以下を実行
jupyter lab --port 8888 --ip=0.0.0.0 --allow-root

出力されるURLをブラウザに入力するとjupyterを開けます。

jupyterを終了するには、「Ctrl+C」
再度コンテナに入るには、「docker exec -it コンテナID /bin/bash
作成したMinicondaコンテナをイメージとして保存するには、「docker commit CONTAINER_ID 保存するイメージ名