Watson Machine Learning(ML)を使ってTensorFlowモデルをデプロイ

昨日、TensorFlowモデルをクラウドにデプロイする際の料金比較を行いました。

その中で4つのクラウドサービスを取り上げたのですが、単純に安価という点を見ると、IBM Cloudが良いようです。実際に使ってみると、簡単にデプロイできますし良いのですが、バージョンの縛りが厳しくなってデプロイ済みのモデルが使えなくなったりすることもあるので(きちんと確認していないのが悪いのですが…)、運用上で気をつける必要があったりします。

それはさておき、デプロイの方法についてまとめておきます。ただ、クラウドサービスの常で、今この方法で正しくても、明日これで正しいという保証はないのでお気をつけください。(IBM Cloudには、その辺でも今まで何度も苦しめられているので…。)

Watson Machine Learning Clientのインストール

Watson MLにモデルをデプロイするには、Watson Machine Learning Clientのインストールが必要です。

pip install watson_machine_learning_client

現時点のWatson Machine Learning Clientは少し古いscikit-learnのモジュールを使用するため、最新のscikit-learnでは動作しません。そこで、下記のコマンドでscikit-learnの古いバージョンに入れ替えます。(こういった操作を心置きなく行うためにもPythonで開発を行う際は仮想環境を使うようにしましょう。)

pip uninstall scikit-learn
pip install scikit-learn==0.22.2

TensorFlowモデルの保存

現在、Watson MLでサポートされているのは、TensorFlow 1.15。Kerasを使う場合は2.2.5です。

モデルのトレーニングが終わったら、H5形式で保存します。

model.save('mymodel.h5')

TGZ形式でアップロードするので、適当なコマンドで圧縮しておきます。

tar cvzf mymodel.tar.gz mymodel.h5

Watson MLのサービス資格情報の確認

IBM Cloudのダッシュボードにログインし、Watson MLのサービス資格情報を確認します。まだWatson MLのインスタンスを作っていない場合は、カタログ画面から作成します。無料で使えるライトプランで構いません。

Watson MLインスタンスのサービスの詳細画面から、サービス資格情報の画面を開くとWatson MLを使用するために必要な情報が確認できます。

この情報コピーし、Notebookを使用している場合は新しいセルで下記のように変数にセットします。

wml_credentials = {
  "apikey": "",
  "iam_apikey_description": "Auto-generated for key ...",
  "iam_apikey_name": "wdp-writer",
  "iam_role_crn": "crn:v1:bluemix:public:iam::::serviceRole:Writer",
  "iam_serviceid_crn": "crn:v1:bluemix:public:iam-identity::a/...",
  "instance_id": "",
  "url": "https://us-south.ml.cloud.ibm.com"
}

モデルのアップロード

下記のコードでWatson ML上にモデルをアップロードします。

from watson_machine_learning_client import WatsonMachineLearningAPIClient

client = WatsonMachineLearningAPIClient(wml_credentials)

metadata = {
  client.repository.ModelMetaNames.NAME: 'mymodel',
  client.repository.ModelMetaNames.FRAMEWORK_NAME: 'tensorflow',
  client.repository.ModelMetaNames.FRAMEWORK_VERSION: '1.15',
  client.repository.ModelMetaNames.RUNTIME_NAME: 'python',
  client.repository.ModelMetaNames.RUNTIME_VERSION: '3.6',
  client.repository.ModelMetaNames.FRAMEWORK_LIBRARIES: [{'name':'keras', 'version': '2.2.5'}]
}
client.repository.store_model(model='mymodel.tar.gz', meta_props=metadata)

この処理は少し時間がかかるようです。

モデルのデプロイ

最後にモデルをデプロイしますが、この操作はWatson Studioを使ってやった方が良いでしょう。Watson Studioのインスタンスを作っていない場合は、IBM CloudのダッシュボードからWatson Studioのインスタンスを作っておきます。

Watson Studioの画面では適当なプロジェクトを作成し、先ほど使用したWatson MLのインスタンスを関連サービスとして紐づけておきます。

プロジェクトの資産画面を開くと、Watson Machine Learningモデル欄に、アップロードしたモデルが表示されているでしょう。

アップロードしたモデルをクリックし、さらにデプロイメントタブを開くと、「デプロイメントの追加」というリンクがあるので、それをクリックします。(この画面はすでにデプロイ済みの状態です。)

デプロイメントの作成画面が開くので、適当な名前をつけて保存ボタンをクリックすれば、デプロイ完了です。

デプロイしたモデルの使用

デプロイ完了後、作成したデプロイメントを開き、実装タブを表示すると、デプロイしたモデルを使用するために必要な情報が揃っています。画面下部には実装例も表示されますので、参考にすると良いでしょう。

この記事を書いた人

井上 研一

株式会社ビビンコ代表取締役、ITエンジニア/経済産業省推進資格ITコーディネータ。AI・IoTに強いITコーディネータとして活動。2018年、株式会社ビビンコを北九州市に創業。IoTソリューションの開発・導入や、画像認識モデルを活用したアプリの開発などを行っている。近著に「使ってわかった AWSのAI」、「ワトソンで体感する人工知能」。日本全国でセミナー・研修講師としての登壇も多数。