Elastic Algorithm Service (EAS) は、組み込みの Predictive Model Markup Language (PMML) プロセッサーを提供します。このプロセッサーを使用すると、PMML フォーマットのモデルをオンラインサービスとしてデプロイし、リアルタイム推論を実行できます。このトピックでは、PMML モデルサービスをデプロイして呼び出す方法について説明します。
背景情報
PMML プロセッサーを使用して、PMML フォーマットのアルゴリズムモデルを EAS にデプロイできます。Machine Learning Designer からエクスポートされたアルゴリズムモデルは直接デプロイできます。scikit-learn や XGBoost などのオープンソースフレームワークを使用してトレーニングされたアルゴリズムモデルは、EAS にデプロイする前に PMML フォーマットに変換する必要があります。詳細については、「汎用モデルのエクスポート」をご参照ください。
PMML モデルの詳細については、「PMML 4.4 - General Structure」をご参照ください。
欠損値補完ポリシー
PMML プロセッサーは、欠損値を補完するためのデフォルトポリシーを提供します。PMML モデルファイル内の特徴に対して欠損値補完 (isMissing) ポリシーが指定されていない場合、プロセッサーは次のデフォルト値を補完します。
|
データ型 |
デフォルト補完値 |
|
BOOLEAN |
false |
|
DOUBLE |
0.0 |
|
FLOAT |
0.0 |
|
INT |
0 |
|
STRING |
"" |
ステップ1: サービスのデプロイ
EASCMD クライアントを使用して PMML モデルサービスをデプロイする場合、プロセッサータイプを pmml に設定します。次のコードは、構成ファイルの例を示しています。
{
"name": "eas_lr_example",
"processor": "pmml",
"model_path": "http://examplebucket.oss-cn-shanghai.aliyuncs.com/models/lr.pmml",
"metadata": {
"instance": 1,
"cpu": 1
}
}
EASCMD クライアントを使用してサービスをデプロイする方法の詳細については、「EASCMD または DSW を使用したサービスのデプロイ」をご参照ください。
コンソールから PMML モデルサービスをデプロイすることもできます。詳細については、「コンソールからのサービスのデプロイ」をご参照ください。
ステップ2: サービスの呼び出し
サービスを呼び出すには、次の手順に従います。
-
PMML サービスがデプロイされたら、[Elastic Algorithm Service (EAS)] ページに移動します。呼び出したいサービスを見つけ、[サービスメソッド] 列の [呼び出しメソッドの表示] をクリックして、サービスエンドポイントと認証トークンを取得します。
-
サービスリクエストを構築します。
PMML サービスの入力と出力は JSON フォーマットである必要があります。単一のリクエストには複数のサンプルを含めることができます。各サンプルは、キーと値のフォーマットの特徴データで構成されます。次のコードは例を示しています。
[ { "address": 12, "age": 22, "ed": 4, "marital": 3.0, "region": 2.0, "tenure": 4.0 }, { "address": 2, "age": 34, "ed": 6, "marital": 1.3, "region": 2.1, "tenure": 4.2 } ]説明サービスリクエストを送信する際、ネットワークトラフィックを削減し、サービスパフォーマンスを向上させるために、JSON ファイルから改行とスペースを削除できます。
-
サービスリクエストを送信します。
次のいずれかの方法を使用できます。
重要トークンを HTTP ヘッダーに直接渡すと、トークンはネットワーク経由でプレーンテキストで送信され、セキュリティリスクが高まります。EAS が提供する SDK を使用する場合、トークンはリクエストが送信される前にリクエストに署名するために使用されます。この方法は、より高いセキュリティを提供します。
-
curl コマンドを使用してサービスを迅速にテストします。
サービスは HTTP アクセスエンドポイントを提供します。リクエストを送信する際、認証トークンを HTTP ヘッダーに直接渡すことができます。次のコードは例を示しています。
// リクエストを送信します。 curl -v 18284888792***.cn-shanghai.pai-eas.aliyuncs.com/api/predict/pmml_test \ -H 'Authorization: YmE3NDkyMzdiMzNmMGM3ZmE4ZmNjZDk0M2NiMDA***' \ -d '[{"region": 2.0, "marital":3.0,"tenure":4.0, "age":22,"address":12,"ed":4},{"region": 2.1, "marital":1.3,"tenure":4.2, "age":34,"address":2,"ed":6}]'以下に示すとおり:
-
18284888792***.cn-shanghai.pai-eas.aliyuncs.com/api/predict/pmml_test: これをステップ1で取得したサービスエンドポイントに置き換えます。
-
Authorization: これをステップ1で取得した認証トークンに設定します。
次の応答例を示します。
[{"p_0":0.2856724025030001,"p_1":0.7143275974969999},{"p_0":0.18324957921381624,"p_1":0.8167504207861838}] -
-
Python SDK を使用してリクエストを送信します。詳細については、「Python SDK 使用ガイド」をご参照ください。
次のコードは例を示しています。
#!/usr/bin/env python from eas_prediction import PredictClient from eas_prediction import StringRequest if __name__ == '__main__': # プレースホルダーを、ステップ1で取得したサービスエンドポイントとサービス名に置き換えます。 client = PredictClient('1828488879222***.cn-shanghai.pai-eas.aliyuncs.com', 'pmml_test') # プレースホルダーを、ステップ1で取得した認証トークンに置き換えます。 client.set_token('YmE3NDkyMzdiMzNmMGM3ZmE4ZmNjZDk0M2NiMDA***') client.init() req = StringRequest('[{"region": 2.0, "marital":3.0,"tenure":4.0, "age":22,"address":12,"ed":4},{"region": 2.1, "marital":1.3,"tenure":4.2, "age":34,"address":2,"ed":6}]') for x in range(100): resp = client.predict(req) print(resp)他の言語の SDK の使用方法の詳細については、「サービス呼び出し SDK」をご参照ください。
-
関連ドキュメント
-
他の組み込みプロセッサーを使用して EAS オンラインサービスをデプロイすることもできます。詳細については、「組み込みプロセッサーを使用したサービスのデプロイ」をご参照ください。
-
カスタムプロセッサーを開発し、それを使用して EAS オンラインサービスをデプロイすることもできます。詳細については、「カスタムプロセッサーを使用したサービスのデプロイ」をご参照ください。