TensorFlow सर्विंग के लिए सेव्डमॉडल में सिग्नेचरडिफ्स

संग्रह की मदद से व्यवस्थित रहें अपनी प्राथमिकताओं के आधार पर, कॉन्टेंट को सेव करें और कैटगरी में बांटें.

उद्देश्य

यह दस्तावेज़ सेव्डमॉडल में सिग्नेचरडिफ्स के इच्छित उपयोग के लिए उदाहरण प्रदान करता है जो टेंसरफ्लो सर्विंग के एपीआई के लिए मैप करता है।

अवलोकन

एक SignatureDef एक गणना एक TensorFlow ग्राफ में समर्थित के हस्ताक्षर परिभाषित करता है। SignatureDefs इनपुट और एक समारोह के आउटपुट की पहचान के लिए सामान्य समर्थन प्रदान करने का लक्ष्य है और जब एक निर्माण निर्दिष्ट किया जा सकता SavedModel

पृष्ठभूमि

TF-निर्यातक और SessionBundle इस्तेमाल किया हस्ताक्षर क्रम में नामित किया गया है और डिफ़ॉल्ट हस्ताक्षर के बीच अंतर करना जो अवधारणा में समान हैं, लेकिन आवश्यक उपयोगकर्ताओं को उन एक लोड पर सही ढंग से प्राप्त किया जा करने के लिए। जो लोग पहले से TF-निर्यातक / SessionBundle इस्तेमाल किया, के लिए Signatures TF-निर्यातक में से बदल दिया जाएगा SignatureDefs SavedModel में।

सिग्नेचरडिफ स्ट्रक्चर

एक सिग्नेचरडिफ को इसके विनिर्देशन की आवश्यकता होती है:

  • inputs TensorInfo के तार का एक नक्शे के रूप में।
  • outputs TensorInfo के तार का एक नक्शे के रूप में।
  • method_name (जो लोड हो रहा है उपकरण / प्रणाली में एक समर्थित विधि नाम से मेल खाती है)।

ध्यान दें कि TensorInfo ही नाम, dtype और टेन्सर आकार के विनिर्देश की आवश्यकता है। जबकि टेंसर जानकारी पहले से ही ग्राफ़ में मौजूद है, यह स्पष्ट रूप से TensorInfo को सिग्नेचरडिफ के हिस्से के रूप में परिभाषित करने के लिए उपयोगी है क्योंकि टूल तब ग्राफ़ परिभाषा को पढ़े बिना हस्ताक्षर सत्यापन आदि कर सकते हैं।

टूल और सिस्टम में पुन: उपयोग और साझा करने में आसानी के लिए, सिग्नेचरडिफ्स से संबंधित आमतौर पर उपयोग किए जाने वाले स्थिरांक जो TensorFlow सर्विंग में समर्थित होंगे, उन्हें स्थिरांक के रूप में परिभाषित किया गया है। विशेष रूप से:

इसके अलावा, SavedModel एक प्रदान करता है util बनाने में मदद करने के लिए एक हस्ताक्षर-डीईएफ़।

नमूना संरचनाएं

TensorFlow Serving अनुमान लगाने के लिए उच्च स्तरीय API प्रदान करता है। इन एपीआई को सक्षम करने के लिए, मॉडल में एक या अधिक सिग्नेचरडिफ शामिल होने चाहिए जो इनपुट और आउटपुट के लिए उपयोग करने के लिए सटीक TensorFlow नोड्स को परिभाषित करते हैं। प्रत्येक API के लिए TensorFlow Serving द्वारा समर्थित विशिष्ट SignatureDefs के उदाहरणों के लिए नीचे देखें।

ध्यान दें कि TensorFlow सर्विंग प्रत्येक TensorInfo (SignatureDef के इनपुट और आउटपुट में) की कुंजियों के साथ-साथ SignatureDef के मेथड_नाम पर निर्भर करता है। TensorInfo की वास्तविक सामग्री आपके ग्राफ़ के लिए विशिष्ट है।

वर्गीकरण हस्ताक्षरडिफ

Classification SignatureDefs TensorFlow Serving's Classification API को संरचित कॉल का समर्थन करता है। ये विहित कि वहाँ एक होना चाहिए inputs दो वैकल्पिक उत्पादन Tensors देखते हैं टेन्सर, और कहा कि: 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 TensorFlow Serving's Predict API को कॉल का समर्थन करता है। ये हस्ताक्षर आपको मनमाने ढंग से कई इनपुट और आउटपुट Tensors का लचीले ढंग से समर्थन करने की अनुमति देते हैं। नीचे दिए गए उदाहरण के लिए, हस्ताक्षर my_prediction_signature एक भी तार्किक इनपुट टेन्सर है images कि अपने ग्राफ़ के वास्तविक टेन्सर पर मैप किए जाते x:0

प्रेडिक्ट सिग्नेचरडिफ्स सभी मॉडलों में पोर्टेबिलिटी को सक्षम बनाता है। इसका मतलब है कि आप संभवतः अलग अंतर्निहित टेन्सर नाम के साथ, अलग SavedModels में स्वैप कर सकते हैं (उदाहरण के लिए के बजाय x:0 शायद आप एक टेन्सर के साथ एक नया वैकल्पिक मॉडल है z:0 ) है, जबकि अपने ग्राहकों को ऑनलाइन लगातार पुराने और नए से क्वेरी रह सकते हैं क्लाइंट-साइड परिवर्तन के बिना इस मॉडल के संस्करण।

Predict SignatureDefs आपको आउटपुट में वैकल्पिक अतिरिक्त Tensors जोड़ने की अनुमति देता है, जिसे आप स्पष्ट रूप से क्वेरी कर सकते हैं। चलो इस बात का नीचे उत्पादन कुंजी के अलावा कहना scores , आप भी डिबगिंग या अन्य प्रयोजनों के लिए एक पूलिंग परत लाने के लिए करना चाहता था। उस मामले में, आप बस की तरह एक कुंजी के साथ एक अतिरिक्त टेन्सर जोड़ना होगा 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"
  }
}

रिग्रेशन सिग्नेचरडिफ

रिग्रेशन सिग्नेचरडिफ्स टेंसरफ्लो सर्विंग के रिग्रेशन एपीआई के लिए संरचित कॉल का समर्थन करता है। ये विहित है कि वहाँ वास्तव में एक होना चाहिए 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"
  }
}