Post on 28-Jan-2018
Apache
BizReach, Inc.Shinsuke SugayaPredictionIO勉強会 第3回
SparkMLを使った開発方法
自己紹介
名前:菅谷 信介
会社:株式会社ビズリーチ AI室興味があること:
・機械学習やDeep Learning等で解決方法を考える
・オープンソースのプロダクトを作る
Topics
PredictionIOを利用した開発の一連の流れを考えてみる
第三回目にしてようやく実用的な話が
できる気が…
概要
PIOでの開発の前提
・今回はデータの管理からAPI化まで紹介する
・学習はPython/PySparkで行う
・Spark 2.x以上が必要
PIOでの開発の流れ
1. PredictionIOを構築
2. イベントサーバにデータ投入
3. Jupyterでデータ分析・モデル構築
4. Pythonファイル化して、PIOでモデル作成
5. PIOで予測API公開
開発の流れ
PIOの導入
まだPython対応がリリースされていない…(PIO-116のIssueで対応中)
・PIO環境の構築方法は第二回の資料を参照 https://www.slideshare.net/shinsuke/predictionio-77450768
・Python対応ブランチからPIOをcloneして利用 https://github.com/marevol/incubator-predictionio/tree/pyspark
PIOテンプレート作成
・PIOで学習するにはテンプレートの作成が必要
・実際に作るにはサンプルをベースにすると便利
・今回はサンプルテンプレートを利用 https://github.com/jpioug/predictionio-template-iris
https://github.com/jpioug/predictionio-template-boston-house-prices
$ git clone https://github.com/jpioug/predictionio-template-iris.git
アプリ登録
・PIOで利用するにはアプリ登録が必要
・pio app newを実行 →IrisAppとして登録 →トークンは任意
$ pio app new --access-key IRIS_TOKEN IrisApp
データの投入
・イベントサーバにデータを入れる https://github.com/jpioug/predictionio-template-iris/blob/master/data/import_eventserver.py
・自前のプロジェクトで利用する場合は同様に入れる →各種SDKがある
$ python data/import_eventserver.py
テンプレートのビルド
・テンプレートをビルドする(.scalaが対象) →モデルの保存やAPI化でScalaが利用されるため
$ pio build
データの分析など
・Jupyterとかでデータを分析、モデルを検討したい →pio-shellでPySpark&Jupyterを実行する →eda.ipynbを開く →SparkMLでモデルを作れる
https://github.com/jpioug/predictionio-template-iris/blob/master/eda.ipynb
$ PYSPARK_PYTHON=$PYENV_ROOT/shims/python \ PYSPARK_DRIVER_PYTHON=$PYENV_ROOT/shims/jupyter \ PYSPARK_DRIVER_PYTHON_OPTS="notebook" pio-shell --with-pyspark
学習モデル作成
・pio trainでPythonファイルを実行 →学習モデルの作成はバッチ処理化したい →Jupyterで作成したものを.pyにするだけ →モデルの保存はrun_pio_workflow(model)を呼ぶ
https://github.com/jpioug/predictionio-template-iris/blob/master/train.py
$ pio train --main-py-file train.py
予測APIの調整
・自前のプロジェクトに適用する場合 →予測APIのリクエストとレスポンスを調整 →Algorithm.scalaを修正
https://github.com/jpioug/predictionio-template-iris/blob/master/src/main/scala/org/jpioug/template/iris/Algorithm.scala
アプリのデプロイ
・API化するためにはアプリをデプロイする →pio deployを実行する
$ pio deploy
予測APIにアクセス
・localhost:8000/queries.jsonにアクセス →Bodyに予測対象の情報を渡す
$ curl -s -H "Content-Type: application/json" \ -d '{"attr0":5.1,"attr1":3.5,"attr2":1.4,"attr3":0.2}' \ http://localhost:8000/queries.json
まとめ
・データの管理からAPI化まで実現
・SparkMLのアルゴリズムでモデルを作れる
Apache
Thank You