openscoringを使って超簡単に機械学習モデルをデプロイする
openscoringとは
PMMLさえあれば、モデルを簡単にREST APIとしてデプロイできる便利なツールです。
例えば、PythonなりRなりで、めちゃ精度の高いモデルができたとします。
そのモデルを誰もが使える状態にしたい時、例えばWeb APIにしたい時にopenscoringを使えば、推定モデルをweb application上で再実装せずに済むので、大きな時間の節約になります。
テンションもあがってハッピー。時間の余裕もできて月楽族もできるかもね。
PMMLを作成する
まず、Rなりnotebookなりで PMMLを作成します。
PMMLとはpredictive model markup languageの略称で、予測モデルの内容をxmlで定義したものです。
拡張子はfoo.pmmlとしたりbar.xmlといろいろです。要はXMLです。
対象の読者としては下記でモデルを作成しているかもしれません。
- scikit-lean
- Apache Spark
- R
これらで作ったモデルのほとんどはPMMLに変換可能です。ただし一部のロジックに関しては非対応なので要注意です。
具体的には弊社ではApache Sparkを使ってpolynomialExpansion(多項式回帰)の変換を行なっていたのですが、PMMLに変換する術は2018/05/16時点では見つかりませんでした。ショック!
変換方法についてはモデル構築アプリケーションごとのツールが公開されているのでぜひ一緒に確認して見てください。
openscoringのサーバーを立ち上げる
下記の手順でローカル環境でサーバを立ち上げてみましょう。
# gitからcloneする
git clone https://github.com/openscoring/openscoring.git
# buildします
cd openscoring
mvn clean install
# サーバーの立ち上げ
cd openscoring-server
java -jar target/server-executable-1.4-SNAPSHOT.jar
これでhttp://localhost:8080/openscoring/を開くとweb serverにアクセスできます
ただし、上記のendpointでは404になってしまいます。
モデルを登録する
MyRegression.pmmlというファイル名のPMMLを生成したとします。
下記のcurlコマンドでモデルの登録ができます。(MyRegression.pmmlのあるディレクトリで実行してください)
curl -X PUT --data-binary @MyRegression.pmml -H "Content-type: text/xml" http://localhost:8080/openscoring/model/MyRegression
続けて下記のように登録状況が確認できます。
# 登録モデルの一覧を確認
curl -X GET http://localhost:8080/openscoring/model
# 登録したMyRegressionの詳細を確認
curl -X GET http://localhost:8080/openscoring/model/MyRegression
# PMMLを表示
curl -X GET http://localhost:8080/openscoring/model/MyRegression/pmml
詳細情報としては、スキーマ情報(説明変数や被説明変数)などが確認できます。
登録したモデルから推定結果を取得する
まず、下記のような説明変数を定義したjsonを用意します。
{
"id": 1,
"arguments": {
"area": 25,
"age": 10,
"walkingDistance": 400,
"isFirstFloor": 1
}
}
SampleRequest.jsonというファイル名で保存したとします。
次に、下記のcurlコマンドを叩きます。
curl -X POST --data-binary @SampleRequest.json -H "Content-type: application/json" http://localhost:8080/openscoring/model/MyRegression
次のようなレスポンスが返却されます。
{
"id" : "1",
"result" : {
"prediction" : 3356.1634158426973
}
}
ほかにも
推定結果をバッチ処理で実行したり、RESTインターフェースではなくjarファイルのコマンドで操作できたりします。
とてもシンプルな作りなので扱いやすいですね。
参考
超かっこいい公式サイト(ここから確認するのが一番早い)
推定機や変換器の対応状況は下記のリポジトリのREADMEで確認できます。
https://github.com/jpmml/jpmml-sklearn
https://github.com/jpmml/jpmml-sklearn
最後に
コラビットは現在エンジニアを募集しています!
- webサービスを作りたい!
- AIを作りたい、学びたい!
- 未経験だけどモノづくりが大好き!プログラミングを仕事にしたい!
な方は当HPからぜひお問い合わせください!お待ちしています。