TensorFlow Sunumu için SavedModel'de SignatureDef'ler

Amaç

Bu belge, TensorFlow Serving'in API'leriyle eşlenen SavedModel'deki SignatureDef'lerin amaçlanan kullanımına ilişkin örnekler sağlar.

Genel Bakış

SignatureDef, TensorFlow grafiğinde desteklenen bir hesaplamanın imzasını tanımlar. SignatureDef'ler, bir fonksiyonun giriş ve çıkışlarını tanımlamak için genel destek sağlamayı amaçlar ve SavedModel oluşturulurken belirtilebilir.

Arka plan

TF-Exporter ve SessionBundle, kavram olarak benzer olan ancak yükleme sırasında doğru şekilde alınabilmeleri için kullanıcıların adlandırılmış imzalar ile varsayılan imzalar arasında ayrım yapmasını gerektiren İmzalar kullandı. Daha önce TF-Exporter/SessionBundle kullanmış olanlar için TF-Exporter'daki Signatures , SavedModel'deki SignatureDefs ile değiştirilecektir.

SignatureDef Yapısı

SignatureDef aşağıdakilerin belirtilmesini gerektirir:

  • TensorInfo'ya dize haritası olarak inputs .
  • TensorInfo'ya bir dize haritası olarak outputs .
  • method_name (yükleme aracında/sistemde desteklenen bir yöntem adına karşılık gelir).

TensorInfo'nun kendisinin ad, dtype ve tensör şeklinin belirtilmesini gerektirdiğini unutmayın. Tensör bilgisi grafikte zaten mevcut olsa da, araçlar daha sonra grafik tanımını okumak zorunda kalmadan imza doğrulama vb. gerçekleştirebileceğinden, TensorInfo'nun SignatureDef'in bir parçası olarak açıkça tanımlanması yararlı olacaktır.

Araçlar ve sistemler arasında yeniden kullanım ve paylaşım kolaylığı sağlamak amacıyla TensorFlow Serving'de desteklenecek SignatureDef'lerle ilgili yaygın olarak kullanılan sabitler, sabitler olarak tanımlanır. Özellikle:

Ek olarak SavedModel, bir imza-def oluşturmaya yardımcı olacak bir araç sağlar.

Örnek yapılar

TensorFlow Serving, çıkarım gerçekleştirmek için yüksek düzeyde API'ler sağlar. Bu API'leri etkinleştirmek için modellerin, giriş ve çıkış için kullanılacak tam TensorFlow düğümlerini tanımlayan bir veya daha fazla SignatureDef içermesi gerekir. TensorFlow Serving'in her API için desteklediği belirli SignatureDef örnekleri için aşağıya bakın.

TensorFlow Sunumunun, her TensorInfo'nun anahtarlarına (SignatureDef'in giriş ve çıkışlarında) ve SignatureDef'in method_name'ine bağlı olduğunu unutmayın. TensorInfo'nun gerçek içeriği grafiğinize özeldir.

Sınıflandırma İmzaDef

Classification SignatureDefs, TensorFlow Serving'in Sınıflandırma API'sine yapılan yapılandırılmış çağrıları destekler. Bunlar, bir inputs Tensörü olması gerektiğini ve iki isteğe bağlı çıkış Tensörü olduğunu belirtir: classes ve scores ; bunlardan en az birinin mevcut olması gerekir.

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

SignatureDef'i tahmin et

Predict SignatureDefs, TensorFlow Serving'in Predict API'sine yapılan çağrıları destekler. Bu imzalar, isteğe bağlı olarak birçok giriş ve çıkış Tensörünü esnek bir şekilde desteklemenize olanak tanır. Aşağıdaki örnekte, my_prediction_signature imzası, grafiğinizdeki x:0 gerçek Tensör ile eşlenen tek bir mantıksal giriş Tensör images sahiptir.

Predict SignatureDef'ler modeller arasında taşınabilirliğe olanak tanır. Bu, müşterileriniz sürekli olarak eski ve yeniyi sorgulayarak çevrimiçi kalabilirken, muhtemelen farklı temel Tensor adlarıyla (örneğin, x:0 yerine belki Tensor z:0 içeren yeni bir alternatif modeliniz var) farklı SavedModels'ı değiştirebileceğiniz anlamına gelir. Bu modelin istemci tarafında değişiklik yapılmayan sürümleri.

Predict SignatureDefs ayrıca çıktılara açıkça sorgulayabileceğiniz isteğe bağlı ek Tensörler eklemenize de olanak tanır. scores altındaki çıktı anahtarına ek olarak, hata ayıklama veya başka amaçlar için bir havuzlama katmanı da getirmek istediğinizi varsayalım. Bu durumda, pool gibi bir anahtara ve uygun değere sahip ek bir Tensör eklemeniz yeterlidir.

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

Regresyon İmzasıDef

Regression SignatureDefs, TensorFlow Serving'in Regression API'sine yapılan yapılandırılmış çağrıları destekler. Bunlar, tam olarak bir inputs Tensörü ve bir outputs Tensörü olması gerektiğini belirtir.

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