Murayama blog.

プログラミング教育なブログ

Jupyter Notebookで始める機械学習プログラミング

これからPython機械学習始めたい方向けのまとめです。

Python

PythonはWebアプリの開発からちょっとしたツールの開発まで、多目的に利用できるプログラミング言語です。また機械学習ライブラリが充実しているため近年注目を集めています。

www.python.org

次のAnacondaディストリビューションPythonをインストールすることもできます。

Anaconda

Python機械学習を始めるにはCONTINUUM社の配布しているはAnacondaディストリビューションを活用すると良いでしょう。以下のURLからダウンロートすることができます。

www.anaconda.com

AnacondaにはPython本体だけでなく機械学習に必要なライブラリも梱包されているため、Anacondaをインストールすればすぐに機械学習プログラミングを始めることができます。

Jupyter Notebook

AnacondaにはJupyter Notebookというブラウザ上で動作するPython開発環境も付属しています。ターミナル(コマンドプロンプト)上で jupyter-notebook コマンドを実行するとローカルでサーバプログラムが起動し、ブラウザが起動します。

jupyter.org

Jupyter Notebookの起動方法について補足しておきます。Anacondaインストール後、Windowsでは画面左下のWindowsメニューから「jupyter-notebook」とタイプするとアプリが見つかります。Macでは、ターミナル上でjupyter-notebookコマンドをタイプします。Jupyter Notebookはデフォルトで8888番ポートを使って起動します。ブラウザで http://localhost:8888/ にアクセスすると開発画面が表示されるでしょう。

Jupyter Notebookでは、ノートブックという形式でファイルを作成できます。ノートブックにはPythonコードや実行結果だけでなく、Markdown形式で文章を挿入することもできるので、データ分析の評価レポートを作成しやすいようになっています。またノートブックファイルは拡張子.ipynbという形式保存されます。.ipynbファイルはGitHubやGistなどでも表示できます。

クラウド上でJupyter Notebookを起動する

Jupyter Notebookの実体はブラウザで利用するWebアプリケーションです。そのためサーバ上でJupyter Notebookを起動すれば、手元のパソコンのブラウザからサーバ上でPythonプログラムを実行することも可能です。

ここではあらかじめJupyter環境をインストール済みのDockerコンテナを起動する方法を紹介します。またDeepLearning開発を支援するPaaS型サービスであるFloydHubを紹介します。

DockerでJupyter環境を構築するには

ここではクラウド環境としてAWSのEC2インスタンスUbuntu / Small)があるものとします。

sshでEC2インスンタンスにログインします。まずUbuntuのパッケージ情報を更新しておきます。

sudo apt update

次にDockerをインストールします。

sudo apt install docker.io -y

Dockerコンテナ(murayama333/ai-prog)を起動します。

sudo docker run -p 8888:8888 --name ai-prog -it murayama333/ai-prog

Dockerの出力ログにURLが表示されます。URLはlocalhostとなっているので、EC2のグローバルIPに置き換えてアクセスすると完了です。

ここで利用したDockerイメージはこちらの記事を参考に作っています。勉強になりました。

dr-asa.hatenablog.com

FloydHubで開発する

Dockerを使えばあっという間に開発環境を構築できますが、FloydHubを使えばもっと手軽にJupyter環境を整えることもできます。

FloydHub - Deep Learning Platform - Cloud GPU

FloydHubを一言で説明するなら

FloydHub is Heroku for DL

FloydHubはDeepLearningのためのHerokuです。つまり、DeepLearningのためのPaaS(Platform as a Service)です。FloydHubの素晴らしいところは、クラウド上ですぐに開発&実行ができるだけでなく、GPUインスタンスを利用することができる点です。無料アカウントの場合、GPUインスタンスは 2時間 / 月 まで利用できます。

FloydHub - Deep Learning Platform - Cloud GPU

FloydHub上でアカウントを作成後、開発キット(floyd-cli)をインストールします。

pip install -U floyd-cli

pipはPythonライブラリの追加コマンドです。pipコマンドを利用するにはローカルにPythonがインストールされている必要があります。

floydコマンドが有効になるので、FloydHubにログインします。

$ floyd login

以下、オフィシャルのクイックスタートを参考に動かしてみましょう。

https://docs.floydhub.com/getstarted/quick_start/

GitHubからサンプルのリポジトリをダウンロードしておきます。

git clone https://github.com/floydhub/quick-start.git
cd quick-start

リポジトリの中のファイルの一覧を確認しましょう。

ls
eval.py  LICENSE  mnist_cnn.ipynb  README.md  train_and_eval.py  train.py

以降は、上記の train_and_eval.py プログラムをFloydHub上で実行してみます。

FloydHubプロジェクトを初期化します。

floyd init mnist-cnn

FloydHubでPythonプログラムを実行してみましょう。

floyd run --gpu --env tensorflow-1.3 "python train_and_eval.py"

ここでは --gpu オプションを指定してるので、GPUインスタンス上で実行されます。

FloydHubでJupyter Notebookを起動する

FloydHubのプロジェクトフォルダ上で(先のquick-startフォルダなど)、次のようにコマンドを実行します。

floyd run --mode jupyter

Creating project run. Total upload size: 198.0B
Syncing code ...
[================================] 946/946 - 00:00:00

JOB NAME
-----------------------------------
murayama333/projects/mnist-cnn/1

Setting up your instance and waiting for Jupyter notebook to become available .............

Path to jupyter notebook: https://floydlabs.com/notebooks/xxx

数秒(数十秒)でJupyterが起動します。

GPUインスタンスで起動する場合は、次のように指定します。

floyd run --gpu --mode jupyter

Jupyterを起動している間、GPUインスタンスの利用時間がカウントされるので、利用を終えたらインスタンスを停止しておきましょう。停止するときは JOB NAME(floyd run時のログを参照)を指定します。

floyd stop murayama333/projects/mnist-cnn/1