InfraValidator TFX পাইপলাইন উপাদান

InfraValidator হল একটি TFX উপাদান যা একটি মডেলকে উৎপাদনে ঠেলে দেওয়ার আগে একটি প্রাথমিক সতর্কতা স্তর হিসেবে ব্যবহৃত হয়। "ইনফ্রা" ভ্যালিডেটর নামটি এই সত্য থেকে এসেছে যে এটি "অবকাঠামো" পরিবেশনকারী প্রকৃত মডেলে মডেলটিকে যাচাই করছে। যদি মূল্যায়নকারী মডেলের কর্মক্ষমতার গ্যারান্টি দিতে হয়, তাহলে ইনফ্রাভালিডেটরকে গ্যারান্টি দিতে হবে যে মডেলটি যান্ত্রিকভাবে ঠিক আছে এবং খারাপ মডেলগুলিকে ঠেলে দেওয়া থেকে বিরত রাখে।

এটা কিভাবে কাজ করে?

InfraValidator মডেলটি নেয়, মডেলের সাথে একটি বালি-বক্সযুক্ত মডেল সার্ভার চালু করে এবং এটি সফলভাবে লোড করা যায় এবং ঐচ্ছিকভাবে জিজ্ঞাসা করা যায় কিনা তা দেখে। মূল্যায়নকারীর মতই blessing আউটপুটে ইনফ্রা যাচাইকরণের ফলাফল তৈরি করা হবে।

InfraValidator মডেল সার্ভার বাইনারি (যেমন TensorFlow Serving ) এবং স্থাপন করা মডেলের মধ্যে সামঞ্জস্যের উপর ফোকাস করে। "ইনফ্রা" ভ্যালিডেটর নাম থাকা সত্ত্বেও, পরিবেশটি সঠিকভাবে কনফিগার করার দায়িত্ব ব্যবহারকারীর , এবং ইনফ্রা ভ্যালিডেটর কেবলমাত্র ব্যবহারকারী-কনফিগার করা পরিবেশে মডেল সার্ভারের সাথে ইন্টারঅ্যাক্ট করে এটি ঠিক কাজ করে কিনা তা দেখতে। এই পরিবেশটি সঠিকভাবে কনফিগার করা নিশ্চিত করবে যে ইনফ্রা বৈধতা পাস করা বা ব্যর্থ হওয়া মডেলটি উত্পাদন পরিবেশন পরিবেশে পরিবেশনযোগ্য হবে কিনা তা নির্দেশ করবে। এটি নিম্নলিখিতগুলির মধ্যে কিছু বোঝায়, তবে সীমাবদ্ধ নয়:

  1. InfraValidator একই মডেল সার্ভার বাইনারি ব্যবহার করছে যা উৎপাদনে ব্যবহার করা হবে। এটি সর্বনিম্ন স্তর যেখানে ইনফ্রা বৈধতা পরিবেশকে একত্রিত করতে হবে।
  2. InfraValidator একই রিসোর্স ব্যবহার করছে (যেমন বরাদ্দের পরিমাণ এবং CPU, মেমরি এবং এক্সিলারেটরগুলির ধরন) যা উৎপাদনে ব্যবহার করা হবে।
  3. InfraValidator একই মডেল সার্ভার কনফিগারেশন ব্যবহার করছে যা উৎপাদনে ব্যবহার করা হবে।

পরিস্থিতির উপর নির্ভর করে, ব্যবহারকারীরা নির্বাচন করতে পারেন কোন মাত্রায় ইনফ্রাভালিডেটর উৎপাদন পরিবেশের সাথে অভিন্ন হওয়া উচিত। প্রযুক্তিগতভাবে, একটি মডেল একটি স্থানীয় ডকার পরিবেশে ইনফ্রা যাচাই করা যেতে পারে এবং তারপর একটি সম্পূর্ণ ভিন্ন পরিবেশে (যেমন কুবারনেটস ক্লাস্টার) কোনো সমস্যা ছাড়াই পরিবেশন করা যেতে পারে। যাইহোক, InfraValidator এই ভিন্নতার জন্য চেক করবে না।

অপারেশন মোড

কনফিগারেশনের উপর নির্ভর করে, ইনফ্রা যাচাইকরণ নিম্নলিখিত মোডগুলির মধ্যে একটিতে করা হয়:

  • LOAD_ONLY মোড: পরিবেশন পরিকাঠামোতে মডেলটি সফলভাবে লোড হয়েছে কিনা তা পরীক্ষা করা হচ্ছে। বা
  • LOAD_AND_QUERY মোড: LOAD_ONLY মোড প্লাস মডেল অনুমান পরিবেশন করতে সক্ষম কিনা তা পরীক্ষা করার জন্য কিছু নমুনা অনুরোধ পাঠানো। InfraValidator ভবিষ্যদ্বাণীটি সঠিক ছিল কি না তা চিন্তা করে না। শুধুমাত্র অনুরোধটি সফল হয়েছে কিনা তা গুরুত্বপূর্ণ।

আমি কিভাবে এটা ব্যবহার করব?

সাধারণত InfraValidator একটি Evaluator উপাদানের পাশে সংজ্ঞায়িত করা হয় এবং এর আউটপুট একটি পুশারকে দেওয়া হয়। 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 উপাদান কনফিগার করা।

InfraValidator কনফিগার করার জন্য তিন ধরনের প্রোটো আছে।

ServingSpec

ServingSpec হল InfraValidator-এর জন্য সবচেয়ে গুরুত্বপূর্ণ কনফিগারেশন। এটি সংজ্ঞায়িত করে:

  • কি ধরনের মডেল সার্ভার চালাতে হবে
  • যেখানে এটি চালাতে হবে

মডেল সার্ভার প্রকারের জন্য (যাকে সার্ভিং বাইনারি বলা হয়) আমরা সমর্থন করি

নিম্নলিখিত পরিবেশন প্ল্যাটফর্মগুলি বর্তমানে সমর্থিত:

  • স্থানীয় ডকার (ডকার আগে থেকে ইনস্টল করা উচিত)
  • 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
    )
)

সমস্ত ValidationSpec ক্ষেত্রের একটি সাউন্ড ডিফল্ট মান আছে। প্রোটোবাফ সংজ্ঞা থেকে আরও বিশদ পরীক্ষা করুন।

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 বাস্তব অনুরোধের সাথে মডেলকে যাচাই করে, তাই এটি সহজেই এই বৈধকরণের অনুরোধগুলিকে একটি SavedModel-এর ওয়ার্মআপ অনুরোধ হিসাবে পুনরায় ব্যবহার করতে পারে। InfraValidator একটি অপশন ( RequestSpec.make_warmup ) প্রদান করে ওয়ার্মআপ সহ একটি সেভডমডেল রপ্তানি করতে।

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

তারপর আউটপুট InfraBlessing আর্টিফ্যাক্টে ওয়ার্মআপ সহ একটি সেভডমডেল থাকবে এবং Model আর্টিফ্যাক্টের মতোই পুশার দ্বারা পুশ করা যেতে পারে।

সীমাবদ্ধতা

বর্তমান InfraValidator এখনও সম্পূর্ণ নয়, এবং কিছু সীমাবদ্ধতা আছে।

  • শুধুমাত্র TensorFlow SavedModel মডেল ফরম্যাট যাচাই করা যেতে পারে।
  • Kubernetes-এ TFX চালানোর সময়, Kubeflow Pipelines-এর ভিতরে KubeflowDagRunner দ্বারা পাইপলাইনটি কার্যকর করা উচিত। মডেল সার্ভারটি একই Kubernetes ক্লাস্টারে চালু করা হবে এবং Kubeflow যে নামস্থান ব্যবহার করছে।
  • InfraValidator প্রাথমিকভাবে টেনসরফ্লো সার্ভিং- এ স্থাপনার উপর দৃষ্টি নিবদ্ধ করে, এবং এখনও উপযোগী হলেও এটি TensorFlow Lite এবং TensorFlow.js , বা অন্যান্য অনুমান কাঠামোতে স্থাপনার জন্য কম সঠিক।
  • ভবিষ্যদ্বাণী পদ্ধতি স্বাক্ষরের জন্য LOAD_AND_QUERY মোডে একটি সীমিত সমর্থন রয়েছে (যা টেনসরফ্লো 2-এ একমাত্র রপ্তানিযোগ্য পদ্ধতি)। InfraValidator-এর জন্য একটি ক্রমিককৃত tf.Example শুধুমাত্র ইনপুট হিসাবে ব্যবহার করার জন্য পূর্বাভাস স্বাক্ষর প্রয়োজন।

    @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'))
    })
    
    • এই স্বাক্ষর টিএফএক্স-এর অন্যান্য উপাদানগুলির সাথে কীভাবে ইন্টারঅ্যাক্ট করে তা দেখতে একটি পেঙ্গুইন উদাহরণ নমুনা কোড দেখুন।