機械学習に必要なマシンリソースをどのように管理されていますか?
クラウド上の仮想マシンやサービスを利用するケース、ローカルPCでなんとか頑張るなど、各個人でリソースを確保しているというケースも多いのではないでしょうか。
ここでは、TDSEで活用しているJupyter Notebookの実行環境としての計算資源の共有についてご紹介します。
Jupyter Notebookとは、ブラウザベースでプログラムを実行し、実行結果を記録できるツールです。データの加工、数値シミュレーション、統計モデリング、データの可視化、機械学習などを行うときに広く一般的に使われるツールです。
ローカルPCへのインストールは簡単で、Python環境がすでにある場合、以下のコマンドでインストールし実行することができます。
ブラウザが立ち上がり、すぐに分析作業に取り掛かれます。
簡単な分析や機械学習であれば、このままで十分便利に利用できますが、大規模なデータの学習処理などでは、リソース不足になってしまいます。
このようなニーズのたびにPCのスペックを上げることも難しいことと思います。
そこで、実行環境を別のリソースで行うことを考えてみたいと思います。
インストールしたマシン上で実行するのではなく、別のリソースで行うには、Jupyter Enterprise Gatewayを構築することで解決します。
Jupyter上のプログラムの実行環境のことをカーネルと呼びます。Jupyterが様々な言語をサポートしているのも、それぞれの言語環境のカーネルが提供されているからです。このカーネルをローカルPCではなく、リモートカーネルとして提供できるサーバがJupyter Enterprise Gatewayです。
Jupyter Enterprise GatewayはLOCALやYARN、Docker Swarmなどへデプロイすることができます。Jupyter Enterprise Gateway は共通的な計算資源を分析者に提供します。ですので、TDSEでは様々なパブリッククラウド上に容易に構築でき、スケーラブルな運用をしてきたいため、Kubernetes上にデプロイし利用しています。
それでは、構築の手順をご紹介します。
以下はすでにKubernetesのクラスタが存在している状態(作成済みの状態) からの手順です。お使いのクラウドなどで事前にクラスタを構築しておいてください。
まずは、インストールターゲットのクラスタであるかを確認します。
ターゲットが確認出来たら、GitHubからJupyter Enterprise Gatewayのクローンを取得します。
Jupyter Enterprise Gatewayの利用するネットワークの設定を行います。
Jupyter Enterprise Gateway のデフォルトのサービスはNodePortで設定されています。
NodePortのままでも利用可能ですが、ノード単位でIPが割り振られる場合等、利用用途に合わせて各種Serviceを設定します。
今回はLoad Balancerで設定したケースを紹介します。
以下設定例です。
Jupyter Enterprise Gatewayのウェブサイト
(https://jupyter-enterprise-gateway.readthedocs.io/en/latest/kernel-kubernetes.html)を参照し、必要に応じて設定変更をします。
設定が完了したら、以下のコマンドでデプロイします。
成功したら、以下のコマンドで設定が反映されているか確認します。
それでは、ローカルPCのJupyter Notebookから接続してみます。
デフォルトで設定されているゲストアカウントを利用します。
以下のようにNewからリモートカーネルが選択できるようになっていれば成功です。
このようにローカルのJupyter Notebookを利用しながらプログラムの実行は計算資源用のサーバで実行することができます。これにより、Jupyter NotebookユーザーからCPU、メモリへの関心を分離できます。なおGPUを使うには、カーネルのイメージとクラスタの設定が必要となります。
Jupyter Enterprise Gateway上のカーネルはリモートであり、ローカルPCとは別のファイルシステムを利用しています。機械学習や分析の作業では、CSVファイル等のファイルを扱うことは一般的に行われることであり、これらのファイルをリモートカーネルで取り扱えるようにする必要があります。
TDSEでは、SFTPのサーバを立てて、リモートカーネルからマウントできるように構築しています。
また、カーネルから社内のGitリポジトリにも接続することも実施しており、カーネル上に必要な資材をクローンすることが可能となっています。
Jupyter Enterprise Gatewayの計算資源への接続は、Jupyter Hub上のNotebookからも行うことができます。Jupyter Hubは、マルチユーザ環境を実現する機能で、個別のPCにインストールすることなくJupyterを利用することができます。
以下のようにランチャーからリモートカーネルを選択できるようになります。
案件ごとに分析を行う環境を構築するなど煩雑になっている場合、Jupyterのさまざまなソリューションを利用することにより、共通的に管理することができます。
TDSEでは、このような環境の設計・構築をご支援することが可能です。お気軽にご相談ください。