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

Platform For AI:TensorFlow プロセッサ

最終更新日:Mar 05, 2026

Elastic Algorithm Service (EAS) は、標準の SavedModel 形式の TensorFlow モデルをオンラインサービスとしてデプロイするための組み込み TensorFlow プロセッサを提供します。このトピックでは、モデルサービスをデプロイして呼び出す方法について説明します。

背景情報

ご利用のモデルが Keras モデルまたは Checkpoint モデルの場合、デプロイする前に SavedModel 形式に変換する必要があります。詳細については、「SavedModel 形式での TensorFlow モデルのエクスポート」をご参照ください。PAI-Blade によって最適化されたモデルは、直接実行できます。

TensorFlow プロセッサのバージョン

TensorFlow は、CPU と GPU の両方のデバイスをサポートする複数のバージョンで利用可能です。特定のビジネス要件がない場合、サービスをデプロイする際は、最新バージョンを使用してください。新しいバージョンの TensorFlow は、より優れたパフォーマンスを提供し、以前のバージョンの機能と前方互換性があります。次の表に、各 TensorFlow バージョンのプロセッサ名を示します。

プロセッサ名

TensorFlow バージョン

GPU サポート

tensorflow_cpu_1.12

TensorFlow 1.12

いいえ

tensorflow_cpu_1.14

TensorFlow 1.14

いいえ

tensorflow_cpu_1.15

TensorFlow 1.15

いいえ

tensorflow_cpu_2.3

TensorFlow 2.3

いいえ

tensorflow_cpu_2.4

TensorFlow 2.4

いいえ

tensorflow_cpu_2.7

TensorFlow 2.7

いいえ

tensorflow_gpu_1.12

TensorFlow 1.12

はい

tensorflow_gpu_1.14

TensorFlow 1.14

はい

tensorflow_gpu_1.15

TensorFlow 1.15

はい

tensorflow_gpu_2.4

TensorFlow 2.4

はい

tensorflow_gpu_2.7

TensorFlow 2.7

はい

ステップ 1: サービスのデプロイ

  1. オプション: ウォームアップ用のリクエストファイルを構成します。

    一部の TensorFlow モデルが初めて呼び出されると、関連ファイルとパラメーターがメモリにロードされる必要があります。このプロセスには時間がかかり、最初の数回のリクエストで高い応答時間 (RT) を引き起こす可能性があります。408 (リクエストタイムアウト) や 450 (キューが満杯のためリクエストが破棄されました) などのエラーにつながる可能性もあります。ローリングアップデート中のサービスジッターを防ぐため、サービスデプロイメント中にモデルをウォームアップするためのパラメーターを追加できます。これにより、ウォームアップが完了した後にのみサービスインスタンスがトラフィックを受信することが保証されます。詳細については、「高度な構成: モデルサービスのウォームアップ」をご参照ください。

  2. サービスをデプロイします。

    EASCMD クライアントを使用して TensorFlow モデルサービスをデプロイする場合、[processor type] パラメーターをプロセッサ名に設定します。以下は、構成ファイルの例です。

    {
      "name": "tf_serving_test",
      "model_path": "http://examplebucket.oss-cn-shanghai.aliyuncs.com/models/model.tar.gz",
      "processor": "tensorflow_cpu_1.15",
      "warm_up_data_path":"oss://path/to/warm_up_test.bin", // モデルウォームアップ用のリクエストファイルのパス。    
      "metadata": {
        "instance": 1,
        "cpu": 1,
        "memory": 4000
      }
    }

    クライアントを使用してサービスをデプロイする方法の詳細については、「サービスデプロイメント: EASCMD & DSW」をご参照ください。

    コンソールから TensorFlow モデルサービスをデプロイすることもできます。詳細については、「サービスデプロイメント: コンソール」をご参照ください。

  3. TensorFlow サービスがデプロイされた後、[Elastic Algorithm Service (EAS)] ページに移動します。呼び出したいサービスを見つけ、[サービスメソッド] 列の [呼び出し情報の表示] をクリックします。この操作により、サービスエンドポイントと認証トークンが表示されます。

ステップ 2: サービスの呼び出し

TensorFlow サービスは、プレーンテキストではなく protobuf 形式を入力と出力に使用するため、オンラインデバッグ機能を使用できません。オンラインデバッグ機能はプレーンテキストデータのみをサポートしています。

EAS は、サービスリクエストと応答データをカプセル化するためのソフトウェア開発キット (SDK) を提供しています。SDK には、直接接続とフォールトトレランスのメカニズムが含まれています。SDK を使用してリクエストを構築および送信することを推奨します。手順は次のとおりです。

  1. モデル構造の照会。

    標準の SavedModel 形式のモデルの場合、サービスに空のリクエストを送信して、JSON 形式でモデル構造情報を取得できます。

    // 空のリクエストを送信します。
    $ curl 1828488879222***.cn-shanghai.pai-eas.aliyuncs.com/api/predict/mnist_saved_model_example -H 'Authorization: YTg2ZjE0ZjM4ZmE3OTc0NzYxZDMyNmYzMTJjZTQ1***'
    
    // 返されたモデル構造情報。
    {
        "inputs": [
            {
                "name": "images",
                "shape": [
                    -1,
                    784
                ],
                "type": "DT_FLOAT"
            }
        ],
        "outputs": [
            {
                "name": "scores",
                "shape": [
                    -1,
                    10
                ],
                "type": "DT_FLOAT"
            }
        ],
        "signature_name": "predict_images"
    }              
    説明

    frozen pb 形式のモデルの場合、モデル構造情報を取得できません。

  2. 推論リクエストの送信。

    次のコードは、Python SDK を使用してモデルリクエストを送信する方法の例を示しています。

    #!/usr/bin/env python
    
    from eas_prediction import PredictClient
    from eas_prediction import TFRequest
    
    if __name__ == '__main__':
        client = PredictClient('http://1828488879222***.cn-shanghai.pai-eas.aliyuncs.com', 'mnist_saved_model_example')
        client.set_token('YTg2ZjE0ZjM4ZmE3OTc0NzYxZDMyNmYzMTJjZTQ1****')
        client.init()
    
        req = TFRequest('predict_images')
        req.add_feed('images', [1, 784], TFRequest.DT_FLOAT, [1] * 784)
        for x in range(0, 1000000):
            resp = client.predict(req)
            print(resp)

    コード内のパラメーター設定の詳細については、「Python SDK の使用」をご参照ください。

サービスリクエストを自分で構築することもできます。詳細については、「リクエスト形式」をご参照ください。

リクエスト形式

TensorFlow プロセッサは、入力と出力に protobuf 形式を使用します。SDK を使用してリクエストを送信する場合、SDK がリクエストをカプセル化します。SDK が提供する関数を使用してリクエストを構築するだけで済みます。サービスリクエストを自分で構築したい場合、次の protobuf 定義に基づいて必要なコードを生成できます。詳細については、「TensorFlow サービスリクエストの構築」をご参照ください。

syntax = "proto3";
option cc_enable_arenas = true;
option java_package = "com.aliyun.openservices.eas.predict.proto";
option java_outer_classname = "PredictProtos";
enum ArrayDataType {
  // DataType の有効な値ではありません。DataType フィールドが
  // 設定されていないことを示します。
  DT_INVALID = 0;
  // すべての計算デバイスがサポートすると予想されるデータ型。
  DT_FLOAT = 1;
  DT_DOUBLE = 2;
  DT_INT32 = 3;
  DT_UINT8 = 4;
  DT_INT16 = 5;
  DT_INT8 = 6;
  DT_STRING = 7;
  DT_COMPLEX64 = 8;  // 単精度複素数。
  DT_INT64 = 9;
  DT_BOOL = 10;
  DT_QINT8 = 11;     // 量子化された int8。
  DT_QUINT8 = 12;    // 量子化された uint8。
  DT_QINT32 = 13;    // 量子化された int32。
  DT_BFLOAT16 = 14;  // 16 ビットに切り捨てられた Float32。キャスト操作のみ。
  DT_QINT16 = 15;    // 量子化された int16。
  DT_QUINT16 = 16;   // 量子化された uint16。
  DT_UINT16 = 17;
  DT_COMPLEX128 = 18;  // 倍精度複素数。
  DT_HALF = 19;
  DT_RESOURCE = 20;
  DT_VARIANT = 21;  // 任意の C++ データ型。
}
// 配列の次元。
message ArrayShape {
  repeated int64 dim = 1 [packed = true];
}
// 配列を表すプロトコルバッファ。
message ArrayProto {
  // データ型。
  ArrayDataType dtype = 1;
  // 配列の形状。
  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];
  // DT_BOOL。
  repeated bool bool_val = 8 [packed = true];
}
// PredictRequest は、実行する TensorFlow モデルと、
// 入力がテンソルにマッピングされる方法、および出力が
// ユーザーに返される前にフィルタリングされる方法を指定します。
message PredictRequest {
  // 評価する名前付きシグネチャ。指定されていない場合、デフォルトのシグネチャが
  // 使用されます。
  string signature_name = 1;
  // 入力テンソル。
  // 入力テンソルの名前はエイリアス名です。エイリアスから実際の
  // 入力テンソル名へのマッピングは、モデルエクスポートの "inputs" キーの下に
  // 名前付き汎用シグネチャとして保存されることが期待されます。
  // "inputs" という名前の汎用シグネチャにリストされている各エイリアスは、
  // 予測を実行するために正確に一度提供される必要があります。
  map<string, ArrayProto> inputs = 2;
  // 出力フィルター。
  // 指定された名前はエイリアス名です。エイリアスから実際の出力
  // テンソル名へのマッピングは、モデルエクスポートの "outputs" キーの下に
  // 名前付き汎用シグネチャとして保存されることが期待されます。
  // ここで指定されたテンソルのみが実行/フェッチされ、返されます。
  // ただし、何も指定されていない場合は、名前付きシグネチャで指定されたすべてのテンソルが
  // 実行/フェッチされ、返されます。
  repeated string output_filter = 3;
}
// 正常な実行時の PredictRequest の応答。
message PredictResponse {
  // 出力テンソル。
  map<string, ArrayProto> outputs = 1;
}