InfraValidator - это компонент TFX, который используется в качестве уровня раннего предупреждения перед запуском модели в производство. Название «инфра» валидатор произошло из-за того, что он проверяет модель в реальной модели, обслуживающей «инфраструктуру». Если оценщик должен гарантировать выполнение модели, InfraValidator является гарантирование модели механически хорошо и предотвращает плохие модели от толкаемых.
Как это работает?
InfraValidator берет модель, запускает сервер модели с песочницей и проверяет, можно ли ее успешно загрузить и, при необходимости, запросить. Результат проверки инфра будет генерироваться в blessing
выходе таким же образом , как оценщик делает.
InfraValidator фокусируется на совместимости бинарной модели сервера (например TensorFlow сервировки ) и модель развертывания. Несмотря на название «ИК» валидатор, он несет ответственность пользователя , чтобы правильно настроить среду, и инфра валидатор только взаимодействует с моделью сервера , настроенного пользователем среды , чтобы увидеть , если он работает нормально. Правильная настройка этой среды гарантирует, что успешная или неуспешная проверка инфраструктуры укажет на то, будет ли модель работать в производственной среде обслуживания. Это подразумевает, но не ограничивается следующим:
- InfraValidator использует ту же модель бинарного сервера, что и в производственной среде. Это минимальный уровень, к которому должна приближаться среда проверки инфраструктуры.
- InfraValidator использует те же ресурсы (например, количество выделенных ресурсов и тип ЦП, памяти и ускорителей), которые будут использоваться в производственной среде.
- 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.