AI向け機械学習プラットフォームのElastic Algorithm Service (EAS) は、組み込みのPyTorchプロセッサを提供します。 PyTorchプロセッサを使用して、PyTorchでサポートされているTorchScript形式のモデルをオンラインモデルサービスとしてデプロイできます。 このトピックでは、PyTorchモデルサービスをデプロイして呼び出す方法について説明します。
PyTorchプロセッサのバージョン
異なるPyTorchプロセッサは、GPUアクセラレーションバージョンとCPUアクセラレーションバージョンを含む異なるPyTorchバージョンに対応します。 次の表に、使用可能なPyTorchプロセッサと対応するPyTorchバージョンを示します。
プロセッサ名 | PyTorchバージョン | GPUアクセラレーションのサポート |
pytorch_cpu_1.6 | Pytorch 1.6 | 不可 |
pytorch_cpu_1.7 | Pytorch 1.7 | 不可 |
pytorch_cpu_1.9 | Pytorch 1.9 | 不可 |
pytorch_cpu_1.10 | Pytorch 1.10 | 不可 |
pytorch_gpu_1.6 | Pytorch 1.6 | 可 |
pytorch_gpu_1.7 | Pytorch 1.7 | 可 |
pytorch_gpu_1.9 | Pytorch 1.9 | 可 |
pytorch_gpu_1.10 | Pytorch 1.10 | 可 |
手順1: モデルサービスのデプロイ
EASCMDクライアントを使用してPyTorchモデルサービスをデプロイする場合、processorを前述のPyTorchプロセッサ名のいずれかに設定する必要があります。 次のコードブロックは、サービス構成ファイルのサンプルを示しています。
{
"name": "pytorch_resnet_example",
"model_path": "http://examplebucket.oss-cn-shanghai.aliyuncs.com/models/resnet18.pt",
"processor": "pytorch_cpu_1.6",
"metadata": {
"cpu": 1,
"instance": 1,
"memory": 1000
}
}
EASCMDクライアントを使用してモデルサービスをデプロイする方法の詳細については、「EASCMDまたはDSWを使用したモデルサービスのデプロイ」をご参照ください。
コンソールを使用してPyTorchモデルサービスをデプロイすることもできます。 詳細については、「PAIコンソールでのモデルサービスのデプロイ」をご参照ください。
ステップ2: モデルサービスを呼び出す
PyTorchモデルサービスの入力と出力はどちらもプロトコルバッファですが、プレーンテキストではありません。 オンラインデバッグ機能は、平文での入出力データのみをサポートします。 したがって、コンソールのオンラインデバッグ機能を使用してモデルサービスを呼び出すことはできません。
EASは異なったプログラミング言語にEAS SDKを提供します。 要求および応答データ、ならびに直接接続およびフォールトトレランスメカニズムは、EAS SDKにカプセル化される。 EAS SDKを使用してサービスリクエストを作成および送信することを推奨します。 次のコードブロックは、推論サービス要求のサンプルを示しています。
#!/usr/bin/env python
from eas_prediction import PredictClient
from eas_prediction import TorchRequest
if __name__ == '__main__':
client = PredictClient('http://182848887922****.cn-shanghai.pai-eas.aliyuncs.com', 'pytorch_gpu_wl')
client.init()
req = TorchRequest()
req.add_feed(0, [1, 3, 224, 224], TorchRequest.DT_FLOAT, [1] * 150528)
# req.add_fetch(0)
for x in range(0, 10):
resp = client.predict(req)
print(resp.get_tensor_shape(0))
サンプルリクエストのパラメーターとモデルサービスの呼び出し方法の詳細については、「SDK For Python」をご参照ください。
EAS SDKを使用せずにカスタムサービス要求を作成することもできます。 詳細については、「リクエスト構文」をご参照ください。
リクエスト構文
PyTorchプロセッサの入力と出力の両方がプロトコルバッファです。 EAS SDKを使用してサービスリクエストを送信できます。 サービス要求はEAS SDKにカプセル化される。 サービスリクエストを作成するには、EAS SDKが提供する機能のみを使用する必要があります。 EAS SDKを使用せずに、次の構文に基づいてカスタムサービスリクエストを作成することもできます。 詳細については、「TensorFlowサービスのリクエストの構築」をご参照ください。
syntax = "proto3";
package pytorch.eas;
option cc_enable_arenas = true;
enum ArrayDataType {
// Not a legal value for DataType. Used to indicate a DataType field
// has not been set
DT_INVALID = 0;
// Data types that all computation devices are expected to be
// capable to support
DT_FLOAT = 1;
DT_DOUBLE = 2;
DT_INT32 = 3;
DT_UINT8 = 4;
DT_INT16 = 5;
DT_INT8 = 6;
DT_STRING = 7;
DT_COMPLEX64 = 8; // Single-precision complex
DT_INT64 = 9;
DT_BOOL = 10;
DT_QINT8 = 11; // Quantized int8
DT_QUINT8 = 12; // Quantized uint8
DT_QINT32 = 13; // Quantized int32
DT_BFLOAT16 = 14; // Float32 truncated to 16 bits. Only for cast ops
DT_QINT16 = 15; // Quantized int16
DT_QUINT16 = 16; // Quantized uint16
DT_UINT16 = 17;
DT_COMPLEX128 = 18; // Double-precision complex
DT_HALF = 19;
DT_RESOURCE = 20;
DT_VARIANT = 21; // Arbitrary C++ data types
}
// Dimensions of an array
message ArrayShape {
repeated int64 dim = 1 [packed = true];
}
// Protocol buffer representing an array
message ArrayProto {
// Data Type
ArrayDataType dtype = 1;
// Shape of the array.
ArrayShape array_shape = 2;
// DT_FLOAT
repeated float float_val = 3 [packed = true];
// DT_DOUBLE
repeated double double_val = 4 [packed = true];
// DT_INT32, DT_INT16, DT_INT8, DT_UINT8.
repeated int32 int_val = 5 [packed = true];
// DT_STRING
repeated bytes string_val = 6;
// DT_INT64.
repeated int64 int64_val = 7 [packed = true];
}
message PredictRequest {
// Input tensors.
repeated ArrayProto inputs = 1;
// Output filter.
repeated int32 output_filter = 2;
}
// Response for PredictRequest on successful run.
message PredictResponse {
// Output tensors.
repeated ArrayProto outputs = 1;
}