プロセッサとは、オンライン予測ロジックのパッケージです。Elastic Algorithm Service (EAS) of Platform for AI (PAI) は、モデルのデプロイによく使用されるビルトイン プロセッサを提供しています。ビルトイン プロセッサを使用すると、モデルのオンライン予測ロジックを開発するコストを削減できます。
EAS が提供するプロセッサの名前とコードを次の表に示します。EASCMD クライアントを使用してモデルをデプロイする場合、プロセッサ コードが必要です。
プロセッサ名 | プロセッサ コード(EASCMD を使用する場合は必須) | リファレンス | |
CPU エディション | GPU エディション | ||
EasyRec | easyrec-2.4 | easyrec-2.4 | |
TorchEasyRec | easyrec-torch-1.0 | easyrec-torch-1.0 | |
PMML | pmml | なし | |
TensorFlow 1.12 | tensorflow_cpu_1.12 | tensorflow_gpu_1.12 | |
TensorFlow 1.14 | tensorflow_cpu_1.14 | tensorflow_gpu_1.14 | |
TensorFlow 1.15 | tensorflow_cpu_1.15 | tensorflow_gpu_1.15 | アジリティ エディションの PAI-Blade に基づく最適化エンジンを内蔵した TensorFlow 1.15 プロセッサ |
TensorFlow 2.3 | tensorflow_cpu_2.3 | なし | |
PyTorch 1.6 | pytorch_cpu_1.6 | pytorch_gpu_1.6 | |
Caffe | caffe_cpu | caffe_gpu | |
パラメータ サーバー アルゴリズム | parameter_sever | なし | |
Alink | alink_pai_processor | なし | なし |
xNN | xnn_cpu | なし | なし |
EasyVision | easy_vision_cpu_tf1.12_torch151 | easy_vision_gpu_tf1.12_torch151 | |
EasyTransfer | easytransfer_cpu | easytransfer_gpu | |
EasyNLP | easynlp | easynlp | |
EasyCV | easycv | easycv | |
Blade | blade_cpu | blade_cuda10.0_beta | なし |
MediaFlow | なし | mediaflow | |
Triton | なし | triton | |
PMML プロセッサ
EAS のビルトイン Predictive Model Markup Language (PMML) プロセッサは、次の操作を実行します。
PMML ファイルからモデル サービスを読み込みます。
モデル サービスを呼び出すために送信されたリクエストを処理します。
モデルを使用してリクエスト結果を計算し、クライアントに結果を返します。
PMML プロセッサは、欠損値を入力するためのデフォルト ポリシーを提供します。PMML ファイルの機能列に isMissing ポリシーが指定されていない場合、次の表の値が自動的に使用されます。
データ型 | デフォルト入力値 |
BOOLEAN | false |
DOUBLE | 0.0 |
FLOAT | 0.0 |
INT | 0 |
STRING | "" |
次のいずれかの方法を使用して、PMML ファイルからモデルをデプロイできます。
コンソールでモデル ファイルをアップロードする
[プロセッサの種類] パラメータを [PMML] に設定します。詳細については、「PAI コンソールでモデル サービスをデプロイする」をご参照ください。
EASCMD クライアントを使用してモデルをデプロイする
service.json サービス構成ファイルで、processor パラメータを pmml に設定します。サンプル コード:
{ "processor": "pmml", "generate_token": "true", "model_path": "http://xxxxx/lr.pmml", "name": "eas_lr_example", "metadata": { "instance": 1, "cpu": 1 # 各 CPU に 4 GB のメモリを割り当てます。1 つの CPU と 4 GB のメモリは 1 つのクォータと見なされます。 } }Data Science Workshop (DSW) を使用してモデルをデプロイする
service.json サービス構成ファイルを修正します。この方法は、EASCMD クライアントを使用してモデルをデプロイする方法に似ています。詳細については、「EASCMD を使用してモデル サービスをデプロイする」をご参照ください。
TensorFlow 1.12 プロセッサ
EAS の TensorFlow 1.12 プロセッサは、SavedModel または SessionBundle 形式の TensorFlow モデルを読み込むことができます。SavedModel 形式を使用することをお勧めします。モデルをデプロイする前に、Keras モデルまたは Checkpoint モデルを SavedModel モデルに変換する必要があります。詳細については、「TensorFlow に関する FAQ」をご参照ください。
汎用プロセッサは、カスタム TensorFlow 操作をサポートしていません。
次のいずれかの方法を使用して、TensorFlow モデルをデプロイできます。
コンソールでモデル ファイルをアップロードする
[プロセッサの種類] パラメータを [tensorflow 1.12] に設定します。詳細については、「PAI コンソールでモデル サービスをデプロイする」をご参照ください。
EASCMD クライアントを使用してモデルをデプロイする
service.json サービス構成ファイルで、モデル リソースに基づいて processor パラメータを tensorflow_cpu_1.12 または tensorflow_gpu_1.12 に設定します。processor パラメータの値がリソースの種類と一致しない場合、デプロイ エラーが発生します。サンプル コード:
{ "name": "tf_serving_test", "generate_token": "true", "model_path": "http://xxxxx/savedmodel_example.zip", "processor": "tensorflow_cpu_1.12", "metadata": { "instance": 1, "cpu": 1, "gpu": 0, "memory": 2000 } }DSW を使用してモデルをデプロイする
service.json サービス構成ファイルを修正します。この方法は、EASCMD クライアントを使用してモデルをデプロイする方法に似ています。詳細については、「EASCMD を使用してモデル サービスをデプロイする」をご参照ください。
TensorFlow 1.14 プロセッサ
EAS の TensorFlow 1.14 プロセッサは、SavedModel または SessionBundle 形式の TensorFlow モデルを読み込むことができます。SavedModel 形式を使用することをお勧めします。モデルをデプロイする前に、Keras モデルまたは Checkpoint モデルを SavedModel モデルに変換する必要があります。詳細については、「TensorFlow に関する FAQ」をご参照ください。
汎用プロセッサは、カスタム TensorFlow 操作をサポートしていません。
次のいずれかの方法を使用して、TensorFlow モデルをデプロイできます。
コンソールでモデル ファイルをアップロードする
[プロセッサの種類] パラメータを [tensorflow 1.14] に設定します。詳細については、「PAI コンソールでモデル サービスをデプロイする」をご参照ください。
EASCMD クライアントを使用してモデルをデプロイする
service.json サービス構成ファイルで、モデル リソースに基づいて processor パラメータを tensorflow_cpu_1.14 または tensorflow_gpu_1.14 に設定します。processor パラメータの値がリソースの種類と一致しない場合、デプロイ エラーが発生します。サンプル コード:
{ "name": "tf_serving_test", "generate_token": "true", "model_path": "http://xxxxx/savedmodel_example.zip", "processor": "tensorflow_cpu_1.14", "metadata": { "instance": 1, "cpu": 1, "gpu": 0, "memory": 2000 } }DSW を使用してモデルをデプロイする
service.json サービス構成ファイルを修正します。この方法は、EASCMD クライアントを使用してモデルをデプロイする方法に似ています。詳細については、「EASCMD を使用してモデル サービスをデプロイする」をご参照ください。
アジリティ エディションの PAI-Blade に基づく最適化エンジンを内蔵した TensorFlow 1.15 プロセッサ
EAS の TensorFlow 1.15 プロセッサは、SavedModel または SessionBundle 形式の TensorFlow モデルを読み込むことができます。SavedModel 形式を使用することをお勧めします。モデルをデプロイする前に、Keras モデルまたは Checkpoint モデルを SavedModel モデルに変換する必要があります。詳細については、「TensorFlow に関する FAQ」をご参照ください。
汎用プロセッサは、カスタム TensorFlow 操作をサポートしていません。
TensorFlow 1.15 プロセッサは、アジリティ エディションの PAI-Blade に基づく最適化エンジンを内蔵しています。このプロセッサを使用すると、アジリティ エディションの PAI-Blade によって最適化された TensorFlow モデルをデプロイできます。
次のいずれかの方法を使用して、TensorFlow モデルをデプロイできます。
モデル ファイルをコンソールにアップロードする
[プロセッサの種類] パラメータを [tensorflow 1.15] に設定します。詳細については、「PAI コンソールでモデル サービスをデプロイする」をご参照ください。
EASCMD クライアントを使用してモデルをデプロイする
service.json サービス構成ファイルで、モデル リソースに基づいて processor パラメータを tensorflow_cpu_1.15 または tensorflow_gpu_1.15 に設定します。processor パラメータの値がリソースの種類と一致しない場合、デプロイ エラーが発生します。サンプル コード:
{ "name": "tf_serving_test", "generate_token": "true", "model_path": "http://xxxxx/savedmodel_example.zip", "processor": "tensorflow_cpu_1.15", "metadata": { "instance": 1, "cpu": 1, "gpu": 0, "memory": 2000 } }DSW を使用してモデルをデプロイする
service.json サービス構成ファイルを修正します。この方法は、EASCMD クライアントを使用してモデルをデプロイする方法に似ています。詳細については、「EASCMD を使用してモデル サービスをデプロイする」をご参照ください。サービス構成ファイルのパラメータの詳細については、「サービスを作成する」をご参照ください。
TensorFlow 2.3 プロセッサ
TensorFlow 2.3 プロセッサ EAS は、SavedModel または SessionBundle 形式の TensorFlow モデルを読み込むことができます。SavedModel 形式を使用することをお勧めします。モデルをデプロイする前に、Keras モデルまたは Checkpoint モデルを SavedModel モデルに変換する必要があります。詳細については、「TensorFlow に関する FAQ」をご参照ください。
汎用プロセッサは、カスタム TensorFlow 操作をサポートしていません。
次のいずれかの方法を使用して、TensorFlow モデルをデプロイできます。
コンソールでモデル ファイルをアップロードする
[プロセッサの種類] パラメータを [tensorflow 2.3] に設定します。詳細については、「PAI コンソールでモデル サービスをデプロイする」をご参照ください。
EASCMD クライアントを使用してモデルをデプロイする
service.json サービス構成ファイルで、processor パラメータを tensorflow_cpu_2.3 に設定します。サンプル コード:
{ "name": "tf_serving_test", "generate_token": "true", "model_path": "http://xxxxx/savedmodel_example.zip", "processor": "tensorflow_cpu_2.3", "metadata": { "instance": 1, "cpu": 1, "gpu": 0, "memory": 2000 } }DSW を使用してモデルをデプロイする
service.json サービス構成ファイルを修正します。この方法は、EASCMD クライアントを使用してモデルをデプロイする方法に似ています。詳細については、「EASCMD を使用してモデル サービスをデプロイする」をご参照ください。
アジリティ エディションの PAI-Blade に基づく最適化エンジンを内蔵した PyTorch 1.6 プロセッサ
EAS の PyTorch 1.6 プロセッサは、TorchScript 形式のモデルを読み込むことができます。詳細については、「TorchScript」をご参照ください。
汎用プロセッサは PyTorch 拡張機能をサポートしていません。このプロセッサを使用して、TensorFlow モデル以外のモデルをインポートまたはエクスポートすることはできません。
PyTorch 1.6 プロセッサは、アジリティ エディションの PAI-Blade に基づく最適化エンジンを内蔵しています。このプロセッサを使用すると、アジリティ エディションの PAI-Blade によって最適化された PyTorch モデルをデプロイできます。
次のいずれかの方法を使用して、TorchScript モデルをデプロイできます。
コンソールでモデル ファイルをアップロードする
[プロセッサの種類] パラメータを [pytorch 1.6] に設定します。詳細については、「PAI コンソールでモデル サービスをデプロイする」をご参照ください。
EASCMD クライアントを使用してモデルをデプロイする
service.json サービス構成ファイルで、モデル リソースに基づいて processor パラメータを pytorch_cpu_1.6 または pytorch_gpu_1.6 に設定します。processor パラメータの値がリソースの種類と一致しない場合、デプロイ エラーが発生します。サンプル コード:
{ "name": "pytorch_serving_test", "generate_token": "true", "model_path": "http://xxxxx/torchscript_model.pt", "processor": "pytorch_gpu_1.6", "metadata": { "instance": 1, "cpu": 1, "gpu": 1, "cuda": "10.0", "memory": 2000 } }DSW を使用してモデルをデプロイする
service.json サービス構成ファイルを修正します。この方法は、EASCMD クライアントを使用してモデルをデプロイする方法に似ています。詳細については、「EASCMD を使用してモデル サービスをデプロイする」をご参照ください。サービス構成ファイルのパラメータの詳細については、「サービスを作成する」をご参照ください。
Caffe プロセッサ
EAS の Caffe プロセッサは、Caffe フレームワークに基づいてトレーニングされたディープ ラーニング モデルを読み込むことができます。 Caffe フレームワークは柔軟な機能を備えています。Caffe モデルをデプロイする場合は、モデル パッケージでモデル ファイルと重みファイルの名前を指定する必要があります。
汎用プロセッサは、カスタム データ層をサポートしていません。
次のいずれかの方法を使用して、Caffe モデルをデプロイできます。
コンソールでモデル ファイルをアップロードする
[プロセッサの種類] パラメータを [caffe] に設定します。詳細については、「PAI コンソールでモデル サービスをデプロイする」をご参照ください。
EASCMD クライアントを使用してモデルをデプロイする
service.json サービス構成ファイルで、モデル リソースに基づいて processor パラメータを caffe_cpu または caffe_gpu に設定します。processor パラメータの値がリソースの種類と一致しない場合、デプロイ エラーが発生します。サンプル コード:
{ "name": "caffe_serving_test", "generate_token": "true", "model_path": "http://xxxxx/caffe_model.zip", "processor": "caffe_cpu", "model_config": { "model": "deploy.prototxt", "weight": "bvlc_reference_caffenet.caffemodel" }, "metadata": { "instance": 1, "cpu": 1, "gpu": 0, "memory": 2000 } }DSW を使用してモデルをデプロイする
service.json サービス構成ファイルを修正します。この方法は、EASCMD クライアントを使用してモデルをデプロイする方法に似ています。詳細については、「EASCMD を使用してモデル サービスをデプロイする」をご参照ください。
PS プロセッサ
EAS の PS プロセッサは、PS アルゴリズムに基づいて開発されています。プロセッサは PS 形式のモデルを読み込むことができます。
次のセクションでは、PS モデルをサービスとしてデプロイし、PS モデル サービスを使用してリクエストを送信する方法について説明します。
次のいずれかの方法を使用して、PS モデルをデプロイできます。
コンソールでモデル ファイルをアップロードする
[プロセッサの種類] パラメータを [PS アルゴリズム] に設定します。詳細については、「コンソールでモデルをアップロードおよびデプロイする」をご参照ください。
EASCMD クライアントを使用してモデルをデプロイする
service.json サービス構成ファイルで、processor パラメータを parameter_sever に設定します。サンプル コード:
{ "name":"ps_smart", "model_path": "oss://examplebucket/xlab_m_pai_ps_smart_b_1058272_v0.tar.gz", "processor": "parameter_sever", "metadata": { "region": "beijing", "cpu": 1, "instance": 1, "memory": 2048 } }DSW を使用してモデルをデプロイする
service.json サービス構成ファイルを修正します。この方法は、EASCMD クライアントを使用してモデルをデプロイする方法に似ています。詳細については、「EASCMD を使用してモデル サービスをデプロイする」をご参照ください。
リクエストの説明
PS モデル サービスを使用して、単一のリクエストを送信するか、複数のリクエストを同時に送信できます。2 つの方法のリクエスト構文は同じです。JSON 配列に含まれる機能オブジェクトは同じです。
単一のリクエストを送信するためのサンプル構文
curl "http://eas.location/api/predict/ps_smart" -d "[ { "f0": 1, "f1": 0.2, "f3": 0.5 } ]"複数のリクエストを同時に送信するためのサンプル構文
curl "http://eas.location/api/predict/ps_smart" -d "[ { "f0": 1, "f1": 0.2, "f3": 0.5 }, { "f0": 1, "f1": 0.2, "f3": 0.5 } ]"レスポンス
2 つの方法のレスポンス構文も同じです。JSON 配列に含まれる返されるオブジェクトは同じであり、リクエスト構文と同じ順序に従います。
[ { "label":"xxxx", "score" : 0.2, "details" : [{"k1":0.3}, {"k2":0.5}] }, { "label":"xxxx", "score" : 0.2, "details" : [{"k1":0.3}, {"k2":0.5}] } ]
EasyTransfer プロセッサ
EAS の EasyTransfer プロセッサは、EasyTransfer フレームワークに基づいてトレーニングされた TensorFlow ベースのディープ ラーニング自然言語処理 (NLP) モデルを読み込むことができます。
次のいずれかの方法を使用して、EasyTransfer モデルをデプロイできます。
コンソールでモデル ファイルをアップロードする
[プロセッサの種類] パラメータを [easytransfer] に設定します。詳細については、「PAI コンソールでモデル サービスをデプロイする」をご参照ください。
EASCMD クライアントを使用してモデルをデプロイする
service.json サービス構成ファイルで、モデル リソースに基づいて processor パラメータを easytransfer_cpu または easytransfer_gpu に設定します。processor パラメータの値がリソースの種類と一致しない場合、デプロイ エラーが発生します。type フィールド model_config パラメータを、使用するモデルの種類に設定します。次の例では、テキスト分類モデルが使用されています。その他のパラメータの詳細については、「サービスを作成する」をご参照ください。
GPU ノードにモデルをデプロイする(この例ではパブリック リソース グループが使用されています)
{ "name": "et_app_demo", "metadata": { "instance": 1 }, "cloud": { "computing": { "instance_type": "ecs.gn6i-c4g1.xlarge" } }, "model_path": "http://xxxxx/your_model.zip", "processor": "easytransfer_gpu", "model_config": { "type": "text_classify_bert" } }CPU ノードにモデルをデプロイする
{ "name": "et_app_demo", "model_path": "http://xxxxx/your_model.zip", "processor": "easytransfer_cpu", "model_config": { "type":"text_classify_bert" }, "metadata": { "instance": 1, "cpu": 1, "memory": 4000 } }
サポートされているモデルの種類を次の表に示します。
ジョブの種類
モデルの種類
テキスト マッチング
text_match_bert
テキスト分類
text_classify_bert
シーケンス ラベリング
sequence_labeling_bert
テキストのベクトル化
vectorization_bert
EasyNLP プロセッサ
EAS の EasyNLP プロセッサは、EasyNLP フレームワークに基づいてトレーニングされた PyTorch ベースのディープ ラーニング NLP モデルを読み込むことができます。
次のいずれかの方法を使用して、EasyNLP モデルをデプロイできます。
コンソールでモデル ファイルをアップロードする
[プロセッサの種類] パラメータを [easynlp] に設定します。詳細については、「PAI コンソールでモデル サービスをデプロイする」をご参照ください。
EASCMD クライアントを使用してモデルをデプロイする
service.json サービス構成ファイルで、processor パラメータを easynlp に設定します。type フィールド model_config パラメータを、使用するモデルの種類に設定します。次の例では、単一ラベル テキスト分類モデルが使用されています。その他のパラメータの詳細については、「サービスを作成する」をご参照ください。
{ "name": "easynlp_app_demo", "metadata": { "instance": 1 }, "cloud": { "computing": { "instance_type": "ecs.gn6i-c4g1.xlarge" } }, "model_config": { "app_name": "text_classify", "type": "text_classify" }, "model_path": "http://xxxxx/your_model.tar.gz", "processor": "easynlp" }サポートされているモデルの種類を次の表に示します。
ジョブの種類
モデルの種類
単一ラベル テキスト分類
text_classify
複数ラベル テキスト分類
text_classify_multi
テキスト マッチング
text_match
シーケンス ラベリング
sequence_labeling
テキストのベクトル化
vectorization
中国語テキストの要約生成 (GPU)
sequence_generation_zh
英語テキストの要約生成 (GPU)
sequence_generation_en
中国語テキストの機械読解
machine_reading_comprehension_zh
英語テキストの機械読解
machine_reading_comprehension_en
WUKONG_CLIP (GPU)
wukong_clip
CLIP (GPU)
clip
モデル サービスが EAS にデプロイされたら、[elastic Algorithm Service (EAS)] ページに移動し、サービスを見つけて、[サービスの種類] 列の [呼び出し方法] をクリックして、サービス エンドポイントとトークンを取得します。次のサンプル コードは、サービスの呼び出しに使用される Python リクエストのサンプルです。
import requests
# 値をサービスのエンドポイントに置き換えます。
url = '<eas-service-url>'
# 値を取得したトークンに置き換えます。
token = '<eas-service-token>'
# 予測データを生成します。次の例では、テキスト分類が使用されています。
request_body = {
"first_sequence": "hello"
}
headers = {"Authorization": token}
resp = requests.post(url=url, headers=headers, json=request_body)
print(resp.content.decode())EasyCV プロセッサ
EAS の EasyCV プロセッサは、EasyCV フレームワークに基づいてトレーニングされたディープ ラーニング モデルを読み込むことができます。
次のいずれかの方法を使用して、EasyCV モデルをデプロイできます。
コンソールでモデル ファイルをアップロードする
[プロセッサの種類] パラメータを [easycv] に設定します。詳細については、「PAI コンソールでモデル サービスをデプロイする」をご参照ください。
EASCMD クライアントを使用してモデルをデプロイする
service.json サービス構成ファイルで、processor パラメータを easycv に設定します。type フィールド model_config パラメータを、使用するモデルの種類に設定します。次の例では、画像分類モデルが使用されています。その他のパラメータの詳細については、「サービスを作成する」をご参照ください。
{ "name": "easycv_classification_example", "processor": "easycv", "model_path": "oss://examplebucket/epoch_10_export.pt", "model_config": {"type":"TorchClassifier"}, "metadata": { "instance": 1 }, "cloud": { "computing": { "instance_type": "ecs.gn5i-c4g1.xlarge" } } }サポートされているモデルの種類を次の表に示します。
ジョブの種類
model_config
画像分類
{"type":"TorchClassifier"}
オブジェクト検出
{"type":"DetectionPredictor"}
セマンティック セグメンテーション
{"type":"SegmentationPredictor"}
YOLOX
{"type":"YoloXPredictor"}
ビデオ分類
{"type":"VideoClassificationPredictor"}
モデル サービスが EAS にデプロイされたら、[elastic Algorithm Service (EAS)] ページに移動し、サービスを見つけて、[サービスの種類] 列の [呼び出し方法] をクリックして、サービス エンドポイントとトークンを取得します。次のサンプル コードは、サービスの呼び出しに使用される Python リクエストのサンプルです。
import requests
import base64
import json
resp = requests.get('http://exmaplebucket.oss-cn-zhangjiakou.aliyuncs.com/images/000000123213.jpg')
ENCODING = 'utf-8'
datas = json.dumps( {
"image": base64.b64encode(resp.content).decode(ENCODING)
})
# 値を取得したトークンに置き換えます。
head = {
"Authorization": "NTFmNDJlM2E4OTRjMzc3OWY0NzI3MTg5MzZmNGQ5Yj***"
}
for x in range(0,10):
# 値をサービスのエンドポイントに置き換えます。
resp = requests.post("http://150231884461***.cn-hangzhou.pai-eas.aliyuncs.com/api/predict/test_easycv_classification_example", data=datas, headers=head)
print(resp.text)
画像ファイルとビデオ ファイルは、送信のために Base64 形式に変換する必要があります。image を使用して画像データを指定し、video を使用してビデオ データを指定します。
EasyVision プロセッサ
EAS の EasyVision プロセッサは、EasyVision フレームワークに基づいてトレーニングされたディープ ラーニング モデルを読み込むことができます。
次のいずれかの方法を使用して、EasyVision モデルをデプロイできます。
コンソールでモデル ファイルをアップロードする
[プロセッサの種類] パラメータを [easyvision] に設定します。詳細については、「PAI コンソールでモデル サービスをデプロイする」をご参照ください。
EASCMD クライアントを使用してモデルをデプロイする
service.json サービス構成ファイルで、モデル リソースに基づいて processor パラメータを easy_vision_cpu_tf1.12_torch151 または easy_vision_gpu_tf1.12_torch151 に設定します。processor パラメータの値がリソースの種類と一致しない場合、デプロイ エラーが発生します。type パラメータ model_config セクションで、トレーニングされたモデルの種類に設定します。次のコード ブロックは例を示しています。その他のパラメータの詳細については、「サービスを作成する」をご参照ください。
GPU ノードにモデルをデプロイする
{ "name": "ev_app_demo", "processor": "easy_vision_gpu_tf1.12_torch151", "model_path": "oss://path/to/your/model", "model_config": "{\"type\":\"classifier\"}", "metadata": { "resource": "your_resource_name", "cuda": "9.0", "instance": 1, "memory": 4000, "gpu": 1, "cpu": 4, "rpc.worker_threads" : 5 } }CPU ノードにモデルをデプロイする
{ "name": "ev_app_cpu_demo", "processor": "easy_vision_cpu_tf1.12_torch151", "model_path": "oss://path/to/your/model", "model_config": "{\"type\":\"classifier\"}", "metadata": { "resource": "your_resource_name", "instance": 1, "memory": 4000, "gpu": 0, "cpu": 4, "rpc.worker_threads" : 5 } }
MediaFlow プロセッサ
EAS の MediaFlow プロセッサは、ビデオ、オーディオ、および画像を分析および処理できる汎用オーケストレーション エンジンです。
次のいずれかの方法を使用して、MediaFlow モデルをデプロイできます。
コンソールでモデル ファイルをアップロードする
[プロセッサの種類] パラメータを [mediaflow] に設定します。詳細については、「PAI コンソールでモデル サービスをデプロイする」をご参照ください。
EASCMD クライアントを使用してモデルをデプロイする
service.json サービス構成ファイルで、processor パラメータを mediaflow に設定します。MediaFlow プロセッサを使用してモデルをデプロイする場合は、次のパラメータを構成する必要があります。その他のパラメータの詳細については、「サービスを作成する」をご参照ください。
graph_pool_size: グラフ プールの数。
worker_threads: ワーカースレッドの数。
サンプル コード:
ビデオ分類用のモデルをデプロイする
{ "model_entry": "video_classification/video_classification_ext.js", "name": "video_classification", "model_path": "oss://path/to/your/model", "generate_token": "true", "processor": "mediaflow", "model_config" : { "graph_pool_size":8, "worker_threads":16 }, "metadata": { "eas.handlers.disable_failure_handler" :true, "resource": "your_resource_name", "rpc.worker_threads": 30, "rpc.enable_jemalloc": true, "rpc.keepalive": 500000, "cpu": 4, "instance": 1, "cuda": "9.0", "rpc.max_batch_size": 64, "memory": 10000, "gpu": 1 } }自動音声認識 (ASR) 用のモデルをデプロイする
{ "model_entry": "asr/video_asr_ext.js", "name": "video_asr", "model_path": "oss://path/to/your/model", "generate_token": "true", "processor": "mediaflow", "model_config" : { "graph_pool_size":8, "worker_threads":16 }, "metadata": { "eas.handlers.disable_failure_handler" :true, "resource": "your_resource_name", "rpc.worker_threads": 30, "rpc.enable_jemalloc": true, "rpc.keepalive": 500000, "cpu": 4, "instance": 1, "cuda": "9.0", "rpc.max_batch_size": 64, "memory": 10000, "gpu": 1 } }
service.json サービス構成ファイルでは、ビデオ分類と ASR の model_entry、name、および model_path パラメータの値はさまざまです。モデルの目的に基づいてパラメータを構成する必要があります。
Triton プロセッサ
Triton Inference Server は、NVIDIA がリリースした新世代のオンライン サービス フレームワークです。Triton Inference Server は、GPU アクセラレーション モデルのデプロイと管理を簡素化し、KFServing の API 標準に準拠しています。Triton Inference Server は次の機能を提供します。
TensorFlow、PyTorch、ONNX Runtime、TensorRT、およびカスタム フレームワーク バックエンドなどの複数のオープン ソース フレームワークをサポートします。
1 つの GPU で複数のモデルを同時に実行して、GPU 使用率を最大化します。
HTTP プロトコルと gRPC プロトコルをサポートし、バイナリ形式でリクエストを送信してリクエスト サイズを削減できます。
動的バッチ機能をサポートして、サービス スループットを向上させます。
EAS はビルトイン Triton プロセッサを提供します。
Triton プロセッサは、中国 (上海) リージョンでのみパブリック プレビューで利用できます。
Triton プロセッサを使用してデプロイされたモデルは、Object Storage Service (OSS) に保存する必要があります。そのため、Triton プロセッサを使用してモデルをデプロイする前に、OSS をアクティブ化してモデル ファイルを OSS にアップロードする必要があります。オブジェクトを OSS にアップロードする方法については、「シンプル アップロード」をご参照ください。
次のセクションでは、Triton プロセッサを使用してモデルをサービスとしてデプロイし、サービスを呼び出す方法について説明します。
Triton プロセッサを使用してモデルをデプロイする
EASCMD クライアントでのみ Triton プロセッサを使用してモデルをデプロイできます。EASCMD クライアントを使用してモデルをデプロイする方法については、「サービスを作成する」をご参照ください。service.json サービス構成ファイルで、processor パラメータを triton に設定します。Triton プロセッサが OSS からモデル ファイルを取得できるようにするには、OSS 関連のパラメータを設定する必要があります。次のサンプル コードは、service.json サービス構成ファイルを変更する方法の例を示しています。
{ "name": "triton_test", "processor": "triton", "processor_params": [ "--model-repository=oss://triton-model-repo/models", "--allow-http=true", ], "metadata": { "instance": 1, "cpu": 4, "gpu": 1, "memory": 10000, "resource":"<your resource id>" } }次の表では、Triton プロセッサを使用してモデルをデプロイする場合に必要なパラメータについて説明します。その他のパラメータの詳細については、「コマンドを実行して EASCMD クライアントを使用する」をご参照ください。
パラメータ
説明
processor_params
デプロイの開始時に Triton Inference Server に渡すパラメータ。サポートされていないパラメータは、Triton Inference Server によって自動的に除外されます。Triton Inference Server に渡すことができるパラメータ 表に、Triton Inference Server に渡すことができるパラメータを示します。model-repository パラメータは必須です。オプションのパラメータの詳細については、「main.cc」をご参照ください。
oss_endpoint
OSS のエンドポイント。エンドポイントを指定しない場合、システムは、EAS サービスがデプロイされているリージョン内の OSS サービスを自動的に使用します。別のリージョンでアクティブ化されている OSS サービスを使用する場合は、このパラメータを構成する必要があります。このパラメータの有効な値については、「リージョンとエンドポイント」をご参照ください。
metadata
resource
EAS でモデルをデプロイするために使用される専用リソース グループの ID。Triton プロセッサを使用してモデルをデプロイする場合、使用されるリソースは EAS の専用リソース グループに属している必要があります。EAS で専用リソース グループを作成する方法については、「専用リソース グループを使用する」をご参照ください。
表 1. Triton Inference Server に渡すことができるパラメータ
パラメータ
必須
説明
model-repository
はい
モデルの OSS パス。model-repository パラメータは、OSS バケットのルート ディレクトリではなく、OSS バケットのサブディレクトリに設定する必要があります。
たとえば、パラメータを
oss://triton-model-repo/modelsに設定できます。triton-model-repo は OSS バケットの名前で、models は OSS バケットのサブディレクトリです。log-verbose
いいえ
詳細については、「main.cc」をご参照ください。
log-info
いいえ
log-warning
いいえ
log-error
いいえ
exit-on-error
いいえ
strict-model-config
いいえ
strict-readiness
いいえ
allow-http
いいえ
http-thread-count
いいえ
pinned-memory-pool-byte-size
いいえ
cuda-memory-pool-byte-size
いいえ
min-supported-compute-capability
いいえ
buffer-manager-thread-count
いいえ
backend-config
いいえ
公式の Triton クライアントを使用して、Triton プロセッサによってデプロイされたサービスを呼び出す
Triton クライアント for Python を使用してデプロイされたサービスを呼び出す前に、次のコマンドを実行して公式の Triton クライアントをインストールします。
pip3 install nvidia-pyindex pip3 install tritonclient[all]次のコマンドを実行して、テスト画像を現在のディレクトリにダウンロードします。
wget http://pai-blade.oss-cn-zhangjiakou.aliyuncs.com/doc-assets/cat.png次のサンプル コードは、Triton クライアント for Python が Triton プロセッサを使用してデプロイされたサービスにバイナリ形式でリクエストを送信する方法を示しています。
import numpy as np import time from PIL import Image import tritonclient.http as httpclient from tritonclient.utils import InferenceServerException URL = "<service url>" # <service url> をデプロイされたサービスのエンドポイントに置き換えます。 HEADERS = {"Authorization": "<service token>"} # <service token> をサービスへのアクセスに使用されるトークンに置き換えます。 input_img = httpclient.InferInput("input", [1, 299, 299, 3], "FP32") img = Image.open('./cat.png').resize((299, 299)) img = np.asarray(img).astype('float32') / 255.0 input_img.set_data_from_numpy(img.reshape([1, 299, 299, 3]), binary_data=True) output = httpclient.InferRequestedOutput( "InceptionV3/Predictions/Softmax", binary_data=True ) triton_client = httpclient.InferenceServerClient(url=URL, verbose=False) start = time.time() for i in range(10): results = triton_client.infer( "inception_graphdef", inputs=[input_img], outputs=[output], headers=HEADERS ) res_body = results.get_response() elapsed_ms = (time.time() - start) * 1000 if i == 0: print("model name: ", res_body["model_name"]) print("model version: ", res_body["model_version"]) print("output name: ", res_body["outputs"][0]["name"]) print("output shape: ", res_body["outputs"][0]["shape"]) print("[{}] Avg rt(ms): {:.2f}".format(i, elapsed_ms)) start = time.time()