Thành phần đường ống InfraValidator TFX

Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.

InfraValidator là một thành phần TFX được sử dụng làm lớp cảnh báo sớm trước khi đưa mô hình vào sản xuất. Tên xác thực "cơ sở hạ tầng" xuất phát từ thực tế là nó đang xác thực mô hình trong mô hình thực tế phục vụ "cơ sở hạ tầng". Nếu Evaluator là để đảm bảo việc thực hiện các mô hình, InfraValidator là để đảm bảo mô hình này là một cách máy móc tốt và ngăn ngừa mô hình xấu từ bị đẩy.

Làm thế nào nó hoạt động?

InfraValidator lấy mô hình, khởi chạy máy chủ mô hình hộp cát với mô hình và xem liệu nó có thể được tải thành công hay không và được truy vấn tùy chọn. Kết quả xác nhận sở hạ tầng sẽ được tạo ra trong blessing đầu ra trong cùng một cách như Evaluator làm.

InfraValidator tập trung vào khả năng tương thích giữa hệ nhị phân mô hình máy chủ (ví dụ TensorFlow Phục vụ ) và mô hình để triển khai. Mặc dù cái tên "sở hạ tầng" validator, đó là trách nhiệm của người sử dụng để cấu hình môi trường một cách chính xác, và infra validator chỉ tương tác với máy chủ mô hình trong môi trường sử dụng cấu hình để xem nếu nó hoạt động tốt. Việc định cấu hình môi trường này một cách chính xác sẽ đảm bảo rằng việc vượt qua hoặc thất bại của quá trình xác thực cơ sở hạ tầng sẽ là dấu hiệu cho biết liệu mô hình có thể phục vụ được trong môi trường phục vụ sản xuất hay không. Điều này ngụ ý một số, nhưng không giới hạn, những điều sau:

  1. InfraValidator đang sử dụng cùng một mô hình máy chủ nhị phân sẽ được sử dụng trong sản xuất. Đây là mức tối thiểu mà môi trường xác thực hạ tầng phải hội tụ.
  2. InfraValidator đang sử dụng cùng một tài nguyên (ví dụ như số lượng phân bổ và loại CPU, bộ nhớ và bộ tăng tốc) như sẽ được sử dụng trong quá trình sản xuất.
  3. InfraValidator đang sử dụng cùng một cấu hình máy chủ mô hình sẽ được sử dụng trong sản xuất.

Tùy thuộc vào tình huống, người dùng có thể chọn InfraValidator nên giống với môi trường sản xuất ở mức độ nào. Về mặt kỹ thuật, một mô hình có thể được xác thực ở cơ sở hạ tầng trong môi trường Docker cục bộ và sau đó được phân phát trong một môi trường hoàn toàn khác (ví dụ: cụm Kubernetes) mà không có vấn đề gì. Tuy nhiên, InfraValidator sẽ không kiểm tra sự phân kỳ này.

Chế độ hoạt động

Tùy thuộc vào cấu hình, xác thực hạ tầng được thực hiện ở một trong các chế độ sau:

  • LOAD_ONLY chế độ: kiểm tra xem mô hình đã được nạp thành công trong cơ sở hạ tầng phục vụ hay không. HOẶC LÀ
  • LOAD_AND_QUERY chế độ: LOAD_ONLY chế độ cộng gửi một số yêu cầu mẫu để kiểm tra xem mô hình có khả năng phục vụ suy luận. InfraValidator không quan tâm đến dự đoán có đúng hay không. Chỉ yêu cầu có thành công hay không mới là vấn đề quan trọng.

Làm thế nào để tôi sử dụng nó?

Thường thì InfraValidator được định nghĩa bên cạnh thành phần Evaluator và đầu ra của nó được đưa đến một Pusher. Nếu InfraValidator không thành công, mô hình sẽ không được đẩy.

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

Định cấu hình thành phần InfraValidator.

Có ba loại giao thức để cấu hình InfraValidator.

ServingSpec

ServingSpec là cấu hình quan trọng nhất đối với InfraValidator. Nó định nghĩa:

  • loại máy chủ mô hình để chạy
  • nơi để chạy nó

Đối với các loại máy chủ mô hình (được gọi là phân phối nhị phân), chúng tôi hỗ trợ

Các nền tảng phục vụ sau hiện được hỗ trợ:

  • Docker cục bộ (Docker nên được cài đặt trước)
  • Kubernetes (chỉ hỗ trợ giới hạn cho KubeflowDagRunner)

Sự lựa chọn để phục vụ nhị phân và phục vụ nền tảng được thực hiện bằng cách xác định một oneof khối của ServingSpec . Ví dụ sử dụng TensorFlow Phục vụ nhị phân chạy trên cụm Kubernetes, tensorflow_servingkubernetes lĩnh vực cần được thiết lập.

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

Để cấu hình thêm ServingSpec , xin vui lòng kiểm tra định nghĩa protobuf .

ValidationSpec

Cấu hình tùy chọn để điều chỉnh các tiêu chí xác nhận cơ sở hạ tầng hoặc quy trình làm việc.

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ất cả các trường ValidationSpec đều có giá trị mặc định âm thanh. Kiểm tra chi tiết hơn từ các định nghĩa protobuf .

RequestSpec

Cấu hình tùy chọn để xác định làm thế nào để xây dựng các yêu cầu mẫu khi chạy xác nhận sở hạ tầng trong LOAD_AND_QUERY chế độ. Để sử dụng LOAD_AND_QUERY chế độ, nó là cần thiết để xác định cả hai request_spec tính thực hiện cũng như examples kênh đầu vào trong định nghĩa thành phần.

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

Sản xuất Mô hình đã lưu với khởi động

(Từ phiên bản 0.30.0)

Kể từ InfraValidator xác nhận mô hình với yêu cầu thực tế, nó có thể dễ dàng tái sử dụng những yêu cầu xác nhận như yêu cầu hâm lại của một SavedModel. InfraValidator cung cấp một tùy chọn ( RequestSpec.make_warmup ) để xuất khẩu một SavedModel với hâm lại.

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

Sau đó, sản lượng InfraBlessing vật sẽ chứa một SavedModel với hâm lại, và cũng có thể được đẩy bởi các Pusher , giống như Model vật.

Hạn chế

InfraValidator hiện tại vẫn chưa hoàn chỉnh và có một số hạn chế.

  • Chỉ TensorFlow SavedModel định dạng mô hình có thể được xác nhận.
  • Khi chạy TFX trên Kubernetes, các đường ống dẫn nên được thực hiện bởi KubeflowDagRunner bên Kubeflow Đường ống. Máy chủ mô hình sẽ được khởi chạy trong cùng một cụm Kubernetes và không gian tên mà Kubeflow đang sử dụng.
  • InfraValidator chủ yếu tập trung vào việc triển khai để TensorFlow Phục vụ , và trong khi vẫn hữu ích đó là kém chính xác cho các triển khai để TensorFlow LiteTensorFlow.js , hoặc các khuôn khổ suy luận khác.
  • Có một sự ủng hộ hạn chế về LOAD_AND_QUERY chế độ cho Dự đoán phương pháp chữ ký (đó là phương pháp duy nhất có thể xuất khẩu trong TensorFlow 2). InfraValidator đòi hỏi chữ ký Dự đoán tiêu thụ một serialized tf.Example như đầu vào duy nhất.

    @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'))
    })
    
    • Kiểm tra một Penguin dụ mẫu mã để xem cách chữ ký này tương tác với các thành phần khác trong TFX.