इन्फ्रावैलिडेटर टीएफएक्स पाइपलाइन घटक

इन्फ्रावैलिडेटर एक टीएफएक्स घटक है जिसका उपयोग किसी मॉडल को उत्पादन में धकेलने से पहले प्रारंभिक चेतावनी परत के रूप में किया जाता है। "इन्फ्रा" सत्यापनकर्ता नाम इस तथ्य से आया है कि यह "बुनियादी ढांचे" की सेवा करने वाले वास्तविक मॉडल में मॉडल को मान्य कर रहा है। यदि मूल्यांकनकर्ता को मॉडल के प्रदर्शन की गारंटी देनी है, तो इन्फ्रावैलिडेटर को यह गारंटी देनी है कि मॉडल यांत्रिक रूप से ठीक है और खराब मॉडल को आगे बढ़ने से रोकता है।

यह कैसे काम करता है?

इन्फ्रावैलिडेटर मॉडल लेता है, मॉडल के साथ एक सैंड-बॉक्स्ड मॉडल सर्वर लॉन्च करता है, और देखता है कि क्या इसे सफलतापूर्वक लोड किया जा सकता है और वैकल्पिक रूप से पूछताछ की जा सकती है। इन्फ्रा सत्यापन परिणाम blessing आउटपुट में उसी तरह उत्पन्न किया जाएगा जैसे मूल्यांकनकर्ता करता है।

InfraValidator मॉडल सर्वर बाइनरी (उदाहरण के लिए TensorFlow सर्विंग ) और तैनात किए जाने वाले मॉडल के बीच संगतता पर ध्यान केंद्रित करता है। "इन्फ्रा" वैलिडेटर नाम के बावजूद, पर्यावरण को सही ढंग से कॉन्फ़िगर करना उपयोगकर्ता की जिम्मेदारी है, और इंफ्रा वैलिडेटर केवल उपयोगकर्ता द्वारा कॉन्फ़िगर किए गए वातावरण में मॉडल सर्वर के साथ इंटरैक्ट करता है यह देखने के लिए कि क्या यह ठीक से काम करता है। इस वातावरण को सही ढंग से कॉन्फ़िगर करने से यह सुनिश्चित हो जाएगा कि इन्फ्रा सत्यापन पास होना या विफल होना इस बात का संकेत होगा कि मॉडल उत्पादन सेवा वातावरण में सेवा योग्य होगा या नहीं। इसका तात्पर्य निम्नलिखित में से कुछ से है, लेकिन यह यहीं तक सीमित नहीं है:

  1. InfraValidator उसी मॉडल सर्वर बाइनरी का उपयोग कर रहा है जिसका उपयोग उत्पादन में किया जाएगा। यह न्यूनतम स्तर है जिस पर इन्फ्रा सत्यापन वातावरण का अभिसरण होना चाहिए।
  2. इन्फ्रावैलिडेटर उन्हीं संसाधनों (उदाहरण के लिए आवंटन मात्रा और सीपीयू, मेमोरी और एक्सेलेरेटर के प्रकार) का उपयोग कर रहा है, जिनका उपयोग उत्पादन में किया जाएगा।
  3. InfraValidator उसी मॉडल सर्वर कॉन्फ़िगरेशन का उपयोग कर रहा है जिसका उपयोग उत्पादन में किया जाएगा।

स्थिति के आधार पर, उपयोगकर्ता यह चुन सकते हैं कि इन्फ्रावैलिडेटर किस हद तक उत्पादन वातावरण के समान होना चाहिए। तकनीकी रूप से, एक मॉडल को स्थानीय डॉकर वातावरण में बुनियादी तौर पर मान्य किया जा सकता है और फिर बिना किसी समस्या के पूरी तरह से अलग वातावरण (जैसे कुबेरनेट्स क्लस्टर) में परोसा जा सकता है। हालाँकि, InfraValidator ने इस विचलन की जाँच नहीं की होगी।

ऑपरेशन मोड

कॉन्फ़िगरेशन के आधार पर, इन्फ्रा सत्यापन निम्नलिखित में से किसी एक मोड में किया जाता है:

  • LOAD_ONLY मोड: यह जांचना कि मॉडल को सर्विंग इंफ्रास्ट्रक्चर में सफलतापूर्वक लोड किया गया था या नहीं। या
  • LOAD_AND_QUERY मोड: LOAD_ONLY मोड प्लस यह जांचने के लिए कुछ नमूना अनुरोध भेज रहा है कि मॉडल अनुमान प्रस्तुत करने में सक्षम है या नहीं। InfraValidator को इसकी परवाह नहीं है कि भविष्यवाणी सही थी या नहीं। केवल यह मायने रखता है कि अनुरोध सफल हुआ या नहीं।

मैं इसे कैसे इस्तेमाल करूं?

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

evaluator = Evaluator(
    model=trainer.outputs['model'],
    examples=example_gen.outputs['examples'],
    baseline_model=model_resolver.outputs['model'],
    eval_config=tfx.proto.EvalConfig(...)
)

infra_validator = InfraValidator(
    model=trainer.outputs['model'],
    serving_spec=tfx.proto.ServingSpec(...)
)

pusher = Pusher(
    model=trainer.outputs['model'],
    model_blessing=evaluator.outputs['blessing'],
    infra_blessing=infra_validator.outputs['blessing'],
    push_destination=tfx.proto.PushDestination(...)
)

एक इन्फ्रावैलिडेटर घटक को कॉन्फ़िगर करना।

InfraValidator को कॉन्फ़िगर करने के लिए तीन प्रकार के प्रोटोज़ हैं।

ServingSpec

इन्फ्रावैलिडेटर के लिए ServingSpec सबसे महत्वपूर्ण कॉन्फ़िगरेशन है। यह परिभाषित करता है:

  • किस प्रकार का मॉडल सर्वर चलाना है
  • इसे कहां चलाना है

मॉडल सर्वर प्रकारों (जिन्हें सर्विंग बाइनरी कहा जाता है) के लिए हम समर्थन करते हैं

वर्तमान में निम्नलिखित सेवा प्लेटफ़ॉर्म समर्थित हैं:

  • स्थानीय डॉकर (डॉकर पहले से स्थापित होना चाहिए)
  • Kubernetes (केवल KubeflowDagRunner के लिए सीमित समर्थन)

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

infra_validator=InfraValidator(
    model=trainer.outputs['model'],
    serving_spec=tfx.proto.ServingSpec(
        tensorflow_serving=tfx.proto.TensorFlowServing(
            tags=['latest']
        ),
        kubernetes=tfx.proto.KubernetesConfig()
    )
)

ServingSpec और अधिक कॉन्फ़िगर करने के लिए, कृपया प्रोटोबफ़ परिभाषा देखें।

ValidationSpec

इन्फ्रा सत्यापन मानदंड या वर्कफ़्लो को समायोजित करने के लिए वैकल्पिक कॉन्फ़िगरेशन।

infra_validator=InfraValidator(
    model=trainer.outputs['model'],
    serving_spec=tfx.proto.ServingSpec(...),
    validation_spec=tfx.proto.ValidationSpec(
        # How much time to wait for model to load before automatically making
        # validation fail.
        max_loading_time_seconds=60,
        # How many times to retry if infra validation fails.
        num_tries=3
    )
)

सभी वैलिडेशनस्पेक फ़ील्ड में एक ध्वनि डिफ़ॉल्ट मान होता है। प्रोटोबफ़ परिभाषा से अधिक विवरण देखें।

RequestSpec

LOAD_AND_QUERY मोड में इन्फ्रा सत्यापन चलाते समय नमूना अनुरोध कैसे बनाएं, यह निर्दिष्ट करने के लिए वैकल्पिक कॉन्फ़िगरेशन। LOAD_AND_QUERY मोड का उपयोग करने के लिए, घटक परिभाषा में request_spec निष्पादन गुणों के साथ-साथ examples इनपुट चैनल दोनों को निर्दिष्ट करना आवश्यक है।

infra_validator = InfraValidator(
    model=trainer.outputs['model'],
    # This is the source for the data that will be used to build a request.
    examples=example_gen.outputs['examples'],
    serving_spec=tfx.proto.ServingSpec(
        # Depending on what kind of model server you're using, RequestSpec
        # should specify the compatible one.
        tensorflow_serving=tfx.proto.TensorFlowServing(tags=['latest']),
        local_docker=tfx.proto.LocalDockerConfig(),
    ),
    request_spec=tfx.proto.RequestSpec(
        # InfraValidator will look at how "classification" signature is defined
        # in the model, and automatically convert some samples from `examples`
        # artifact to prediction RPC requests.
        tensorflow_serving=tfx.proto.TensorFlowServingRequestSpec(
            signature_names=['classification']
        ),
        num_examples=10  # How many requests to make.
    )
)

वार्मअप के साथ एक सेव्डमॉडल का निर्माण

(संस्करण 0.30.0 से)

चूँकि InfraValidator वास्तविक अनुरोधों के साथ मॉडल को मान्य करता है, इसलिए यह इन सत्यापन अनुरोधों को SaveModel के वार्मअप अनुरोधों के रूप में आसानी से पुन: उपयोग कर सकता है। इन्फ्रावैलिडेटर वार्मअप के साथ सेव्डमॉडल को निर्यात करने के लिए एक विकल्प ( RequestSpec.make_warmup ) प्रदान करता है।

infra_validator = InfraValidator(
    ...,
    request_spec=tfx.proto.RequestSpec(..., make_warmup=True)
)

फिर आउटपुट InfraBlessing आर्टिफैक्ट में वार्मअप के साथ एक सेव्डमॉडल शामिल होगा, और इसे Model आर्टिफैक्ट की तरह पुशर द्वारा भी पुश किया जा सकता है।

सीमाएँ

वर्तमान इन्फ्रावैलिडेटर अभी पूरा नहीं हुआ है और इसकी कुछ सीमाएँ हैं।

  • केवल TensorFlow SavedModel मॉडल प्रारूप को मान्य किया जा सकता है।
  • Kubernetes पर TFX चलाते समय, पाइपलाइन को Kubeflow पाइपलाइन के अंदर KubeflowDagRunner द्वारा निष्पादित किया जाना चाहिए। मॉडल सर्वर को उसी कुबेरनेट्स क्लस्टर और नेमस्पेस में लॉन्च किया जाएगा जिसका उपयोग क्यूबफ़्लो कर रहा है।
  • InfraValidator मुख्य रूप से TensorFlow सर्विंग पर तैनाती पर केंद्रित है, और अभी भी उपयोगी होने के बावजूद यह TensorFlow Lite और TensorFlow.js , या अन्य अनुमान ढांचे पर तैनाती के लिए कम सटीक है।
  • प्रेडिक्ट विधि हस्ताक्षर के लिए LOAD_AND_QUERY मोड पर सीमित समर्थन है (जो कि TensorFlow 2 में एकमात्र निर्यात योग्य विधि है)। InfraValidator को एकमात्र इनपुट के रूप में क्रमबद्ध tf.Example उपभोग करने के लिए Predict हस्ताक्षर की आवश्यकता होती है।

    @tf.function
    def parse_and_run(serialized_example):
      features = tf.io.parse_example(serialized_example, FEATURES)
      return model(features)
    
    model.save('path/to/save', signatures={
      # This exports "Predict" method signature under name "serving_default".
      'serving_default': parse_and_run.get_concrete_function(
          tf.TensorSpec(shape=[None], dtype=tf.string, name='examples'))
    })
    
    • यह देखने के लिए पेंगुइन उदाहरण नमूना कोड देखें कि यह हस्ताक्षर टीएफएक्स में अन्य घटकों के साथ कैसे इंटरैक्ट करता है।