SignatureDefs di SavedModel untuk Penayangan TensorFlow

Objektif

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

Ringkasan

Sebuah SignatureDef mendefinisikan tanda tangan dari perhitungan didukung dalam grafik TensorFlow. SignatureDefs bertujuan untuk memberikan dukungan generik untuk mengidentifikasi input dan output dari fungsi dan dapat ditentukan ketika membangun sebuah SavedModel .

Latar belakang

TF-Eksportir dan SessionBundle digunakan Signatures yang mirip dalam konsep namun pengguna diperlukan untuk membedakan antara nama dan standar tanda tangan agar mereka yang akan diambil dengan benar pada beban. Bagi mereka yang sebelumnya menggunakan TF-Eksportir / SessionBundle, Signatures di TF-Eksportir akan digantikan oleh SignatureDefs di SavedModel.

Struktur SignatureDef

SignatureDef memerlukan spesifikasi:

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

Perhatikan bahwa TensorInfo itu sendiri membutuhkan spesifikasi nama, dtype 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 dengan SignatureDefs yang akan didukung di TensorFlow Serving didefinisikan sebagai konstanta. Secara khusus:

Selain itu, SavedModel menyediakan util untuk membantu membangun tanda tangan-def.

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 tertentu yang didukung TensorFlow Serving untuk setiap API.

Perhatikan bahwa TensorFlow Serving bergantung pada kunci setiap TensorInfo (di input dan output SignatureDef), serta nama_metode SignatureDef. Isi sebenarnya dari TensorInfo khusus untuk grafik Anda.

Tanda Tangan KlasifikasiDef

Classification SignatureDefs mendukung panggilan terstruktur ke Classification API TensorFlow Serving. Meresepkan ini yang harus ada inputs Tensor, dan bahwa ada dua pilihan output yang Tensors: classes dan scores , setidaknya satu dari yang harus hadir.

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 Tanda TanganDef

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

Predict SignatureDefs memungkinkan portabilitas di seluruh model. Ini berarti bahwa Anda dapat swap di SavedModels yang berbeda, mungkin dengan nama yang mendasari Tensor berbeda (misalnya bukan x:0 mungkin Anda memiliki model alternatif baru dengan Tensor z:0 ), sedangkan klien Anda dapat tetap online terus menerus query lama dan baru versi model ini tanpa perubahan sisi klien.

Predict SignatureDefs juga memungkinkan Anda untuk menambahkan Tensor tambahan opsional ke output, yang dapat Anda kueri secara eksplisit. Katakanlah bahwa selain kunci keluaran bawah dari scores , Anda juga ingin mengambil lapisan pooling untuk debugging atau tujuan lain. Dalam hal ini, Anda hanya akan menambahkan Tensor tambahan kunci seperti pool 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. Meresepkan ini bahwa harus ada tepat satu inputs Tensor, dan satu outputs Tensor.

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