Google Cloud Platformに、H2OFlowの環境を構築する。

Google Cloud Platformに、H2OFlowの環境を構築する。

最近、DataRobot という会社が急成長しているそうです。「AIの民主化の実現」という言葉の下、データを突っ込んだら良い感じのモデルを作成してくれるそうです。ただ、お値段がそれなりのようで富裕層しかその恩恵を受けられません。宇宙(そら)に送られて選挙権を奪われているスペースノイドのようです(笑)。というわけで、今回は同じような機能を備えたオープンソースのH2O.aiGoogle Cloud Platform(GCP)のCompute Engine(CE)を利用して、お金が無くても「AIの民主化」に加われるようにしたいと思います。クラウドだと起動した時間の料金ですし、マシンスペックも随時変更可能なのでお財布に優しいですから。

h2o.aiとは

環境構築をする前に、簡単にH2O.aiの説明をしておきます。

H2O.aiは、機械学習を行うオープンソースになります。1つのデータに対して複数の手法を行い、最も精度が良いモデルを提案するautoMLの機能をGUIで行えることが一番の魅力だと思います。もちろん、個別の手法のみで行うことも可能です。Garthner社の2018年のレポーティングでは、「データサイエンス&マシーンラーニングのプラットフォーム」でリーダーとして位置づけられています。

Gatner2018

PythonやRから使うことも可能ですが、専門家でなくても分析できるようにするためWebブラウザからGUIで扱える「H2O Flow」というクラウド上(GCP)に構築していきます。

サーバーの用意

インスタンスの作成

先ず環境サーバーを用意します。GCPのコンソールにログイン後、メニューから「Compute Engine」-「VMインスタンス」-「インスタンスを作成」でCEを作成します。

今回は下記の箇所を次のようにしてます。

  • 名前 : h2o-server
  • リージョン : us-east1(サウスカロライナ)
  • マシンタイプ : vCPU×8
  • ブートディスク : Ubuntu16.04LTS, サイズ(GB):64

スペックはお財布と相談して、適宜変更してもらえればと思います。

ポートの開放

メニューの「VPCネットワーク」-「ファイアーウォール」-「ファイアーウォール ルールの作成」でポートの開放を行います。H2Oは54321番ポートを利用します。以下の箇所を次のように設定します。

  • 名前 : h2o
  • ターゲット : ネットワーク上のすべてのインスタンス
  • ソースIPの範囲 : 0.0.0.0/0
  • プロトコルとポート : TCPにチェックを入れて,54321と入力

これでインストールするサーバーの用意は完了です。

インストール

作成したCEにSSHで接続して、必要なソフトウェアのインストールを行います。先ずはJavaの環境を設定します。

$ sudo apt-get update
$ sudo apt-get install openjdk-8-jdk

H2Oをダウンロードしてきます。

$ wget http://h2o-release.s3.amazonaws.com/h2o/rel-xia/1/h2o-3.22.0.1.zip
$ sudo apt-get install unzip
$ unzip h2o-3.22.0.1.zip

3.22.0.1の部分はバージョンなので、最新をダウンロードしたい場合は適宜変更してください。

SSHトンネルの設定をしておきます。
接続するローカルPCでSSH鍵を作成して、公開鍵を確認します。

$ ssh-keygen -t rsa -f ~/.ssh/h2oai -C <gcp_user_name>
$ cd ./ssh
$ more h2oai.pub
ssh-rsa (中略) <gcp_user_name>

表示された公開鍵(ssh-rsaからまでの文字列)をコピーしておきます。それを、GCPのコンソールからインスタンスに登録します。「Compute Engine」-「VMインスタンス」から、作成したインスタンスをクリックして「編集」を行います。SSH認証鍵で先程の鍵を登録して、画面下の「保存」をクリックします。

SSHトンネルを試してみます。リモート側のPCから以下のコマンドを打ち込みます。

$ ssh -L 54321:localhost:54321 <gcp_user_name>@<外部IDアドレス> -i ~/.ssh/h2oai

アクセスできたらトンネル開通です。サーバー側でh2oを起動して、ローカル側からWebブラウザを使ってアクセスしてみます。

$ cd ~/h2o-3.22.0.1
$ java -jar h2o.jar

ブラウザからlocalhost:54321にアクセスして、以下の画面が表示されればOK。

H2oflow

自動起動の設定

このままだと毎回javaから起動しなくては行けないので、インスタンス起動時に自動でh2oを立ち上がるようにしておきます。/etc/rc.localのexit 0の前に起動コマンドを書いておきます。

#!bin/sh -e
(略)
java -jar /home/<gcp_user_name>/h2o-3.22.0.1/h2o.jar
exit 0

ただし、固定IPを設定していない場合はインスタンス起動するたびに外部IPが変更されるので、SSHトンネルでの接続の際はその部分を修正が必要になります。

まとめ

今回は、モデリング作業を半自動化してくれるH2Oの環境構築を行いました。一度に複数のモデルを試して最適なモデルを提示してくれる上にGUIで操作ができるので、一度構築してしまえば便利です。次回は実際にH2Oの使い方を記事にしていこうと思います。

Settingカテゴリの最新記事