class_docstr: TFX infra validator executor.
class_docstr_tok: ["TFX","infra","validator","executor","."]
code: def _ValidateWithRetry(
      self,
      model_path: str,
      serving_binary: serving_bins.ServingBinary,
      serving_spec: infra_validator_pb2.ServingSpec,
      validation_spec: infra_validator_pb2.ValidationSpec,
      requests: List[iv_types.Request],
  ):
      for i in range(validation_spec.num_tries):
          logging.info(
              "Starting infra validation (attempt %d/%d).",
              i + 1,
              validation_spec.num_tries,
          )
          try:
              self._ValidateOnce(
                  model_path=model_path,
                  serving_binary=serving_binary,
                  serving_spec=serving_spec,
                  validation_spec=validation_spec,
                  requests=requests,
              )
          except error_types.GracefulShutdown:
              # GracefulShutdown means infra validation aborted. No more retry and
              # escalate the error.
              raise
          except Exception as e:  # pylint: disable=broad-except
              # Other exceptions indicates validation failure. Log the error and
              # retry.
              logging.exception(
                  "Infra validation (attempt %d/%d) failed.",
                  i + 1,
                  validation_spec.num_tries,
              )
              if isinstance(e, error_types.DeadlineExceeded):
                  logging.info(
                      "Consider increasing the value of "
                      "ValidationSpec.max_loading_time_seconds."
                  )
          else:
              # If validation has passed without any exception, succeeded.
              return True
  
      # Every trial has failed. Marking model as not blessed.
      return False
  
imports: import contextlib
  import functools
  import os
  import signal
  import threading
  import time
  from typing import Any, Dict, List, Optional
  from absl import logging
  from tfx import types
  from tfx.components.infra_validator import error_types
  from tfx.components.infra_validator import request_builder
  from tfx.components.infra_validator import serving_bins
  from tfx.components.infra_validator import types
  from tfx.components.infra_validator.model_server_runners import kubernetes_runner
  from tfx.components.infra_validator.model_server_runners import local_docker_runner
  from tfx.dsl.components.base import base_executor
  from tfx.proto import infra_validator_pb2
  from tfx.types import artifact_utils
  from tfx.types import standard_component_specs
  from tfx.utils import io_utils
  from tfx.utils import path_utils
  from tfx.utils import proto_utils
  from tfx.utils.model_paths import tf_serving_flavor
  from tensorflow_serving.apis import classification_pb2
  from tensorflow_serving.apis import predict_pb2
  from tensorflow_serving.apis import prediction_log_pb2
  from tensorflow_serving.apis import regression_pb2
label_desc: Use image node_id 9 for calling the Executor obj's underlying member method code with example usage: obj._ValidateWithRetry(model_path, serving_binary, serving_spec, validation_spec, requests) and returns: False, True