サイト内の現在位置

jupyter(仮)

no.0102021.4.30

 jupyter notebook上でPythonプログラミングを行う機会はは多いかと思います。
Jupyterカーネルが内部的にipythonを呼び出すことによりインタラクティブな形でコードを実行可能なだけでなく、Markdownを使ったドキュメントをコードの間に埋め込むことやmatplotlibによるグラフの表示など、優れたwebベースのコード開発環境です。
今回はjupyter notebookを使いながらSX-Aurora TSUBASAでFrovedisによるデータ処理や機械学習APIの簡単なサンプルコードを実行しながら、デモ形式でFrovedisを御紹介していきます。

 まず初めに、前準備について。クライアント側のwebでSX-Aurora TSUBASAで動作するjupyter notebook serverを使用するための設定、そしてFrovedisを使用するための環境変数設定について説明していきます。


 クライアント側のwebからJupyterNotebook serverへ接続できるようにするためにクライアントPCで~/.jupyter/jupyter_notebook_config.pyに以下の設定を追加します。

 c = get_config()
 c.NotebookApp.ip = '0.0.0.0'
 c.NotebookApp.open_browser = False
 c.NotebookApp.notebook_dir = '/path/to/save/notebook'

 続いて、sourceコマンドを用いたスクリプトを実行し、Frovedis server実行のための環境変数を設定します。
実行するスクリプトによりPYTHONPATH、LD_LIBRARY_PATHといったPath設定の他、mpirunの実行先をSX-Aurora TSUBASAのベクトルプロセッサに切り替える設定が実施されます。SSHを通してSX-Aurora TSUBASAにターミナルログインするたびにこのスクリプトを実行して環境変数を設定しなおす必要があります。変更する環境変数を~/.profileに設定を記述することでターミナルログインの度にスクリプトを実行しないようにすることも可能です。

  ターミナルでJupyter Notebookを起動します。次のように表示されたら、次にクライアントPCのwebブラウザーを起動してURLを入力します。passwordを入れるとこれでJupyter Notebookの使用準備が整います。


 Frovedisに限らず、scikit-learnによる学習を考えるとき、作業としてデータの用意があげられます。データは何らかの方法で収集したたものを使うほか、疑似的に作成したデータで学習をテストすることも可能です。
例えばクラスタリング学習ではdatasets.make_blobsを用いたデータ作成が考えられます。このようなデータの用意をSX-Aurora TSUBASAのホストサーバで動作するPythonで実施する他、Frovedis serverに用意される Distributed matrixやDistributed vectorを使って行うことも可能です。

 Distributed matrixやdistributed vectorを使うメリットとして、機械学習する際にSX-Aurora TSUBASAのホストサーバ(以降、ホストサーバ)からベクトルプロセッサへのデータ転送によるコストを削減できる点にあります。
ホストサーバのPythonで用意したデータをFrovedis serverで機械学習するにはベクトルプロセッサに転送しなければなりませんが、初めからベクトルプロセッサ側でデータを準備することによって転送することなく学習に落とし込むことができます。さらには、データ格納方法を工夫することにより高速な学習処理が行えるよう配慮がなされています。

 Distributed matrixには、データの素性に応じて疎行列を圧縮して格納するCRS matrix (FrovedisCRSMatrix)、密行列を格納する dense matrix (FrovedisRowmajorMatrix, FrovedisColmajorMatrix)、そしてFrovedisBlockcyclicMatrixの3種類が用意されています。
CRS matrixは疎行列(行列内の要素に0を多く含むものです)から0以外のデータだけ抽出して圧縮する形式のものですが、こうすることによって非常に大きなサイズの行列データであっても効率的にメモリからプロセッサに転送して処理することができるようになります。
また、最後のBlock Cyclic Matrixは行列をいくつかのブロックに分割し、各ブロックを複数のプロセスとして並列処理することで高速化図るためのものです。


では、早速3種類のDistributed matrixの使い方をJupyter Notebookを使って確認していきます。

plot_kmeans_assumptions