目次


機械学習による洞察を本番環境に取り込む

簡単な 6 つのステップで、トレーニング済みの機械学習モデルとパイプラインを本番環境に移行する

Comments

あなたが、驚くほど賢く有能なデータ・サイエンティストなのか、新しい任務に四苦八苦している新任のデータ・サイエンティストなのかわかりませんが、顧客を分類するモデルとインセンティブが購入の意思に与える影響を予測するモデルをトレーニングした後、それらのモデルから引き出した洞察を本番環境に取り込むには、どのような方法をとりますか?最近のデータ・サイエンティスト向けのガイドやドキュメントの大半では、データを見つけてクリーンアップする方法や、モデルをトレーニングする方法に重点を置いていて、洞察を本番環境に取り込むという面倒な作業は開発チームとインフラストラクチャー・チームに任せっきりです。IBM Watson Machine Learning サービスを利用すれば、開発環境から離れることなく、成果物の保存、デプロイ、テストのすべてを実施できます。

Watson Machine Learning は、データに最適なモジュールを作成した後、それらのモデルをオンラインにデプロイするために使用できるクラウド・サービスです。さらに、Spark MLLib と Scikit-Learnで作成したカスタム・モデルをインポートすることも、モデルを自動的に選択してトレーニングすることもできます。つまり、機械学習を普及させるために、一般開発の経験を問わず誰でも簡単にモデルをデプロイできるようになっているのです。

学習の目的

このチュートリアルでは、トレーニング済みの機械学習モデルとパイプラインを、IBM の Machine Learning as a Service オファリングである Watson Machine Learning (WML) 上の本番環境にデプロイする方法を説明します。オンラインにデプロイした後は、ML モデルのフロントエンドとなる自動スケーリング API エンドポイントを一般のユーザーに公開します。

前提条件

このリンク先のページに記載されているサポート対象のフレームワークのいずれかを使用してトレーニングした機械学習モデル

所要時間

WML サービスを作成するところから、トレーニング済みモデルを保存し、モデルをデプロイしてテストするまでの所要時間は 10 ~ 15 分です。

手順

熟練のデータ・サイエンティストでも、熟練のデータ・サイエンティストの卵でも、新しいモデルをトレーニングし、その精度を評価した後は、ここで説明する手順に従って、モデルを本番環境に移行できます。

次の 6 つのステップからなる手順で、機械学習モデルを本番環境にデプロイするプロセスを説明します。

  1. Watson ML サービスを作成する
  2. サービスを利用するための資格情報一式を作成する
  3. SDK をダウンロードする
  4. 認証を行ってモデルを保存する
  5. モデルをデプロイする
  6. モデルを呼び出す

Watson ML サービスを作成する

まずは、モデルをホストする Watson ML サービス・インスタンスを新規に作成します。それには、IBM Cloud 上に用意されている Watson ML サービスを無料で利用することができます。無料枠でホストできるモデルは 5 つ、実行できる予測は 5,000 回です。クレジット・カード情報を求めないサービスとしては、太っ腹と言えるでしょう。このリンク先のページで IBM Cloud アカウントを作成してログインできます。

  1. IBM Cloud にログインしたら、右上のメニューから「Catalog (カタログ)」を選択します。
  2. 「Machine Learning」サービスを検索します。
  3. 検索結果として表示される Machine Learning サービスを選択します。
IBM Cloud の「Catalog (カタログ)」のスクリーンショット
IBM Cloud の「Catalog (カタログ)」のスクリーンショット

サービスの詳細ページに、このサービスの概要、サービスを構成して実行する場所の選択肢、料金プランのメニューが表示されます。

  • 新しく作成する Machine Learning サービスの名前を入力します。
  • 「Lite (ライト)」プランを選択します。
  • 「Create (作成)」をクリックします。
WML のスクリーンショット
WML のスクリーンショット
WML のスクリーンショット
WML のスクリーンショット

サービスを利用するための資格情報一式を作成する

Watson Machine Learning サービスが作成されると、新しく作成されたサービスに関する情報を記載したパネルが表示されます。コードに取り組む前に、SDK または HTTP API 呼び出しを介してサービスに対して認証する際に使用する資格情報一式を作成する必要があります。

  1. 左側のメニューから、「Service Credentials (サービス資格情報)」を選択します。
  2. 「New Credential (新しい資格情報)」を選択します。
  3. デフォルト値をそのまま受け入れて、「Add (追加)」を選択します。
  4. 「View New Credentials (新しい資格情報を表示)」を選択します。
  5. 資格情報をクリップボードにコピーし、後で使えるように保存します。
資格情報を作成する画面のスクリーンショット
資格情報を作成する画面のスクリーンショット
資格情報を作成する画面のスクリーンショット
資格情報を作成する画面のスクリーンショット
資格情報を作成する画面のスクリーンショット
資格情報を作成する画面のスクリーンショット
資格情報を作成する画面のスクリーンショット
資格情報を作成する画面のスクリーンショット

Python SDK をダウンロードする

Watson Machine Learning サービスを作成して資格情報を保存した後の作業はすべて、開発者の立場からすると素晴らしいことに、プログラムで行うことができます。

watson-machine-learning-client ライブラリーは、yspark、scikit-learn、xgboost、mlpipelinepy、ibmsparkpipeline のいずれかのライブラリーに依存するため、そのライブラリーもインストールする必要があります。以下の例では、scikit-learn を使用しています。ライブラリーのドキュメントを参照するには、http://wml-api-pyclient.mybluemix.net/ にアクセスしてください。

pip install watson-machine-learning-client scikit-learn

認証を行ってモデルを保存する

前のステップで保存した資格情報を使用して、Watson Machine Learning サービスに対して認証を行います。

from watson_machine_learning_client import WatsonMachineLearningAPIClient
wml_credentials = {
"url": "https://ibm-watson-ml.mybluemix.net",
"access_key": "*****",
"username": "*****",
"password": "*****",
"instance_id": "*****"
   }
client = WatsonMachineLearningAPIClient(wml_credentials)

機械学習パイプラインとモデルを Watson Machine Learning サービス内に保存します。モデル内にパイプラインを組み込んで、予測を行う前にデータを変換することが重要です。パイプラインが構築されていれば、データに対して fit 関数を呼び出すことでモデルが保存されます。

model = pipeline.fit(train_data)

開発環境内では、モデルに対して予測メソッドを呼び出して予測を行うことができますが、開発環境で予測を行っても本番環境にはそれほど役立ちません。そこで、Watson Machine Learning サービスではデプロイを単純化するために、簡単にモデルを保存できるようになっています。

model_props = {"authorName":"IBM", "authorEmail":"ibm@ibm.com"}
model_artifact = client.repository.store_model(model, name="My Awesome Prediction Model", meta_props=model_props, training_data=train_data)

たったこれだけのコードで、モデルが Watson Machine Learning サービスに保存されます。保存されたモデルの詳細を取得するには、get_details メソッドを呼び出します。

print(json.dumps(client.repository.get_details(model_artifact.uid), indent=2))

モデルをデプロイする

モデルは Watson Machine Learning サービス内に保存されましたが、予測を行うには、その前にモデルをデプロイする必要があります。保存されたモデルをデプロイすると、API スコアリング・エンドポイントの背後にモデルが配置されます。

deployed_model  = client.deployments.create(model_artifact.uid, “Deployment of My Awesome Prediction Model”)

新しくデプロイされたモデルの API エンドポイントとモデルの詳細を表示するには、以下のコマンドを使用します。

print(client.deployments.get_scoring_url(deployed_model))

モデルを呼び出す

モデルがデプロイされたら、エンドポイントを呼び出して、HTTP リクエストで特徴を渡します。以下のサンプル・メソッドで、HTTP POST リクエストを作成する方法を説明します。このように、モデル・パイプラインに必要なフィールドはリクエストのペイロードで指定します。

def get_prediction_ml(featureA, featureB, featureC, featureD):
scoring_url = client.deployments.get_scoring_url(deployed_model))
scoring_payload = { "fields":["FEATUREA","FEATUREB"," FEATUREC"," FEATURED],"values":[[ featureA,featureB, featureC, featureD]]}
header = {'authorization': 'Bearer ' + watson_ml_token, 'content-type': "application/json" }
scoring_response = requests.post(scoring_url, json=scoring_payload, headers=header)
return (json.loads(scoring_response.text).get("values")[0][18])

まとめ

以上のように、わずか数行のコードで、パイプラインを使用したトレーニング済みの ML モデルをサービスとしてデプロイできます。しかもこのサービスは、需要に応じて自動的にスケーリングします。次回、洞察を本番環境に取り込みたいと思ったら、容量計画の実施に取り組んでインフラストラクチャーを構築し、API の背後にモデルが配置されるようにネットワークを構成するという作業をすべて省き、数行のコードをノートブックに追加するだけで、ML モデルを本番環境にデプロイできます。

このようなモデルのデプロイ手法は、どの開発環境でも有効ですが、データ・サイエンス用のクラウド IDE として IBM Watson Studio を使用すれば、さらに容易になります。Watson Studio では、Watson ML に Juypter ノートブックや Zeppelin ノートブックなどのオープンソースのツールに加え、データ・ガバナンス、コラボレーション、スケーリングなどに関する拡張機能を統合できることから、データ・サイエンス・チームと開発チームのワークフローが単純化されます。


ダウンロード可能なリソース


コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Cognitive computing, ビジネス・アナリティクス
ArticleID=1065339
ArticleTitle=機械学習による洞察を本番環境に取り込む
publish-date=04042019