InfraValidator TFX İşlem Hattı Bileşeni

InfraValidator, bir modeli üretime sokmadan önce erken uyarı katmanı olarak kullanılan bir TFX bileşenidir. "Altyapı" doğrulayıcı adı, modeli "altyapıya" hizmet eden gerçek modelde doğruluyor olmasından kaynaklanmaktadır. Evaluator modelin performansını garanti edecekse, InfraValidator modelin mekanik olarak iyi olduğunu garanti edecek ve kötü modellerin itilmesini önleyecektir.

Nasıl çalışır?

InfraValidator modeli alır, modelle birlikte korumalı alanlı bir model sunucusunu başlatır ve başarılı bir şekilde yüklenip yüklenemeyeceğini ve isteğe bağlı olarak sorgulanıp sorgulanamayacağını görür. Alt doğrulama sonucu, değerlendiricinin yaptığı gibi blessing çıktısında oluşturulacaktır.

InfraValidator, model sunucusu ikili dosyası (örn. TensorFlow Serving ) ile dağıtılacak model arasındaki uyumluluğa odaklanır. "Infra" doğrulayıcı ismine rağmen, ortamı doğru şekilde yapılandırmak kullanıcının sorumluluğundadır ve infra doğrulayıcı, düzgün çalışıp çalışmadığını görmek için yalnızca kullanıcı tarafından yapılandırılan ortamdaki model sunucuyla etkileşime girer. Bu ortamın doğru şekilde yapılandırılması, altyapı doğrulamanın başarılı veya başarısız olmasının, modelin üretim hizmet ortamında sunulabilir olup olmayacağının göstergesi olmasını sağlayacaktır. Bu, aşağıdakilerin bazılarını ifade eder, ancak bunlarla sınırlı değildir:

  1. InfraValidator, üretimde kullanılacak olan aynı model sunucu ikili programını kullanıyor. Bu, altyapı doğrulama ortamının yakınlaşması gereken minimum düzeydir.
  2. InfraValidator, üretimde kullanılacak kaynakların aynısını (örn. tahsis miktarı ve CPU tipi, bellek ve hızlandırıcılar) kullanıyor.
  3. InfraValidator, üretimde kullanılacak sunucu konfigürasyonunun aynısını kullanıyor.

Duruma bağlı olarak kullanıcılar, InfraValidator'ın üretim ortamıyla ne dereceye kadar aynı olması gerektiğini seçebilir. Teknik olarak, bir modelin yerel Docker ortamında alt doğrulaması yapılabilir ve daha sonra tamamen farklı bir ortamda (örn. Kubernetes kümesi) sorunsuz bir şekilde sunulabilir. Ancak InfraValidator bu farklılığı kontrol etmeyecektir.

Çalışma modu

Yapılandırmaya bağlı olarak altyapı doğrulaması aşağıdaki modlardan birinde yapılır:

  • LOAD_ONLY modu: modelin hizmet veren altyapıya başarıyla yüklenip yüklenmediğinin kontrol edilmesi. VEYA
  • LOAD_AND_QUERY modu: LOAD_ONLY modu artı modelin çıkarımlar sunup sunamayacağını kontrol etmek için bazı örnek istekler gönderme. InfraValidator tahminin doğru olup olmadığını umursamaz. Yalnızca isteğin başarılı olup olmadığı önemlidir.

Nasıl kullanırım?

Genellikle InfraValidator, bir Evaluator bileşeninin yanında tanımlanır ve çıktısı bir İticiye beslenir. InfraValidator başarısız olursa model gönderilmez.

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 bileşenini yapılandırma.

InfraValidator'ı yapılandırmak için üç tür protokol vardır.

ServingSpec

ServingSpec , InfraValidator için en önemli konfigürasyondur. Şunları tanımlar:

  • ne tür bir model sunucunun çalıştırılacağı
  • nerede çalıştırılacağı

Model sunucu türleri için (sunum ikilisi adı verilir) destekliyoruz

Şu anda aşağıdaki sunum platformları desteklenmektedir:

  • Yerel Docker (Docker önceden kurulmalıdır)
  • Kubernetes (yalnızca KubeflowDagRunner için sınırlı destek)

Sunucu ikilisi ve hizmet platformu seçimi, ServingSpec oneof bloğu belirtilerek yapılır. Örneğin Kubernetes kümesinde çalışan TensorFlow Serving ikili programını kullanmak için tensorflow_serving ve kubernetes alanının ayarlanması gerekir.

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

ServingSpec daha ayrıntılı yapılandırmak için lütfen protobuf tanımına bakın.

ValidationSpec

Altyapı doğrulama kriterlerini veya iş akışını ayarlamak için isteğe bağlı yapılandırma.

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

Tüm ValidationSpec alanlarının sağlam bir varsayılan değeri vardır. Protobuf tanımından daha fazla ayrıntıya bakın.

RequestSpec

LOAD_AND_QUERY modunda alt doğrulamayı çalıştırırken örnek isteklerin nasıl oluşturulacağını belirtmek için isteğe bağlı yapılandırma. LOAD_AND_QUERY modunu kullanmak için, bileşen tanımında hem request_spec yürütme özelliklerinin hem de examples giriş kanalının belirtilmesi gerekir.

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

Isınma ile SavedModel üretme

(0.30.0 versiyonundan)

InfraValidator, modeli gerçek isteklerle doğruladığından, bu doğrulama isteklerini SavedModel'in ısınma istekleri olarak kolayca yeniden kullanabilir. InfraValidator, bir SavedModel'i ısınma ile dışa aktarmak için bir seçenek ( RequestSpec.make_warmup ) sağlar.

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

Daha sonra çıktı InfraBlessing yapıtı ısınma özelliğine sahip bir SavedModel içerecektir ve aynı zamanda Model yapıtı gibi Pusher tarafından da itilebilir.

Sınırlamalar

Mevcut InfraValidator henüz tamamlanmadı ve bazı sınırlamaları var.

  • Yalnızca TensorFlow SavedModel model formatı doğrulanabilir.
  • TFX'i Kubernetes'te çalıştırırken işlem hattının Kubeflow Pipelines içindeki KubeflowDagRunner tarafından yürütülmesi gerekir. Model sunucusu aynı Kubernetes kümesinde ve Kubeflow'un kullandığı ad alanında başlatılacak.
  • InfraValidator öncelikle TensorFlow Serving'e yapılan dağıtımlara odaklanır ve yine de kullanışlı olmasına rağmen TensorFlow Lite ve TensorFlow.js'ye veya diğer çıkarım çerçevelerine yapılan dağıtımlar için daha az doğrudur.
  • Predict yöntemi imzası için LOAD_AND_QUERY modunda sınırlı bir destek vardır (TensorFlow 2'de dışa aktarılabilen tek yöntem budur). InfraValidator, serileştirilmiş bir tf.Example tek giriş olarak kullanmak için Predict imzasını gerektirir.

    @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'))
    })
    
    • Bu imzanın TFX'teki diğer bileşenlerle nasıl etkileşime girdiğini görmek için Penguin örnek örnek koduna göz atın.