SignatureDefs di SavedModel untuk Penayangan TensorFlow

Tujuan

Dokumen ini memberikan contoh penggunaan SignatureDefs yang dimaksudkan di SavedModel yang dipetakan ke API TensorFlow Serving.

Ringkasan

SignatureDef mendefinisikan tanda tangan komputasi yang didukung dalam grafik TensorFlow. SignatureDefs bertujuan untuk memberikan dukungan umum untuk mengidentifikasi input dan output suatu fungsi dan dapat ditentukan saat membuat SavedModel .

Latar belakang

TF-Exporter dan SessionBundle menggunakan Tanda Tangan yang memiliki konsep serupa tetapi mengharuskan pengguna untuk membedakan antara tanda tangan bernama dan tanda tangan default agar tanda tangan tersebut dapat diambil dengan benar saat dimuat. Bagi yang sebelumnya menggunakan TF-Exporter/SessionBundle, Signatures di TF-Exporter akan digantikan oleh SignatureDefs di SavedModel.

Struktur SignatureDef

SignatureDef memerlukan spesifikasi:

  • inputs sebagai peta string ke TensorInfo.
  • outputs sebagai peta string ke TensorInfo.
  • method_name (yang sesuai dengan nama metode yang didukung di alat/sistem pemuatan).

Perhatikan bahwa TensorInfo sendiri memerlukan spesifikasi nama, tipe d, dan bentuk tensor. Meskipun informasi tensor sudah ada dalam grafik, akan berguna jika TensorInfo didefinisikan secara eksplisit sebagai bagian dari SignatureDef karena alat kemudian dapat melakukan validasi tanda tangan, dll. tanpa harus membaca definisi grafik.

Untuk kemudahan penggunaan kembali dan berbagi di seluruh alat dan sistem, konstanta yang umum digunakan terkait SignatureDefs yang akan didukung di TensorFlow Serving didefinisikan sebagai konstanta. Secara khusus:

Selain itu, SavedModel menyediakan utilitas untuk membantu membangun definisi tanda tangan.

Struktur sampel

TensorFlow Serving menyediakan API tingkat tinggi untuk melakukan inferensi. Untuk mengaktifkan API ini, model harus menyertakan satu atau beberapa SignatureDefs yang menentukan node TensorFlow yang tepat untuk digunakan sebagai input dan output. Lihat di bawah untuk contoh SignatureDefs spesifik yang didukung TensorFlow Serving untuk setiap API.

Perhatikan bahwa Penyajian TensorFlow bergantung pada kunci setiap TensorInfo (dalam input dan output SignatureDef), serta nama_metode SignatureDef. Konten TensorInfo sebenarnya khusus untuk grafik Anda.

Klasifikasi Tanda TanganDef

Classification SignatureDefs mendukung panggilan terstruktur ke API Klasifikasi TensorFlow Serving. Ini menetapkan bahwa harus ada Tensor inputs , dan ada dua Tensor keluaran opsional: classes dan scores , setidaknya satu di antaranya harus ada.

signature_def: {
  key  : "my_classification_signature"
  value: {
    inputs: {
      key  : "inputs"
      value: {
        name: "tf_example:0"
        dtype: DT_STRING
        tensor_shape: ...
      }
    }
    outputs: {
      key  : "classes"
      value: {
        name: "index_to_string:0"
        dtype: DT_STRING
        tensor_shape: ...
      }
    }
    outputs: {
      key  : "scores"
      value: {
        name: "TopKV2:0"
        dtype: DT_FLOAT
        tensor_shape: ...
      }
    }
    method_name: "tensorflow/serving/classify"
  }
}

Prediksi SignatureDef

Predict SignatureDefs mendukung panggilan ke Predict API TensorFlow Serving. Tanda tangan ini memungkinkan Anda secara fleksibel mendukung banyak Tensor masukan dan keluaran. Untuk contoh di bawah, tanda tangan my_prediction_signature memiliki satu masukan logis images Tensor yang dipetakan ke Tensor sebenarnya dalam grafik Anda x:0 .

Predict SignatureDefs memungkinkan portabilitas di seluruh model. Ini berarti Anda dapat menukar SavedModel yang berbeda, mungkin dengan nama Tensor dasar yang berbeda (misalnya, alih-alih x:0 , mungkin Anda memiliki model alternatif baru dengan Tensor z:0 ), sementara klien Anda dapat tetap online terus menanyakan model lama dan baru versi model ini tanpa perubahan di sisi klien.

Predict SignatureDefs juga memungkinkan Anda menambahkan Tensor tambahan opsional ke output, yang dapat Anda kueri secara eksplisit. Katakanlah selain kunci keluaran di bawah scores , Anda juga ingin mengambil lapisan pengumpulan untuk debugging atau tujuan lainnya. Dalam hal ini, Anda cukup menambahkan Tensor tambahan dengan pool seperti kunci dan nilai yang sesuai.

signature_def: {
  key  : "my_prediction_signature"
  value: {
    inputs: {
      key  : "images"
      value: {
        name: "x:0"
        dtype: ...
        tensor_shape: ...
      }
    }
    outputs: {
      key  : "scores"
      value: {
        name: "y:0"
        dtype: ...
        tensor_shape: ...
      }
    }
    method_name: "tensorflow/serving/predict"
  }
}

Tanda Tangan RegresiDef

Regression SignatureDefs mendukung panggilan terstruktur ke Regression API TensorFlow Serving. Ini menetapkan bahwa harus ada tepat satu Tensor inputs , dan satu Tensor outputs .

signature_def: {
  key  : "my_regression_signature"
  value: {
    inputs: {
      key  : "inputs"
      value: {
        name: "x_input_examples_tensor_0"
        dtype: ...
        tensor_shape: ...
      }
    }
    outputs: {
      key  : "outputs"
      value: {
        name: "y_outputs_0"
        dtype: DT_FLOAT
        tensor_shape: ...
      }
    }
    method_name: "tensorflow/serving/regress"
  }
}