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

उद्देश्य

यह दस्तावेज़ SavedModel में सिग्नेचरडिफ़्स के इच्छित उपयोग के लिए उदाहरण प्रदान करता है जो TensorFlow सर्विंग के API से मैप होता है।

अवलोकन

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

पृष्ठभूमि

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

सिग्नेचरडेफ़ संरचना

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

  • TensorInfo में स्ट्रिंग के मानचित्र के रूप में inputs
  • TensorInfo पर स्ट्रिंग के मानचित्र के रूप में outputs
  • method_name (जो लोडिंग टूल/सिस्टम में समर्थित मेथड नाम से मेल खाता है)।

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

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

इसके अलावा, SaveModel सिग्नेचर-डीफ़ बनाने में मदद के लिए एक उपयोगिता प्रदान करता है।

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

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

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

वर्गीकरण हस्ताक्षर डीईएफ़

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

सिग्नेचरडिफ की भविष्यवाणी करें

प्रेडिक्ट सिग्नेचरडिफ्स टेन्सरफ्लो सर्विंग के प्रेडिक्ट एपीआई पर कॉल का समर्थन करता है। ये हस्ताक्षर आपको लचीले ढंग से मनमाने ढंग से कई इनपुट और आउटपुट टेंसर का समर्थन करने की अनुमति देते हैं। नीचे दिए गए उदाहरण के लिए, हस्ताक्षर my_prediction_signature में एक एकल तार्किक इनपुट Tensor images जो आपके ग्राफ़ x:0 में वास्तविक Tensor पर मैप की गई हैं।

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

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