Jupyter Notebookで始める機械学習プログラミング
Python
PythonはWebアプリの開発からちょっとしたツールの開発まで、多目的に利用できるプログラミング言語です。また機械学習ライブラリが充実しているため近年注目を集めています。
次のAnacondaディストリビューションでPythonをインストールすることもできます。
Anaconda
Pythonで機械学習を始めるにはCONTINUUM社の配布しているはAnacondaディストリビューションを活用すると良いでしょう。以下のURLからダウンロートすることができます。
AnacondaにはPython本体だけでなく機械学習に必要なライブラリも梱包されているため、Anacondaをインストールすればすぐに機械学習プログラミングを始めることができます。
Jupyter Notebook
AnacondaにはJupyter Notebookというブラウザ上で動作するPython開発環境も付属しています。ターミナル(コマンドプロンプト)上で jupyter-notebook コマンドを実行するとローカルでサーバプログラムが起動し、ブラウザが起動します。
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イメージはこちらの記事を参考に作っています。勉強になりました。
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が起動します。
floyd run --gpu --mode jupyter
Jupyterを起動している間、GPUインスタンスの利用時間がカウントされるので、利用を終えたらインスタンスを停止しておきましょう。停止するときは JOB NAME(floyd run時のログを参照)を指定します。
floyd stop murayama333/projects/mnist-cnn/1