サイト内の現在位置

Jupyter Notebookを使ったFrovedis機械学習 導入編

no.0102021.4.28

 データ分析や科学技術計算の分野において、Jupyter NotebookはPythonやRでインタラクティブに試行錯誤しながらプログラミングを行うための環境として幅広く受け入れられています。Pythonのケースで言えば、Jupyter Notebookが内部的にIPythonを呼び出すことで対話的なコードの実行を可能にします。加えて、Jupyter NotebookはMarkdownを使ったドキュメントや画像の埋め込みの他にmatplotlibを使用したグラフを表示するなど、優れたWebベースのコード開発環境を提供します。今回はこのJupyter NotebookとIPythonを使用して、はじめにその設定方法を、続いてSX-Aurora TSUBASAで動作するFrovedisによるデータ処理や機械学習APIの簡単なサンプルコードをデモ形式で御紹介していきます。なお、Frovedisの概要はこちらをご覧ください。

 最初にJupyter Notebookを使用するための前準備について。クライアントPC側のWebブラウザからSX-Aurora TSUBASAで動作するJupyter Notebook サーバを使用するための設定、次にFrovedisを使用する際に必要な環境変数設定について説明していきます。

 クライアントPCのWebブラウザからJupyter Notebook サーバへ接続可能にするため、サーバ側で~/.jupyter/jupyter_notebook_config.pyにFigure-1に示す設定を追加します 。 c.NotebookApp.ip = ‘0.0.0.0’は、任意のIPアドレスからの接続を許可するために指定しています。c.NotebookApp.open_browserは起動時にブラウザを立ち上げるか選択するためのものですが、ここでは不要(False)を選んでいます。c.NotebookApp.notebook_dirは作業ディレクトリの指定となります。

Figure-1  jupyter_notebook_config.pyへの追加内容
Figure-1  jupyter_notebook_config.pyへの追加内容

 続いて、クライアントPCのターミナルからSX-Aurora TSUBASAにssh接続した後に、Figure-2に示すようにsourceコマンドを使いFrovedis サーバの環境変数を設定します。スクリプトによってPYTHONPATH、LD_LIBRARY_PATHといったPath設定の他、mpirunの実行先をSX-Aurora TSUBASAのベクトルプロセッサに切り替える設定が行われます。なお、sshを通してSX-Aurora TSUBASAにターミナルログインする都度、毎回このスクリプトを実行して環境変数を設定しなおす必要があります。この繰り返しを面倒に感じる方は、変更する環境変数設定を~/.bashrcに記述することで、ターミナルログインの度に行うスクリプト実行の手間を省くことも可能です。

Figure-2  sourceコマンドでshell scriptを実行し、環境変数を設定
Figure-2  sourceコマンドでshell scriptを実行し、環境変数を設定

 ではSX-Aurora TSUBASAにssh接続したターミナルからJupyter Notebookを起動します。Figure-3のように表示された後に、クライアントPC側のWebブラウザを起動しURL(この場合、http://localhost:8881/login)を入力することでJupyter Notebookの使用準備が整います。では、Jupyter Notebookを使いながらFrovedisによるデータ処理や機械学習APIの簡単なサンプルコードを実行していきましょう。

Figure-3 Jupyter Notebookの起動
Figure-3 Jupyter Notebookの起動

 サンプルコードを実行する前にデータ準備について簡単にふれておきます。Frovedisに限らず機械学習を行う際、多くの場合、最初に学習やテストに使うデータの準備を行います。何らかの方法で収集したデータを使うほか、機械学習のアルゴリズムを試すようなときには、疑似的にデータを作成し学習につかうことも考えられます。クラスタリング学習を例にとると、scikit-learnライブラリの一つであるdatasets.make_blobsを用いた疑似データ作成が思い浮かびます。

 こうしたデータの用意はSX-Aurora TSUBASAのホストプロセッサであるXeon(以降、VH)で動作するPythonを使って行う他に、Frovedis サーバに用意されているDistributed matrixやDistributed vectorで行うことも可能です。このFrovedis サーバはSX-Aurora TSUBASAのベクトルプロセッサを使って動作するものであり、VHで動作するPythonとは独立した存在です。必要に応じてFrovedisサーバを呼び出すことで処理をベクトルプロセッサにオフロードします。

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

 Distributed matrixには、データの素性に応じて疎行列を圧縮して格納するCRS matrix (FrovedisCRSMatrix)、密行列を格納する dense matrix (FrovedisRowmajorMatrix, FrovedisColmajorMatrix)、そしてFrovedisBlockcyclicMatrixの3種類が用意されています。 FrovedisCRSMatrix、FrovedisRowmajorMatrix、FrovedisColmajorMatrixは主に機械学習アルゴリズムにデータを送り込む用途で使われます。また、FrovedisBlockcyclicMatrixは格納されたデータを使った演算やScaLAPACKによる連立1次方程式、線形最小二乗問題、固有値問題、特異値問題等を解く用途で用意されています。

 CRS matrixは疎行列(行列内の要素に多くの0を含むものです)から0以外のデータだけ抽出して圧縮し格納します。この圧縮により非常に大きなサイズの行列データを効率的にベクトルカードのメモリからベクトルプロセッサに転送して処理することができるようになります。また、最後のBlock Cyclic Matrixは行列をいくつかのブロックに分割し、各ブロックを複数のプロセスとして並列処理して高速化を図るためのものです。

 では、Distributed matrixの使い方をJupyter Notebookを使って確認していきます。初めに、FrovedisCRSMatrixを使ったデモンストレーションを行い、続いてBlock Cyclic Matrixによる演算とScaLAPACKを使った線形代数問題解のサンプルを見てみましょう。


CSR

Dense_matrix