すべてのプロダクト
Search
ドキュメントセンター

Platform For AI:Pytorch

最終更新日:Jul 22, 2024

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;
}