Elastic Algorithm Service (EAS) は、PMML形式のモデルをオンラインサービスとして展開し、オンラインでリアルタイムの推論タスクを実行するための組み込みの予測モデルマークアップ言語 (PMML) プロセッサを提供します。 このトピックでは、PMMLモデルサービスをデプロイして呼び出す方法について説明します。
背景情報
PMMLプロセッサを使用して、EASにおいてPMMLフォーマットのアルゴリズムモデルを展開することができる。 Machine Learning Designerからエクスポートされたアルゴリズムモデルは、EASに直接展開できます。 ただし、scikit-learnやXGBoostなどのオープンソースアルゴリズムフレームワークを使用してトレーニングされたアルゴリズムモデルは、EASに展開する前に、まずPMML形式に変換する必要があります。 詳細については、「モデルのエクスポート」をご参照ください。
詳細については、PMML 4.4-一般構造をご参照ください。
ミッシング値インピュテーション
PMMLプロセッサは、欠落値を代入するデフォルトポリシーを提供します。 PMMLファイルのフィーチャ列に不足値の代入 (isMissing) ポリシーが指定されていない場合、デフォルトでは次の値が代入されます。
データ型 | 帰属値 |
BOOLEAN | false |
DOUBLE | 0.0 |
FLOAT | 0.0 |
INT | 0 |
STRING | "" |
手順1: モデルサービスのデプロイ
EASCMDクライアントを使用してPMMLモデルサービスをデプロイする場合は、processorパラメーターを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を使用したモデルサービスのデプロイ」をご参照ください。
Platform for AI (PAI) コンソールでPMMLモデルサービスをデプロイすることもできます。 詳細については、「PAIコンソールでのモデルサービスのデプロイ」をご参照ください。
ステップ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ファイルから改行文字とスペース文字を削除する必要があります。
サービスリクエストを送信します。
次の方法がサポートされています。
重要curlコマンドを実行してリクエストを送信すると、認証トークンがHTTPヘッダーで指定され、インターネット経由でプレーンテキストで送信されます。 EAS SDK for Pythonを使用してリクエストを送信すると、トークンがリクエストに署名するために使用され、セキュリティが向上します。
curlコマンドを実行してリクエストを送信します。
PMMLサービスはHTTPアクセスをサポートします。 リクエストを送信すると、HTTPヘッダーで認証トークンを直接指定できます。 例:
// Send the request. 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で取得したエンドポイントに置き換えます。
権限付与: サービス認証のためにステップ1で取得したトークンを設定します。
次の応答が返されます。
[{"p_0":0.2856724025030001,"p_1":0.7143275974969999},{"p_0":0.18324957921381624,"p_1":0.8167504207861838}]
EAS SDK for Pythonを使用してリクエストを送信します。 詳細については、「SDK For Python」をご参照ください。
サンプルコード:
#!/usr/bin/env python from eas_prediction import PredictClient from eas_prediction import StringRequest if __name__ == '__main__': # Replace the value with the endpoint and service name that you obtained in Step 1. client = PredictClient('1828488879222***.cn-shanghai.pai-eas.aliyuncs.com', 'pmml_test') # Replace the value with the token that you obtained in Step 1 for service authentication. 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)
他の言語でEAS SDKを使用する方法の詳細については、「SDK」をご参照ください。
関連ドキュメント
他の組み込みプロセッサを使用してEASオンラインサービスを展開することもできます。 詳細については、「組み込みプロセッサを使用したモデルサービスのデプロイ」をご参照ください。
カスタムプロセッサを開発し、そのカスタムプロセッサを使用してEASオンラインサービスを展開できます。 詳細については、「カスタムプロセッサを使用したサービスのデプロイ」をご参照ください。