جزء لوله InfraValidator TFX

با مجموعه‌ها، منظم بمانید ذخیره و دسته‌بندی محتوا براساس اولویت‌های شما.

InfraValidator یک جزء TFX است که به عنوان یک لایه هشدار اولیه قبل از وارد کردن یک مدل به تولید استفاده می شود. نام اعتبار سنجی «infra» از این واقعیت گرفته شده است که مدل را در مدل واقعی «زیرساخت» تأیید می کند. اگر ارزیاب است برای تضمین عملکرد مدل، InfraValidator است برای تضمین مدل مکانیکی خوب و مانع از مدل های بد را از تحت فشار قرار دادند.

چگونه کار می کند؟

InfraValidator مدل را می گیرد، یک سرور مدل sand-boxed با مدل راه اندازی می کند و می بیند که آیا می توان آن را با موفقیت بارگیری کرد و به صورت اختیاری پرس و جو کرد. نتیجه اعتبار سنجی مادون خواهد شد در تولید blessing خروجی را در همان راه به عنوان ارزیاب می کند.

InfraValidator تمرکز بر سازگاری بین دودویی مدل سرور (به عنوان مثال TensorFlow خدمت ) و مدل برای اعزام. با وجود نام "مادون" اعتبار سنج، آن به عهده کاربر است که برای پیکربندی محیط زیست به درستی، و مادون اعتبار سنج تنها تعامل با سرور مدل در محیط کاربر پیکربندی برای دیدن اگر آن کار می کند. پیکربندی صحیح این محیط اطمینان حاصل می کند که عبور یا عدم موفقیت اعتبار سنجی زیر نشان دهنده این است که آیا مدل در محیط سرویس تولید قابل استفاده است یا خیر. این به برخی از موارد زیر اشاره دارد، اما به آن محدود نمی شود:

  1. InfraValidator از همان مدل باینری سرور استفاده می کند که در تولید استفاده خواهد شد. این حداقل سطحی است که محیط اعتبارسنجی زیرساخت باید به آن همگرا شود.
  2. InfraValidator از همان منابعی استفاده می کند (مثلاً مقدار تخصیص و نوع CPU، حافظه و شتاب دهنده ها) که در تولید استفاده خواهد شد.
  3. InfraValidator از همان پیکربندی سرور مدلی استفاده می کند که در تولید استفاده خواهد شد.

بسته به موقعیت، کاربران می توانند انتخاب کنند که InfraValidator تا چه حد باید با محیط تولید یکسان باشد. از نظر فنی، یک مدل می تواند در یک محیط Docker محلی اعتبار سنجی شود و سپس در یک محیط کاملاً متفاوت (مثلاً خوشه Kubernetes) بدون مشکل ارائه شود. با این حال، InfraValidator این واگرایی را بررسی نخواهد کرد.

حالت کاربری

بسته به پیکربندی، اعتبار سنجی infra در یکی از حالت های زیر انجام می شود:

  • LOAD_ONLY حالت: چک کردن اینکه آیا مدل موفقیت در زیرساخت خدمت یا نه لود شد. یا
  • LOAD_AND_QUERY حالت: LOAD_ONLY حالت به علاوه ارسال برخی از درخواست نمونه برای بررسی در صورتی که مدل قادر به خدمت استنباط است. InfraValidator اهمیتی نمی دهد که پیش بینی درست بود یا خیر. فقط موفقیت یا عدم موفقیت درخواست مهم است.

چگونه از آن استفاده کنم؟

معمولا InfraValidator در کنار یک جزء Evaluator تعریف می شود و خروجی آن به یک Pusher داده می شود. اگر 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 است. تعریف می کند:

  • چه نوع از سرور مدل به اجرا
  • که در آن به آن را اجرا کنید

برای انواع سرور مدل (به نام سرویس دودویی) ما پشتیبانی می کنیم

پلتفرم‌های خدماتی زیر در حال حاضر پشتیبانی می‌شوند:

  • Local Docker (Docker باید از قبل نصب شده باشد)
  • Kubernetes (پشتیبانی محدود فقط برای KubeflowDagRunner)

انتخاب برای خدمت به باینری و خدمت پلت فرم هستند که بوسیله تعیین یک ساخته شده oneof بلوک از ServingSpec . به عنوان مثال برای استفاده از TensorFlow خدمت در حال اجرا باینری در خوشه Kubernetes، 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 ، لطفا به تعریف protobuf .

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 دارای یک مقدار پیش فرض صدا هستند. بررسی جزئیات بیشتر از تعریف protobuf .

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.
    )
)

تولید SavedModel با گرم کردن

(از نسخه 0.30.0)

از آنجا که مدل InfraValidator تایید با درخواست واقعی، آن به راحتی می توانید این درخواست اعتبار سنجی به عنوان استفاده مجدد درخواست warmup چون از یک SavedModel. InfraValidator یک گزینه (فراهم می کند RequestSpec.make_warmup ) به صادرات یک SavedModel با گرم کردن.

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

سپس خروجی InfraBlessing مصنوع شامل یک SavedModel با گرم کردن، و همچنین می تواند توسط تحت فشار قرار دادند فروشنده ، درست مثل Model مصنوع.

محدودیت ها

InfraValidator فعلی هنوز کامل نشده است و محدودیت هایی دارد.

  • فقط TensorFlow SavedModel فرمت مدل را می توان تایید شده است.
  • هنگامی که در حال اجرا TFX در Kubernetes، این خط لوله باید توسط اعدام KubeflowDagRunner داخل Kubeflow خط لوله. سرور مدل در همان خوشه Kubernetes و فضای نامی که Kubeflow استفاده می کند راه اندازی می شود.
  • InfraValidator در درجه اول در استقرار متمرکز TensorFlow خدمت ، و در حالی که هنوز از آن مفید کمتر دقیق برای استقرار است TensorFlow آرشیو و TensorFlow.js ، و یا دیگر چارچوب استنتاج است.
  • یک پشتیبانی محدود وجود دارد LOAD_AND_QUERY حالت برای پیش بینی متد (که تنها روش صادراتی در TensorFlow 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'))
    })
    
    • چک کردن یک مثال پنگوئن کد نمونه تا ببینید که چگونه تعامل این امضا با دیگر اجزای در TFX.