目次


卓越したデータ・サイエンスのためにクラウド内でノートブックを使用する

SoftLayer 上で Docker 内に IPython Notebook サーバーをデプロイする

Comments

IPython Notebook は、インタラクティブなコンピューティングや再現可能な調査に使用できる、Web ベースの環境です。以前のチュートリアルで IPython Notebook を IBM Bluemix 上で実行する方法を説明しましたが、その際に述べたように、ストック・ノートブック・サーバーは迅速かつ容易に Bluemix にデプロイできるものの、その結果には制約事項 (一時ストレージや、再起動を制御できないなど) を伴います。

これらの制約事項を克服するための方法が、IPython Notebook サーバーを SoftLayer にデプロイすることです。そのために、このチュートリアルでは以下のことを行います。

  1. SoftLayer 仮想マシン (VM) と、その VM 上で実行される Docker というアプリケーション・コンテナー・エンジンをプロビジョニングします。
  2. Docker Hub から公式 IPython リポジトリーを取り込んで、IPython Notebook サーバーをコンテナー内で実行します。
  3. Data.gov (米国政府のオープン・データ・サイト) が提供する航空会社の定時運航データを調べるサンプル・ノートブックをアップロードして、いろいろと操作します。Data.gov から取得した航空会社の定時運航データの分析結果が含まれるサンプル IPython Notebook のスクリーンショット
    Data.gov から取得した航空会社の定時運航データの分析結果が含まれるサンプル IPython Notebook のスクリーンショット

必要になるもの

SoftLayer VM インスタンスを作成するためのコマンドは、いくつかの引数を取ります。これらの引数は、このサンプル・コードから皆さんの端末にコピー・アンド・ペーストすることができます。

ステップ 1. SoftLayer VM を起動する

最初に、SoftLayer VM とその VM 上で実行される Docker をプロビジョニングします。それには、2 つの方法のいずれかを採ることができます。コマンドラインで作業する方法を選ぶ場合は、Python がインストール済みであれば、SoftLayer CLI を使って VM をオーダーすることができます。グラフィカル環境で作業するという方法を選ぶ場合には、Web ブラウザーで SoftLayer コンシューマー・ポータルから VM をオーダーすることができます。

ここではコマンドラインを使用する方法を説明します。ポータルからオーダーする手順については、このリンク先のブログ投稿の「Provision a VM」セクションを参照してください。

コマンドラインから VM を起動するには、サポートされている方法のいずれかを使用して SoftLayer CLI をインストールします。サポートされている方法は、SoftLayer API Python Client ドキュメントに記載されています。例えば、お使いのローカル PC に pip がインストールされていて、root アクセス権を持っているとしたら、次のコマンドを実行します。

sudo pip install SoftLayer

次に、「sl config setup」と入力し、促されるのに応じて自分の資格情報を入力して CLI を構成します。

sl config setup
Username: parente
API Key or Password: ******
Endpoint (public|private|custom): public

資格情報は、ローカルの ~/.softlayer に保存されます。

ここで、SSH 鍵ペアを生成します。それには、「ssh-keygen -t rsa」と入力し、促されるすべてに応じて入力します。生成された鍵は、dw-ipy という名前で ~/.ssh フォルダー内に保存します。

ssh-keygen -t rsa
Generating public/private rsa key pair.
# Enter file in which to save the key (/Users/parente/.ssh/id_rsa): /Users/parente/.ssh/dw-ipy
Enter passphrase (empty for no passphrase): ******
# Enter same passphrase again: ******
# Your identification has been saved in /Users/parente/.ssh/dw-ipy.
# Your public key has been saved in /Users/parente/.ssh/dw-ipy.pub.
# The key fingerprint is:
86:f4:c8:84:2f:15:52:74:b4:25:79:49:75:0e:9f:30 parente@localhost.local

公開鍵は、dw-ipy というラベルを付けて SoftLayer アカウントに保管します。

sl sshkey add dw-ipy -f ~/.ssh/dw-ipy.pub
SSH key added: 86:f4:c8:84:2f:15:52:74:b4:25:79:49:75:0e:9f:30

今度は、VM インスタンスを作成します。VM インスタンスを作成するためのコマンドは、いくつかの引数を取ります。これらの引数は、このサンプル・コードから皆さんの端末にコピー・アンド・ペーストすることができます。

sl vs create --hostname=ipython --domain=dw.ibm.com --key=dw-ipy --cpu=1 --memory=1024 --os=UBUNTU_14_64 --hourly --d sea01 --postinstall=https://bit.ly/1l2xaWE --wait=600

このコマンドの引数の意味は、以下のとおりです。

  • --hostname--domain には、人間が読んで理解できる VM の識別子を指定します。これらの引数は実際の DNS エントリーには対応していないので、任意の値に設定してください。
  • --key には、前の手順で保管した SSH 公開鍵に割り当てたラベルを指定する必要があります。
  • --cpu--memory には、VM に割り当てるリソースを指定します。
  • --os=UBUNTU_14_64 と指定すると、Ubuntu LTS 14.04 が VM インスタンスにインストールされます。
  • --hourly を指定すると、VM に対して (月単位ではなく) 時間単位で課金されます。
  • --d sea01 と指定すると、VM がシアトル・データ・センターに作成されるようになります (最も近くにあるデータ・センターのリストを取得するには、「sl vs create-options」を実行してください)。
  • --postinstall には、apt-get を使用して Docker, Inc. から最新バージョンの Docker をインストールする単純な bash スクリプトを指す URL を指定しています (もちろん、このスクリプトを信頼する前にその内容を確認することができます。また、そうするべきです)。
  • --wait は、制御を返す前に、指定された秒数の間、コマンドをブロックします。

コマンドに制御が返されると、VM の ID と VM の ready ステータスが出力されます。

:.........:......................................:
:    name : value                                :
:.........:......................................:
:      id : 6229756                              :
: created : 2014-09-17T21:04:38-05:00            :
:    guid : 506e3de8-6b86-47cc-8830-17e27141424c :
:   ready : True                                 :
:.........:......................................:

以下のコマンドを使用して VM に照会を行い、VM が作動可能であることを確認すると同時に VM に接続するためのパブリック IP アドレスを取得します。

sl vs detail VM ID

以下に、一例を示します。

sl vs detail 6229756

: ...................:...............................:
:               Name : Value                         :
:....................:...............................:
:                 id : 6229756                       :
:           hostname : ipython.dw.ibm.com            :

:             status : Active                        :
: active_transaction : -                             :
:              state : Running                       :
:         datacenter : sea01                         :
:                 os : Ubuntu                        :
:         os_version : 14.04-64 Minimal for VSI      :
:              cores : 1                             :
:             memory : 1G                            :
:          public_ip : 50.23.141.114                 :
:         private_ip : 10.28.164.13                  :
:       private_only : False                         :
:        private_cpu : False                         :
:            created : 2014-09-17T21:04:38-05:00     :
:           modified : 2014-09-17T21:06:23-05:00     :
:              vlans : :.........:........:........: :
:                    : :   type  : number :   id   : :
:                    : :.........:........:........: :
:                    : :  PUBLIC :  782   : 605768 : :
:                    : : PRIVATE :  961   : 605770 : :
:                    : :.........:........:........: :
:....................:...............................:

ステップ 2. Docker イメージを取り込む

VM が作動可能になったら、SSH を使用して VM のパブリック IP に接続し、root として認証を行います。この場合、認証には前の手順で生成した秘密鍵を使用することも、SoftLayer から VM に割り当てられたパスワードを使用することもできます。例えば、秘密鍵を使用する場合には、以下のコマンドを実行します。

ssh -i ~/.ssh/dw-ipy root@50.23.141.114

VM に接続した後は、docker ps を実行して、docker CLI がインストールされていること、Docker デーモンが実行中であることを確認します。

エラーが発生した場合、その原因として、VM ポストインストール・スクリプトがまだ実行中である可能性が考えられます。もうしばらく待ってから、再試行してください。

docker が使用できるようになったら、Docker Hub から公式 ipython/scipyserver Docker リポジトリーを取り込みます。

docker pull ipython/scipyserver

リポジトリー層のダウンロードが完了した後、コンテナー・インスタンスを起動します。

docker run -d -p 443:8888 -e PASSWORD=$( read -p "Password: " -s PASSWORD && echo $PASSWORD ) --restart always ipython/scipyserver

この run コマンドの引数には、以下の役割があります。

  • -d によって、コンテナーはバックグラウンドで実行されるようになります。
  • -p では、ホストのポート 443 がコンテナーのポート 8888 にマッピングされるように指定しています。
  • -e では、PASSWORD 環境変数を、ユーザーが入力したパスワードに設定しています。
  • --restart では always を指定することで、Docker デーモンに対し、コンテナー・インスタンスが停止した場合は (例えば、予期せぬ異常終了や VM のリブートで停止した場合など)、常にコンテナー・インスタンスを再起動するように指示しています
  • ipython/scipyserver では、コンテナーの起動ポイントとして使用するイメージを指定しています。

ここで、HTTPS プロトコルを使用して Web ブラウザーで VM のアドレスにアクセスしてください (例えば、https://50.23.141.114 など)。この例では自己署名 SSL 証明書を使用しているため、ブラウザーはサーバー ID を確認できないという警告メッセージを出しますが、このチュートリアルの場合、そのメッセージを無視して続行することができます。SoftLayer ノートブック・サーバーを使用することを真剣に考えている場合は、本物の SSL 証明書を取得してください。

促されるのに応じて資格情報を入力した後、IPython Notebook ダッシュボードが表示されることを確認します。

IPython Notebook ダッシュボードのスクリーンショット
IPython Notebook ダッシュボードのスクリーンショット

ステップ 3. サンプル・ノートブックをダウンロードする

皆さんが新しいノートブック・サーバーをいじれるように、サンプル・ノートブックを作成しておきました。このサンプル・ノートブックには、2014年 6月における米国内のフライトの定時運航について、以下の 3 つの質問が設けられています。

  • 各州での 15 分以上の出発遅延は、どのように分布されるか?到着遅延についてはどうか?
  • 州同士を結ぶフライトで、15 分以上の到着遅延が発生する傾向があるか?
  • 到着遅延は、毎日どのように変化しているか?

サンプル・ノートブックが接続する Cloudant データベースには、あらかじめ Data.gov から関連するデータを取り込んでおきました。サンプル・ノートブックは Cloudant データベースに接続した後、ipython/scipyserver イメージにインストールされた一連の Python 科学計算用パッケージを使用してデータを変換および可視化します。その過程で、HTML としてレンダリングされる Markdown フォーマットで記述されたコメントに、データと結果に関する私の考察を取り込みます。

このノートブックを取得する方法は以下のとおりです。

  1. このリンク先のページにアクセスして、ブラウザーの新しいタブまたはウィンドウで、IPython NBViewer サイトのノートブックの読み取り専用コピーを開きます。
  2. ページの右上にある「Download Notebook (ノートブックのダウンロード)」アイコンをクリックします。
  3. IPython Notebook サーバーのダッシュボード・ページに戻ります。
  4. ダッシュボード・ページで、「To import a notebook, drag the file onto the listing below or click here (ノートブックをインポートするには、ファイルを以下のリストにドラッグするか、ここをクリックします)」と示されている場所を見つけて、「click here (ここをクリック)」の部分をクリックします。
  5. ローカル PC 上にノートブックがダウンロードされた場所を指定して、その場所をアップロード元として選択します。
  6. Exploration of Airline On-Time Performance.ipynb」ノートブックが表示されたら、これをクリックします。

ブラウザーの新しいタブに、ノートブックが開きます。このタブでは、メニュー・オプション、ツールバー・ボタン、または「Help (ヘルプ)」メニューに記載されたキーボード・ショートカットを使用して、ノートブックのセルをナビゲート、実行、編集することができます。航空会社のデータに関心を持った場合、あるいは IPython 環境に興味をそそられたとしたら、ノートブックをいろいろと操作して、独自にデータを探索してください。

次のステップ

このチュートリアルでは、SoftLayer 上の Docker コンテナー内で IPython Notebook サーバーを実行しました。この演習をさらに続けるとしたら、次のような案があります。

  • サンプル・ノートブックには、航空会社の定時運航に関するデータをさらに掘り下げて調べるためのさまざまな提案が含まれています。これらの提案に取り組んで、その成果を新しいノートブックとして共有することもできます。
  • IPython には、並列分散コンピューティングのサポートが組み込まれています。例えば、ノートブックのダッシュボードで「Running (実行中)」タブにアクセスすれば、複数のワーカー・プロセスを起動することができます。複数の CPU を備えた VM 上でコンテナー・インスタンスを実行する場合には、この機能を使用することで、ノートブック内で処理を並列化することができます。
  • この例の Docker コンテナーでは、IPython Notebook サーバーがデフォルトで root として実行されます。同じ VM 上で、おそらく同じ SoftLayer アカウントで複数のコンテナー・インスタンスを実行することを予定している場合は、サーバーを非 root として実行するか、そうでなければ、コンテナーにはまだ何も含まれていないという事態に対処することを検討してください。
  • このチュートリアルで使用した docker run コマンドは、ノートブックをコンテナーに保管します。ノートブック・インスタンスの中で重要な作業を行うようになったら、例えばノートブックを SoftLayer のオブジェクト・ストアに保管するなど、作業のバックアップ戦略を考慮する必要があります。

ダウンロード可能なリソース


関連トピック


コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Cloud computing, Web development
ArticleID=996592
ArticleTitle=卓越したデータ・サイエンスのためにクラウド内でノートブックを使用する
publish-date=02122015