Компонент конвейера InfraValidator TFX

InfraValidator - это компонент TFX, который используется в качестве уровня раннего предупреждения перед запуском модели в производство. Название «инфра» валидатор произошло из-за того, что он проверяет модель в реальной модели, обслуживающей «инфраструктуру». Если оценщик должен гарантировать выполнение модели, InfraValidator является гарантирование модели механически хорошо и предотвращает плохие модели от толкаемых.

Как это работает?

InfraValidator берет модель, запускает сервер модели с песочницей и проверяет, можно ли ее успешно загрузить и, при необходимости, запросить. Результат проверки инфра будет генерироваться в blessing выходе таким же образом , как оценщик делает.

InfraValidator фокусируется на совместимости бинарной модели сервера (например TensorFlow сервировки ) и модель развертывания. Несмотря на название «ИК» валидатор, он несет ответственность пользователя , чтобы правильно настроить среду, и инфра валидатор только взаимодействует с моделью сервера , настроенного пользователем среды , чтобы увидеть , если он работает нормально. Правильная настройка этой среды гарантирует, что успешная или неуспешная проверка инфраструктуры укажет на то, будет ли модель работать в производственной среде обслуживания. Это подразумевает, но не ограничивается следующим:

  1. InfraValidator использует ту же модель бинарного сервера, что и в производственной среде. Это минимальный уровень, к которому должна приближаться среда проверки инфраструктуры.
  2. InfraValidator использует те же ресурсы (например, количество выделенных ресурсов и тип ЦП, памяти и ускорителей), которые будут использоваться в производственной среде.
  3. InfraValidator использует ту же конфигурацию модели сервера, что и в производственной среде.

В зависимости от ситуации пользователи могут выбрать, в какой степени InfraValidator должен быть идентичен производственной среде. Технически модель можно без проблем проверить в локальной среде Docker, а затем использовать в совершенно другой среде (например, в кластере Kubernetes). Однако InfraValidator не проверял это расхождение.

Режим работы

В зависимости от конфигурации инфракрасная проверка выполняется в одном из следующих режимов:

  • 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. Он определяет:

  • какой тип модели сервера , чтобы запустить
  • где запустить его

Для типовых типов серверов (называемых обслуживающим двоичным кодом) мы поддерживаем

В настоящее время поддерживаются следующие обслуживающие платформы:

  • Локальный 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.
    )
)

Создание сохраненной модели с разминкой

(Начиная с версии 0.30.0)

Поскольку InfraValidator Подтверждает модель с реальными запросами, она может легко использовать эти запросы проверки в качестве разминочных запросов одного 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 Lite и TensorFlow.js или другие структуры вывода.
  • Там же ограниченная поддержка на LOAD_AND_QUERY режиме для Predict сигнатуры методы (который является единственным экспортируемым методом 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'))
    })
    
    • Проверьте в Penguin пример пример кода , чтобы увидеть , как эта подпись взаимодействует с другими компонентами в TFX.