あさのひとりごと

3日坊主にならないように、全力を尽くします。 記事は個人のひとりごとです。所属する組織の意見を代表するほど、仕事熱心じゃないです。

機械学習を勉強するときはDockerを使うと便利

いまお仕事の関係で、機械学習の教科書的な書籍を読んだりオンライン講座を受講したりしながらサンプルやチュートリアルを動かして勉強しています。

機械学習を勉強するときは、Pythonの環境を構築し、JupyterNotebookを使って、実際に手と頭を動かしながら行うのが効率的です。が、アルゴリズムの理論そのものの理解がすでにしんどい上、過学習対策のための正則化、汎化性能の評価、クロスバリデーション、不均衡データや少ないデータはどうすればいいか、などなどいちいち難しいことを数多く勉強しなければなりません。

その上、、、、機械学習での学習は、1度やれば終わり!ではなく、パラメータチューニングしたり、データを増やしたり加工したりしながら、繰り返しなんども行う必要があります。一見ビジネス寄り&アカデミックな雰囲気を醸し出していますが、実際のところは、非常に泥臭い作業のオンパレードです。

が、、、、、

環境構築が、めんどくさい。

ライブラリのバージョンの違いで実装が・・・というのものも多々あります。

アルゴリズムや実装の確認などは手元のPCでゆっくり考えてデバッグしながらやるとして、、、 いざ、実際に大量の画像データなどを使ってモデルを生成しよう!となると、 クラウドの強いインスタンスを使うのが便利なので、手元のPCの環境が、そっくりそのままクラウド上で動いてくれると、わりと幸せです。

ということで、機械学習を勉強するためDockerを使っているので、簡単にご紹介です。

1. Dockerとは

Dockerはアプリの実行環境をまとめて「コンテナ」として管理できるツールです。Dockerをつかうとこんなことができます。

f:id:dr_asa:20170821105634p:plain

OSやバージョンも指定できますので、Docker上で作成した環境と同じものを、(基本的には)どこででも実行できます。

Dockerでは、「Dockerイメージ」と呼ばれるものに、実行環境に必要なディレクトリ/ファイルをDockerイメージにまとめます。このまとめたDockerイメージを「リポジトリ」を介してアップロード(push)/ダウンロード(pull)して環境を移植します。

Dockerの公式リポジトリは「DockerHub」と呼ばれ、アカウント登録さえすれば、無償でも利用可能です。

https://hub.docker.com/

2. Dockerのインストール

Dockerを使って環境を構築するには、使っているPCや学習させるためのマシンに、それぞれDockerをインストールします。

2.1 MacOSへのインストール

MacOS向けには「Docker for Mac」が提供されています。 以下の公式サイトからモジュールをダウンロードして、指示に従ってインストールします。

Docker For Mac | Docker

2.2 WindowsPCへのインストール

WindowsPC向けには、「Docker for Windows」が提供されています。このDoker for Windowsは以下の条件を満たすマシンが必要です。

Docker For Windows | Docker

なお、Hyper-Vは、Windows標準の仮想化環境です。こちらに環境の確認方法をまとめました。

いや、Windows7だし。という方は、「Docker Toolbox」というツールが提供されていますので、そちらを使って下さい。

Docker Toolbox | Docker

が、Windows7マイクロソフトが2009年に出したOSです。2009年に生まれた赤ちゃんは、もう小学校2年生です。この夏休みに、Scratchを使って自作ゲームを作っている子もいるかもしれません。IT業界に身を多く大人のみなさんは、Azure/GCP/AWSインスタンスを使うか、Windows10 Proに買い替えるのがおすすめです。

2.3 Linuxへのインストール

ディストリビューションによって、Dockerのインストール手順が違いますので、公式サイトのとおり導入してください。

Docker for CentOS Distribution | Docker

Docker for Debian | Docker

Docker For Ubuntu | Docker

あと、クラウドで利用するときはこちらです。

Docker for AWS | Docker

  • Azure

Docker for Azure | Docker

3.機械学習用Dockerコンテナの起動/停止

Dockerでは、DockerイメージをもとにしてDockerコンテナを起動します。

機械学習でよく使うライブラリ群をインストールしたDockerイメージを作成したので、まずはこれをお試しで起動してみます。

ライブラリ 説明
Python 3.6 Python3.6実行環境
TensorFlow 機械学習ライブラリ
scikit-learn 機械学習ライブラリ
keras TensorFlowやTheanoで実行できるニューラルネットワークライブラリ
jupyter 対話型Python実行環境
scipy 科学計算用ライブラリ
simpy 離散シミュレーションライブラリ
matplotlib グラフ描画ライブラリ
numpy 数値計算ライブラリ(ベクトル/行列計算など)
pandas データ解析ライブラリ
plotly オシャレなグラフ描画ライブラリ
sympy 符号数学ライブラリ
mecab-python3 形態素解析エンジン
librosa 音声信号処理ライブラリ
Pillow 画像処理ライブラリ
h5py HDF5 フォーマットファイル
google-api-python-client GCPを使うためのAPI

このDockerイメージ「asashiho/ml-jupyter-python3」は、DockerHubで公開していますのでそれをもとに、次のコマンドで「ml-container」という名前のDockerコンテナを起動します。 コマンドのpオプションは、コンテナで転送するポート番号を指定してます。 ここでは、JupyterNotebookが8888番ポートを使っています。

$ docker run -p 8888:8888 --name ml-container -it asashiho/ml-jupyter-python3

コンテナは、[Ctrl]+[C]で停止できます。

また、バックグラウンドで動いている場合は、次のコマンドでコンテナを起動/停止できます。

$ docker container start ml-container
$ docker container stop ml-container

コンテナは、次のコマンドで削除できます。

$ docker container rm ml-container

なお、コンテナを削除するとデータも消えますので、データを消したくないときは docker runコマンドでコンテナを起動するときに、Dockerのホストマシン(お使いのPCやクラウドインスタンス)をディレクトリをvオプションでマウントしてください。

4. JupyterNotebookを使う

Dockerコンテナが起動できたら、ブラウザから以下のアドレスにアクセスしてJupyterNotebookを使います。 アクセス先のURLは、docker runコマンドを実行したときのコンソールに表示されます。

クラウドインスタンスの場合は、以下のアドレスでアクセスできます。

http://DockerホストのIPアドレス:8888/?token=<your token>

MacOSまたはWindowsPCのローカル環境の場合は、以下のアドレスでアクセスできます。

http://localhost:8888/?token=<your token>

こんな感じです。

f:id:dr_asa:20170821132838p:plain

5. 環境をカスタマイズしたくなったときは

Dockerイメージは「Dockerfile」という定義ベースのファイルで実行環境の構成を管理しています。

このファイルをカスタマイズし、Dockerfileをビルドすることで、任意のDockerイメージを作成できます。たとえば、Pythonのバージョンを変えたい、TensorFlowを最新にしたい、足りないライブラリがあった、など。

今回お試しで使ったDockerイメージのもとになるDockerfileを公開してますので、ご参考までに。

github.com

Dockerfileのビルドは、docker buildコマンドを使いますが、DockerHubとGitHubを連携させると「Automated Build」という機能が使えます。

これは、GitHubへのpushをトリガーにして、DockerHubでDockerイメージを自動でビルドできる機能です。

f:id:dr_asa:20170821112347p:plain

ビルドに時間はかかりますが、なかなか便利です。

無理のない、よい機械学習ライフを。

© 2017 ASA.