投稿者:Nihito Kawahara

Tech

openscoringを使って超簡単に機械学習モデルをデプロイする

blog-details

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時点では見つかりませんでした。ショック!

変換方法についてはモデル構築アプリケーションごとのツールが公開されているのでぜひ一緒に確認して見てください。

https://github.com/jpmml

 

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ファイルのコマンドで操作できたりします。

とてもシンプルな作りなので扱いやすいですね。

 

参考

超かっこいい公式サイト(ここから確認するのが一番早い)

https://openscoring.io/

 

推定機や変換器の対応状況は下記のリポジトリのREADMEで確認できます。

https://github.com/jpmml/jpmml-sklearn

https://github.com/jpmml/jpmml-sklearn

 

最後に

コラビットは現在エンジニアを募集しています!

  • webサービスを作りたい!
  • AIを作りたい、学びたい!
  • 未経験だけどモノづくりが大好き!プログラミングを仕事にしたい!

な方は当HPからぜひお問い合わせください!お待ちしています。