2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Waton OpenScale でカスタム機械学習モデルをモニタリングする

Last updated at Posted at 2020-07-17

OpenScaleは機械学習モデルの精度やバイアス、ドリフトをモニタリングする製品ですが、IBM製品のWatson Machine Learning上で稼働する機械学習モデルだけでなく、AWS、Azure上で稼働するモデルの他、カスタム機械学習モデルもサポートしています。

本記事ではカスタム機械学習モデルのモニタリングについて紹介します。

カスタム機械学習モデルの要件

カスタム機械学習モデルは以下リンク先にある2つのREST APIエンドポイントを公開する必要があります。
https://aiopenscale-custom-deployement-spec.mybluemix.net/#/
image.png

  • /v1/deployment
    • デプロイされたモデルの詳細をリストで返すエンドポイントです。OpenScaleでモニタリングの対象を選択する際に、内部的にはOpenScaleからこのエンドポイントが呼ばれているようです。
  • /v1/deployments/{deployment_id}/online
    • 入力データに対してスコアリング結果を返すエンドポイントです。OpenScaleがサポートする入出力フォーマットで構成する必要があります。

業務アプリケーションからスコアリング・エンドポイントに対して入力が送信されると、モデルによる予測結果が返ります。入力と予測結果を合わせて、OpenScaleが提供するペイロード・ロギング・エンドポイントに送信すると、OpenScale内部のDBに保管され、バイアスやドリフトの算出のために使用されます。

image.png

カスタム機械学習モデルの作成

上記の要件を満たすカスタム機械学習モデルを、今回はKubernetes上で稼働するアプリとして構成します。こちらで公開しているものをベースにシンプルな実装にしたものを以下に公開しています。

今回はIBM CloudのKubernetes Serviceで以下の手順で実行可能です。(KubernetesやContainer Registry等は構成済みの前提)

ローカルで稼働確認

$ https://github.com/schiyoda/custom-ml-engine.git
$ cd custom-ml-engine
$ pip install -r requirements.txt
$ python run_server.py

アプリケーションがhttp://0.0.0.0:5000/で起動します。以下ようにサンプルを実行し、結果が返ってくることを確認します。

$ python examples/score_credit.py 


******************************************
Prepare scoring payload ...
Score the model ...
Return predictions ...

{'fields': ['prediction', 'probability'], 'labels': ['Risk', 'No Risk'], 'values': [['No Risk', [0.8823126094462725, 0.1176873905537274]], ['No Risk', [0.6755090846150376, 0.3244909153849625]], ['No Risk', [0.8944991421537971, 0.10550085784620292]], ['No Risk', [0.9297263621482206, 0.07027363785177945]]]}

******************************************

IPアドレスの変更

IBM CloudのコンソールでWorker NodeのPublic IPを確認し、run_server.pyのPUBLIC_IPを修正します。
image.png

Dockerイメージの作成

$ docker build -f Dockerfile -t custom-ml-engine:1 .

以下コマンドでDockerイメージを起動します。

$ docker run --name customml -p 5000:5000 -td custom-ml-engine:1
765d0c099c3ed028f7dac689703d05f9b09ccfdd7a806128bb6932f111195161

先ほどと同様、サンプルを実行し、稼働確認します。

$ python examples/score_credit.py 

Kubernetesで実行

IBM Cloudにログイン

$ ibmcloud login -a https://cloud.ibm.com

Container Registryのnamespace作成

$ ibmcloud cr namespace-add sc_cr

CLIにログイン

$ ibmcloud cr login

Dockerイメージにタグ付け

$ docker tag custom-ml-engine:1 us.icr.io/sc_cr/custom-ml-engine:1

DockerイメージをContainer RegistryにPush

$ docker push us.icr.io/sc_cr/custom-ml-engine:1

登録の確認

$ ibmcloud cr image-list
イメージをリストしています...

リポジトリー                       タグ   ダイジェスト   名前空間   作成日        サイズ   セキュリティー状況   
us.icr.io/sc_cr/custom-ml-engine   1      477d54cb80a4   sc_cr      3 hours ago   201 MB   問題なし   

OK

Kubernetesクラスターに接続

$ ibmcloud ks cluster config --cluster CustomMLEngine

デプロイメントの作成

$ kubectl create deployment custom-ml-engine-deployment --image=us.icr.io/sc_cr/custom-ml-engine:1

サービスの作成(アプリケーションの公開)

$ kubectl create -f service.yaml

IPアドレス、ポートの確認

$ kubectl describe service custom-ml-engine-service
$ ibmcloud ks workers --cluster CustomMLEngine

OpenScaleでモニタリングの構成

機械学習プロバイダーの構成で、「カスタム環境」を選択し、KebernetesのAPIエンドポイントを指定します。

image.png
image.png

デプロイメントの選択から、構成したカスタム機械学習モデルがリストされるので、こちらを選択します。
image.png

以降は通常のOpenScaleの手順で構成が可能です。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?