LoginSignup
0
1

More than 3 years have passed since last update.

Cloud Pak for DataでOnline型デプロイしたpythonモデルと関数をフォーム形式の入力データでテストする

Last updated at Posted at 2020-06-26

Cloud pak for Data (以下CP4D) のデプロイメントスペースでモデルをOnline型にデプロイすると、デプロイメントの詳細画面で動作をテストすることができます。
テスト実行に使うサンプル入力データを指定するやり方として、以下のようなフォーム形式での指定と、
image.png

JSON形式での指定が可能です。
image.png

フォーム形式を使うには、モデルを入力スキーマ付きで作成する必要があります。
Modeler Flow (SPSS)で作成したモデルは自動的に入力スキーマがつくようですが、Pythonで作成したモデルはWML clientで保存する際にメタ情報として入力スキーマを指定する必要があります。

Pythonで作成したモデルを入出力スキーマ付きで保存する方法

以下のコードは、WML clientを使って作成したscikit-learnモデルをデプロイメントスペースに保存しているものです。WML clientの使い方については、こちらの記事を参照。

フォーム形式に必須なのは入力スキーマだけですが、ついでに出力スキーマもつけています。

モデルの場合
meta_props={
    client.repository.ModelMetaNames.NAME: "sample_iris_model",
    client.repository.ModelMetaNames.RUNTIME_UID: "scikit-learn_0.22-py3.6",
    client.repository.ModelMetaNames.TYPE: "scikit-learn_0.22",
    client.repository.ModelMetaNames.INPUT_DATA_SCHEMA: [{
        "id":"input",
        "type":"list",
        "fields":[
            {'name': 'sepal length (cm)', 'type': 'double'},
            {'name': 'sepal width (cm)', 'type': 'double'},
            {'name': 'petal length (cm)', 'type': 'double'},
            {'name': 'petal width (cm)', 'type': 'double'}
        ]
    }],
    client.repository.ModelMetaNames.OUTPUT_DATA_SCHEMA: {
        "id":"output",
        "fields": [
            {'name': 'iris_type', 'type': 'string','metadata': {'modeling_role': 'prediction'}}
        ]
    }
}

model_artifact = client.repository.store_model(model, meta_props=meta_props, training_data=X, training_target=y)
model_id = model_artifact['metadata']['guid']
関数(function)の場合
meta_props = {
    client.repository.FunctionMetaNames.NAME: 'sample_iris_scoring_func',
    client.repository.FunctionMetaNames.RUNTIME_UID: "ai-function_0.1-py3.6",
    client.repository.FunctionMetaNames.SPACE_UID: space_id,
    client.repository.FunctionMetaNames.INPUT_DATA_SCHEMAS: [{
        "id":"input",
        "fields": [
            {"metadata": {}, "type": "double", "name": "sepal length (cm)", "nullable": False},
            {"metadata": {}, "type": "double", "name": "sepal width (cm)", "nullable": False},
            {"metadata": {}, "type": "double", "name": "petal length (cm)", "nullable": False},
            {"metadata": {}, "type": "double", "name": "petal width (cm)", "nullable": False}
        ]
    }],
    client.repository.FunctionMetaNames.OUTPUT_DATA_SCHEMAS: [{
        "id":"output",
        "fields": [
            {"metadata": {'modeling_role': 'prediction'}, "type": "string", "name": "iris_type", "nullable": False}
        ]
    }]
}

function_details = client.repository.store_function(meta_props=meta_props, function=iris_scoring)
function_id = function_details['metadata']['guid']

補足: CP4D v3.0.1からの変更点

厳密に言うと、CP4DのバージョンではなくWML clientのバージョンv1.0.95からの変更点です。
CP4D v3.0.1にはデフォルトでWML client v1.0.95が含まれています。

変更点は、モデルの入力スキーマをdict型ではなくlist型で指定するようになったことです。上記のサンプルコードはINPUT_DATA_SCHEMAをlist型で指定しています。
この変更は、複数の入力データテーブルに対応するためのもののようですが、v1.0.95より前はdict型で指定していたため、下位互換性のためv1.0.99以降でdict型を指定してもエラーにならないように修正されています。

なお、私が試したところ、v1.0.95でlist型で指定してもエラーになりました。(これはこれで問い合わせ中)
v1.0.103ではうまくいくので、pip install -U watson-machine-learning-client-V4でアップグレードしてから使うことをオススメします。

0
1
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
0
1