SignatureDefs في SavedModel لخدمة TensorFlow

موضوعي

يقدم هذا المستند أمثلة للاستخدام المقصود لـ SignatureDefs في SavedModel والذي يتم تعيينه إلى واجهات برمجة التطبيقات الخاصة بـ TensorFlow Serving.

ملخص

يحدد SignatureDef توقيع الحساب المدعوم في الرسم البياني TensorFlow. تهدف SignatureDefs إلى توفير دعم عام لتحديد مدخلات ومخرجات الوظيفة ويمكن تحديدها عند إنشاء SavedModel .

خلفية

استخدم TF-Exporter و SessionBundle التوقيعات المتشابهة في المفهوم ولكنها تطلب من المستخدمين التمييز بين التوقيعات المسماة والتوقيعات الافتراضية حتى يتم استرجاعها بشكل صحيح عند التحميل. بالنسبة لأولئك الذين استخدموا سابقًا TF-Exporter/SessionBundle، سيتم استبدال Signatures في TF-Exporter بـ SignatureDefs في SavedModel.

هيكل SignatureDef

يتطلب SignatureDef مواصفات:

  • inputs كخريطة لسلسلة إلى TensorInfo.
  • outputs كخريطة لسلسلة إلى TensorInfo.
  • method_name (الذي يتوافق مع اسم الطريقة المدعوم في أداة/نظام التحميل).

لاحظ أن TensorInfo نفسه يتطلب تحديد الاسم ونوع d وشكل الموتر. على الرغم من أن معلومات الموتر موجودة بالفعل في الرسم البياني، فمن المفيد تعريف TensorInfo بشكل صريح كجزء من SignatureDef حيث يمكن للأدوات بعد ذلك التحقق من صحة التوقيع، وما إلى ذلك دون الحاجة إلى قراءة تعريف الرسم البياني.

لسهولة إعادة الاستخدام والمشاركة عبر الأدوات والأنظمة، يتم تعريف الثوابت شائعة الاستخدام المتعلقة بـ SignatureDefs والتي سيتم دعمها في TensorFlow Serving على أنها ثوابت. خاصة:

بالإضافة إلى ذلك، يوفر SavedModel أداة مساعدة للمساعدة في إنشاء تعريف التوقيع.

هياكل العينة

يوفر TensorFlow Serving واجهات برمجة تطبيقات عالية المستوى لإجراء الاستدلال. لتمكين واجهات برمجة التطبيقات هذه، يجب أن تتضمن النماذج واحدًا أو أكثر من SignatureDefs التي تحدد عقد TensorFlow الدقيقة التي سيتم استخدامها للإدخال والإخراج. انظر أدناه للحصول على أمثلة لـ SignatureDefs المحددة التي يدعمها TensorFlow Serving لكل واجهة برمجة تطبيقات.

لاحظ أن خدمة TensorFlow تعتمد على مفاتيح كل TensorInfo (في مدخلات ومخرجات SignatureDef)، بالإضافة إلى اسم الأسلوب الخاص بـ SignatureDef. المحتويات الفعلية لـ TensorInfo خاصة بالرسم البياني الخاص بك.

التصنيف التوقيع

تدعم Classification SignatureDefs الاستدعاءات المنظمة لواجهة برمجة تطبيقات التصنيف الخاصة بـ TensorFlow Serving. تنص هذه على أنه يجب أن يكون هناك موتر inputs ، وأن هناك موترين مخرجين اختياريين: classes scores ، يجب أن يكون أحدهما موجودًا على الأقل.

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

توقع التوقيع

يدعم Predict SignatureDefs المكالمات إلى واجهة برمجة التطبيقات Predict API الخاصة بـ TensorFlow Serving. تسمح لك هذه التوقيعات بدعم العديد من Tensors المدخلات والمخرجات بشكل تعسفي. في المثال أدناه، يحتوي التوقيع my_prediction_signature على images Tensor ذات مدخلات منطقية واحدة تم تعيينها إلى Tensor الفعلي في الرسم البياني الخاص بك x:0 .

يتيح توقع SignatureDefs إمكانية النقل عبر النماذج. هذا يعني أنه يمكنك التبديل بين نماذج SavedModels مختلفة، ربما باستخدام أسماء Tensor أساسية مختلفة (على سبيل المثال بدلاً من x:0 ربما يكون لديك نموذج بديل جديد مع Tensor z:0 )، بينما يمكن لعملائك البقاء متصلين بالإنترنت بشكل مستمر للاستعلام عن القديم والجديد إصدارات هذا النموذج دون تغييرات من جانب العميل.

يتيح لك Predict SignatureDefs أيضًا إضافة Tensors إضافية اختيارية إلى المخرجات، والتي يمكنك الاستعلام عنها بشكل صريح. لنفترض أنه بالإضافة إلى مفتاح الإخراج الموجود أدناه scores ، فأنت تريد أيضًا جلب طبقة تجميع لتصحيح الأخطاء أو لأغراض أخرى. في هذه الحالة، يمكنك ببساطة إضافة Tensor إضافي بمفتاح مثل pool والقيمة المناسبة.

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

توقيع الانحدار

يدعم Regression SignatureDefs الاستدعاءات المنظمة لواجهة برمجة تطبيقات الانحدار الخاصة بـ TensorFlow Serving. تنص هذه على أنه يجب أن يكون هناك موتر inputs واحد بالضبط وموتر 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"
  }
}