ブラウザ上で稼働するIPython実行環境『IPython Notebook』をAmazon EC2上でサーバ稼働させて使う
先日、『PyData.Tokyo Tutorial & Hackathon #1』という、Pythonでデータの前処理と機械学習についてハンズオンで学ぶ勉強会に参加して来ました。その中で、Pythonを実践する上でとても便利な環境の存在を知りましたのでその共有と、その環境をAWS上で構築・設定した際の作業記録を備忘録として残しておきたいと思います。
目次
IPython Notebookとは
IPython Notebookとは何ぞや?という部分については、以下サイトにそのものズバリの記載がありましたので引用させて頂きます。
IPython Notebookは、IPythonを「notebook」というオプション付きで実行することで使用可能である、ブラウザ上でIPythonスクリプト をノート付きで保存、インタラクティブ実行できるWebアプリです。
IPython Notebookは、「pythonのコードをそのまま全てノートとして保存できる」上に、「IPython的にインタラクティブにその場でコードを実行・編集」できるというスグレモノです。
科学技術計算と教育分野で特に普及中のIPython Notebookですが、日本だとまだ情報が限られていて、使っている人は多くはないと思います(この記事が普及のきっかけになれば幸いです)。英語圏で は、IPython Notebook Viewer(後述)などの登場も相まって、科学技術計算を行うエンジニアを中心に、更にユーザーを増やしているのが最近の現状です。
【チュートリアル】IPython Notebook:再生可能でインタラクティブなWebブラウザ上で作業できるIPython実行用ノート | DERiVE コンピュータビジョン ブログ & メルマガ
現在使っているMac環境ではPython2.7を導入していた&イベントの推奨Pythonバージョンは3.4だったのと、そもそも環境を併用させて汚したく無かったというのもあったので、この『IPython Notebook』の環境をクラウド上に個別に作成し、必要な時だけ利用する事が出来れば一番都合が良いと考えました。(が勉強会参加中にはその術を知りませんでした...) 勉強会終了後、サーバーとして起動させて意図した形で利用する事が可能という情報を見つけ、このエントリを書くに至りました。以下は作業記録となります。
EC2インスタンスの準備
まずはIPython Notebookを導入するEC2インスタンスを用意します。今回はAmazon Linuxを使いました。直近一番新しい、またインスタンスタイプも初期設定のt2.microで特に違和感無く稼動してましたので多目にスペックを見積もる必要も無いと思われます。(取り敢えずは)
セキュリティグループについては、環境構築作業用にSSH(22)、あとIPython Notebookサーバ稼働時に利用する任意のポートを空ける形としておきます。ここでは19999を割り当てました。
Download Anaconda Python Distributionにアクセスし、LinuxバージョンのインストーラのURLを控えておきます。
IPython実行環境のインストール
IPython Notebookはpipコマンドで対応するパッケージを導入する等行う事で利用出来るようになりますが、ここではAnacondaという、データ分析に利用出来るパッケージをまとめて配布しているディストリビューションを使ってIPython Notebookを含めた諸々の環境を導入する方法を使って架橋を整えたいと思います。(AnacondaはWin/Mac/Linuxいずれの環境にも対応している様です。)
EC2にログインし、既存パッケージの更新をひとまず済ませます。
$ ssh -i xxxxxxxxxxxx-key.pem ec2-user@xxx.xxx.xx.xxx $ sudo yum -y update
インストーラをダウンロード。
$ wget http://repo.continuum.io/anaconda3/Anaconda3-2.1.0-Linux-x86_64.sh
そして実行。適宜入力を求められるので必要に応じた値を入力し作業を進めて行きます。
$ bash Anaconda3-2.1.0-Linux-x86_64.sh : Please, press ENTER to continue >>> [※Enter押下] Export Regulations ================== --続ける-- [※スペースキーで行送り] Do you approve the license terms? [yes|no] [no] >>> yes Anaconda3 will now be installed into this location: /home/ec2-user/anaconda3 - Press ENTER to confirm the location - Press CTRL-C to abort the installation - Or specify an different location below [/home/ec2-user/anaconda3] >>> [※Enter押下] : : installing: _cache-0.0-x0 ... Python 3.4.1 :: Continuum Analytics, Inc. creating default environment... installation finished. Do you wish the installer to prepend the Anaconda3 install location to PATH in your /home/ec2-user/.bashrc ? [yes|no] [no] >>> yes Prepending PATH=/home/ec2-user/anaconda3/bin to PATH in /home/ec2-user/.bashrc A backup will be made to: /home/ec2-user/.bashrc-anaconda3.bak For this change to become active, you have to open a new terminal. Thank you for installing Anaconda3! $
インストール完了、以下コンテンツが配備されました。
$ ll -lsa /home/ec2-user/ 合計 340864 4 drwx------ 5 ec2-user ec2-user 4096 3月 7 11:31 . 4 drwxr-xr-x 3 root root 4096 3月 7 11:16 .. 4 -rw-r--r-- 1 ec2-user ec2-user 18 11月 3 23:09 .bash_logout 4 -rw-r--r-- 1 ec2-user ec2-user 176 11月 3 23:09 .bash_profile 4 -rw-r--r-- 1 ec2-user ec2-user 211 3月 7 11:31 .bashrc 4 -rw-r--r-- 1 ec2-user ec2-user 124 3月 7 11:31 .bashrc-anaconda3.bak 4 drwxrwxr-x 2 ec2-user ec2-user 4096 3月 7 11:30 .continuum 4 drwx------ 2 ec2-user ec2-user 4096 3月 7 11:16 .ssh 340828 -rw-rw-r-- 1 ec2-user ec2-user 349003566 9月 30 00:59 Anaconda3-2.1.0-Linux-x86_64.sh 4 drwxrwxr-x 14 ec2-user ec2-user 4096 3月 7 11:30 anaconda3 $
.bashrcを確認すると、実行パスの追加が成されています。
$ cat /home/ec2-user/.bashrc # .bashrc # Source global definitions if [ -f /etc/bashrc ]; then . /etc/bashrc fi # User specific aliases and functions # added by Anaconda3 2.1.0 installer export PATH="/home/ec2-user/anaconda3/bin:$PATH"
Pythonバージョンの確認。sourceコマンドで一旦.bashrcを読み込み、実行バージョンを3.4で更新します。
$ python --version Python 2.6.9 $ source .bashrc $ python --version Python 3.4.1 :: Anaconda 2.1.0 (64-bit) $
IPython Notebook Serverの起動
ここからは以下サイトの情報を参考に立ち上げてみます。
ipython profile create nbserverでサーバー用のプロファイルを作成。
$ ipython profile create nbserver [ProfileCreate] Generating default config file: '/home/ec2-user/.ipython/profile_nbserver/ipython_config.py' [ProfileCreate] Generating default config file: '/home/ec2-user/.ipython/profile_nbserver/ipython_qtconsole_config.py' [ProfileCreate] Generating default config file: '/home/ec2-user/.ipython/profile_nbserver/ipython_notebook_config.py' [ProfileCreate] Generating default config file: '/home/ec2-user/.ipython/profile_nbserver/ipython_nbconvert_config.py'
以下の様な構成でファイル群が新たに作成されました。
$ ll .ipython/ 合計 20 -rw-rw-r-- 1 ec2-user ec2-user 195 3月 7 11:36 README drwxrwxr-x 2 ec2-user ec2-user 4096 3月 7 11:36 extensions drwxrwxr-x 2 ec2-user ec2-user 4096 3月 7 11:36 nbextensions drwxrwxr-x 7 ec2-user ec2-user 4096 3月 7 11:36 profile_default drwxrwxr-x 7 ec2-user ec2-user 4096 3月 7 11:36 profile_nbserver $ ls -la .ipython/profile_nbserver/ 合計 136 drwxrwxr-x 7 ec2-user ec2-user 4096 3月 7 11:36 . drwxrwxr-x 6 ec2-user ec2-user 4096 3月 7 11:36 .. -rw-rw-r-- 1 ec2-user ec2-user 19910 3月 7 11:36 ipython_config.py -rw-rw-r-- 1 ec2-user ec2-user 31814 3月 7 11:36 ipython_nbconvert_config.py -rw-rw-r-- 1 ec2-user ec2-user 24624 3月 7 11:36 ipython_notebook_config.py -rw-rw-r-- 1 ec2-user ec2-user 24656 3月 7 11:36 ipython_qtconsole_config.py drwxrwxr-x 2 ec2-user ec2-user 4096 3月 7 11:36 log drwx------ 2 ec2-user ec2-user 4096 3月 7 11:36 pid drwx------ 2 ec2-user ec2-user 4096 3月 7 11:36 security drwxrwxr-x 2 ec2-user ec2-user 4096 3月 7 11:36 startup drwxrwxr-x 3 ec2-user ec2-user 4096 3月 7 11:36 static $
必要な設定を対象ファイルに追記します。冒頭セキュリティグループで定めた利用ポート(ここでは19999)はここで設定します。
$ vi .ipython/profile_nbserver/ipython_notebook_config.py # 末尾に追記 c.IPKernelApp.pylab = 'inline' c.NotebookApp.ip = '*' # ローカルホスト以外からもアクセス可能にする c.NotebookApp.open_browser = False # ブラウザが自動で開かないようにする c.NotebookApp.port = 19999 # サーバーのポートを指定する
そしてサーバー起動。
$ ipython notebook --pylab inline --profile=nbserver & [1] 7073 [ec2-user@ip-10-0-0-218 ~]$ 2015-03-07 11:40:49.172 [NotebookApp] Using existing profile dir: '/home/ec2-user/.ipython/profile_nbserver' 2015-03-07 11:40:49.174 [NotebookApp] WARNING | Starting all kernels in pylab mode is not recommended, and will be disabled in a future release. Please use the %matplotlib magic to enable matplotlib instead. pylab implies many imports, which can have confusing side effects and harm the reproducibility of your notebooks. 2015-03-07 11:40:49.180 [NotebookApp] Using MathJax from CDN: https://cdn.mathjax.org/mathjax/latest/MathJax.js 2015-03-07 11:40:49.199 [NotebookApp] CRITICAL | WARNING: The notebook server is listening on all IP addresses and not using encryption. This is not recommended. 2015-03-07 11:40:49.199 [NotebookApp] CRITICAL | WARNING: The notebook server is listening on all IP addresses and not using authentication. This is highly insecure and not recommended. 2015-03-07 11:40:49.200 [NotebookApp] Serving notebooks from local directory: /home/ec2-user 2015-03-07 11:40:49.200 [NotebookApp] 0 active kernels 2015-03-07 11:40:49.200 [NotebookApp] The IPython Notebook is running at: http://[all ip addresses on your system]:19999/ 2015-03-07 11:40:49.200 [NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
ブラウザを起動し、予め定めておいたポートでサーバーにアクセスします。以下の様な画面が無事表示されました![New Notebook]を押下してみます。
すると、新たなページが作成されました。IPythonをコマンドで起動した時と同様のインタフェースがWeb上に表示されていますね。
以下の様にコマンドを各種実行し、対応した値が表示されています。表形式の情報がちゃんとテーブル形式で見えていますね。
また、各種グラフもこのように綺麗に表示されています。このような形でインタラクティブに直ぐ結果が返って来るので、作業も捗りそうです!
IPython Notebookの使い方については以下公式情報などをご参照ください。
まとめ
以上、IPython Notebookのサーバ実行に関する手順のご紹介でした。クラウド上にこういった環境を1つ用意しておけば、いつどこであっても独立した環境を同じ状況で活用出来るので便利ですね。私も今後Python及びPythonを使った機械学習の勉強や作業にはIPython Notebookを使って行こうと思います。皆様も是非試してみてください。