これまでの振り返り
ここまでDriverless AIの起動からモデルの作成、予測結果の取得やモデルの評価について書きました。
これまでの記事はこちら!
まずは起動から!Driverless AI -MLの自動化ツール- Part 1
学習の実行!Driverless AI -MLの自動化ツール- Part 2
モデルの評価! Driverless AI -MLの自動化ツール- Part 3
日本語化もされているので、その情報はこちらをご覧ください。
Driverless AI ついに日本語化!
前回は、作成したモデルにCSVファイルを投入して予測結果を得るところまでやりました。
ただ、いつもブラウザ画面を操作して予測結果を出すのは、業務フローに入れ込めません。
ということで、今回は作成したモデルを外に出して、JavaやPythonで実行できるパイプライン機能を試してみます。
2020年2月17日 追記あり
daimojoライブラリ(MOJO2RUNTIME)について追記しました。
Driverless AIのパイプライン
学習が終わったときの画面を改めて開きます。
中央上部分に黄色のボタンが並んでいますが、ここに DOWNLOAD MOJO SCORING PIPELINE というボタンがあります。
(パイプラインが作られていない場合がありますが、その場合はBUILD MOJO SCORING PIPELINEをクリックします。)
Pipelineとは
Driverless AIで作成したモデルにデータを流し込むためのモジュールです。
これを使うことで、独自のプログラムから機械学習のモデルを使えるようになります。
今回はMOJO pipelineというものを使っていきます。
MOJO pipelineはJava, Python, Rそれぞれの言語で使うことができます。
DOWNLOAD MOJO SCORING PIPELINE をクリックするとこのような画面が表示されます。
※注意 : MOJO pipelineの利用にはLicenseが必要になります。
Free Trialの場合は、そのLicenseで良いですが、Aquarium環境ではLicenseを取得できません。
そのため、MOJO pipelineを使うことはできません。
画面に表示されている DOWNLOAD MOJO SCORING PIPELINE をクリックするとmojo.zip
という名前のzipファイルがダウンロードされます。
このzipファイルを展開してみると中身はこんな感じです。
mojo-pipeline/
├── README.txt
├── example.csv
├── mojo2-runtime-javadoc.jar
├── mojo2-runtime.jar
├── pipeline.mojo
└── run_example.sh
MOJOパイプラインを動かすためにはライセンスが必要です。
今回は、license.sig
というファイルを同じディレクトリに作成しました。
中にはLicenceの文字列が記述されています。
まずはJavaで見ていきましょう。
Java MOJOパイプライン
zipファイルを展開した中に、Java用のサンプルのシェルスクリプトが入っています。
まず試してみたい場合は、こちらを動かしてみましょう。
./run_example.sh pipeline.mojo example.csv license.sig
example.csv
の中身は下のようなデータになっています。
これは、Driverless AIが学習に使ったデータから自動的に生成されています。
Store | Dept | Date |
---|---|---|
1.0 | 9.0 | 2010-03-19 |
7.0 | 4.0 | 2010-02-05 |
6.0 | 8.0 | 2010-04-09 |
3.0 | 8.0 | 2010-02-26 |
7.0 | 8.0 | 2010-02-19 |
1.0 | 2.0 | 2010-03-19 |
3.0 | 8.0 | 2010-04-02 |
5.0 | 10.0 | 2010-03-19 |
3.0 | 3.0 | 2010-02-19 |
4.0 | 2.0 | 2010-03-19 |
このデータを使って実際にMOJO pipelineを実行してみます。
実行時の標準出力はこんな感じです。
~/mojo-pipeline % ./run_example.sh pipeline.mojo example.csv license.sig
+ MOJO_FILE=pipeline.mojo
+ CSV_FILE=example.csv
+ LICENSE_FILE=license.sig
+ CMD_LINE='java -Xmx5g -Dai.h2o.mojos.runtime.license.file=license.sig -cp mojo2-runtime.jar ai.h2o.mojos.ExecuteMojo'
+ cat
======================
Running MOJO2 example
======================
MOJO file : pipeline.mojo
Input file : example.csv
Command line : java -Xmx5g -Dai.h2o.mojos.runtime.license.file=license.sig -cp mojo2-runtime.jar ai.h2o.mojos.ExecuteMojo pipeline.mojo example.csv
+ java -Xmx5g -Dai.h2o.mojos.runtime.license.file=license.sig -cp mojo2-runtime.jar ai.h2o.mojos.ExecuteMojo pipeline.mojo example.csv
Mojo load time: 2.044 sec
Weekly_Sales
11532.768
20871.309
29347.87
58422.03
45508.63
20151.307
10769.156
20628.24
27490.023
4169.9106
Time per row: 5.100 msec (total time: 51.000 msec)
入力データの行分の結果が返ってきています。
また、スクリプトではなくてJavaを直接実行したい場合は以下の形で実行します。
java -Xmx5g -Dai.h2o.mojos.runtime.license.file=license.sig -cp mojo2-runtime.jar ai.h2o.mojos.ExecuteMojo pipeline.mojo example.csv
Javaを直接実行してみます。
実行するときに、csvファイルに書き出してみるとこんな感じになります。
~/mojo-pipeline % java -Xmx5g -Dai.h2o.mojos.runtime.license.file=license.sig -cp mojo2-runtime.jar ai.h2o.mojos.ExecuteMojo pipeline.mojo example.csv >> result.csv
Mojo load time: 2.153 sec
Time per row: 8.100 msec (total time: 81.000 msec)
~/mojo-pipeline % cat result.csv
Weekly_Sales
11532.768
20871.309
29347.87
58422.03
45508.63
20151.307
10769.156
20628.24
27490.023
4169.9106
予測結果だけcsvに書き出されています。
こうすれば、推定結果を別のプログラムで参照したり、プログラムを書いてDBに入れることもできます。
LinuxやMac上でも動くことを確認できました。
実は、IBM iやAIX上でもJava MOJOを実行できます。
Python MOJOパイプライン
次はPythonのMOJOパイプラインを見てきます。
環境
Pythonのバージョン
- Python 3.6
必要ライブラリ
- datatable
- mojoPyRuntime (daimojo)
※インストール方法は後ろで記載します。
Experimetページの DOWNLOAD MOJO SCORING PIPELINE をクリックしたときに表示されるポップアップのPythonタブを選択します。
パイプラインは、mojo.zip
を展開したときに入っているpipeline.mojo
を使います。
Javaの時と同じものです。
daimojoライブラリインストール
mojoPyRuntime をクリックすると、mojoPyRuntimeのwheelがダウンロードできます。
Aquariumの場合は、daimojo-2.1.6+master.43-cp36-cp36m-linux_x86_64.whl
がダウンロードされます。
※バージョンは利用している環境のバージョンによって変わります。
POWERアーキテクチャの場合は、daimojo-2.1.6+master.43-cp36-cp36m-linux_ppc64le.whl
がダウンロードされます。
対応するアーキテクチャ用のwheelを使う必要があります。
このwheelは、Python 3.6でしかインストールできません。
インストールはpipで行います。
pip install daimojo-2.1.6+master.43-cp36-cp36m-linux_x86_64.whl
- 2020年2月17日 追記
2月17日現在、1.8.4.1が最新バージョンです。
このバージョンでは、daimojoライブラリ(MOJO2ランタイム)をOS毎に選択出来るようになっています。
POWERアーキテクチャ上で作ったモデルをLinuxやMac上で動かすことができそうです。
daimojoライブラリは、上部項目リソース内のMOJO2 PYTHON RUNTIME
からダウンロードすることも出来るようになっています。
ライセンスの設定
環境変数にLicense情報を設定します。
ライセンスファイルを指定する場合は、DRIVERLESS_AI_LICENSE_FILE
にファイルパスを設定します。
export DRIVERLESS_AI_LICENSE_FILE=~/License.sig
ライセンスキーを直接設定する場合は、DRIVERLESS_AI_LICENSE_KEY
にBase64の形式で設定します。
Python MOJOパイプランの実行
Java MOJOで使った、パイプラインとサンプルデータを使って動かしてみます。
import daimojo.model
import datatable as dt
# パイプラインの読み込み
m = daimojo.model("./mojo-pipeline/pipeline.mojo")
# データの読み込み
pydt = dt.fread("./mojo-pipeline/example.csv", na_strings=m.missing_values)
# 予測の実施
res = m.predict(pydt)
print(res)
結果は
(py36) root@~ # python pip_from_csv_2.py
Weekly_Sales
-- ------------
0 11532.8
1 20871.3
2 29347.9
3 58422
4 45508.6
5 20151.3
6 10769.2
7 20628.2
8 27490
9 4169.91
Java MOJOの実行時と同じ結果が得られています。
Pythonの場合はCSVから読み込むだけではなく、listとしてデータを持っておけばよいので、利用するバリエーションが多いのではないかと思います。
まとめ
今回はだいぶ細かいトピックでしたが、業務の中に組み込んでいく場合はこのようなモデルの外出しが必要になります。
プログラムで自動的に動かせるので、バッチ的な処理も作ることができますし、既存のフローの中に組み込んでいくこともできるかと思います。
他にも、Python ClientといったDriverless AIの操作すべてをプログラム化することもで来ます。
次回はそのあたりの記事を書く予定です。