Bergabunglah dengan TensorFlow di Google I/O, 11-12 Mei Daftar sekarang

Komponen Pipa TFX InfraValidator

InfraValidator adalah komponen TFX yang digunakan sebagai lapisan peringatan dini sebelum mendorong model ke dalam produksi. Nama validator "infra" berasal dari fakta bahwa ia memvalidasi model dalam model aktual yang melayani "infrastruktur". Jika Evaluator adalah untuk menjamin kinerja model, InfraValidator adalah untuk menjamin model secara mekanik baik dan mencegah model buruk dari didorong.

Bagaimana cara kerjanya?

InfraValidator mengambil model, meluncurkan server model kotak pasir dengan model, dan melihat apakah itu dapat berhasil dimuat dan ditanyakan secara opsional. Hasil infra validasi akan dihasilkan dalam blessing output dalam cara yang sama seperti Evaluator tidak.

InfraValidator berfokus pada kompatibilitas antara biner server model (misalnya TensorFlow Melayani ) dan model untuk menyebarkan. Meskipun nama "infra" validator, itu adalah tanggung jawab pengguna untuk mengkonfigurasi lingkungan dengan benar, dan infra validator hanya berinteraksi dengan server model dalam lingkungan-dikonfigurasi pengguna untuk melihat apakah ia bekerja dengan baik. Mengonfigurasi lingkungan ini dengan benar akan memastikan bahwa validasi infra yang lolos atau gagal akan menjadi indikasi apakah model akan dapat ditayangkan di lingkungan penyajian produksi. Ini menyiratkan beberapa, tetapi tidak terbatas pada, berikut ini:

  1. InfraValidator menggunakan model server biner yang sama seperti yang akan digunakan dalam produksi. Ini adalah tingkat minimal di mana lingkungan validasi infra harus menyatu.
  2. InfraValidator menggunakan sumber daya yang sama (misalnya jumlah alokasi dan jenis CPU, memori, dan akselerator) seperti yang akan digunakan dalam produksi.
  3. InfraValidator menggunakan konfigurasi server model yang sama seperti yang akan digunakan dalam produksi.

Tergantung pada situasinya, pengguna dapat memilih sejauh mana InfraValidator harus identik dengan lingkungan produksi. Secara teknis, sebuah model dapat divalidasi infra di lingkungan Docker lokal dan kemudian disajikan di lingkungan yang sama sekali berbeda (misalnya cluster Kubernetes) tanpa masalah. Namun, InfraValidator tidak akan memeriksa perbedaan ini.

Mode operasi

Tergantung pada konfigurasi, validasi infra dilakukan dalam salah satu mode berikut:

  • LOAD_ONLY modus: memeriksa apakah model itu berhasil dimuat dalam infrastruktur melayani atau tidak. ATAU
  • LOAD_AND_QUERY modus: LOAD_ONLY modus ditambah mengirimkan beberapa permintaan sampel untuk memeriksa apakah model mampu melayani kesimpulan. InfraValidator tidak peduli prediksi itu benar atau tidak. Hanya apakah permintaan itu berhasil atau tidak yang penting.

Bagaimana cara menggunakannya?

Biasanya InfraValidator didefinisikan di sebelah komponen Evaluator, dan outputnya diumpankan ke Pusher. Jika InfraValidator gagal, model tidak akan didorong.

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

Mengonfigurasi komponen InfraValidator.

Ada tiga jenis proto untuk mengkonfigurasi InfraValidator.

ServingSpec

ServingSpec adalah konfigurasi penting yang paling untuk InfraValidator tersebut. Ini mendefinisikan:

  • apa jenis server model ke model run
  • di mana untuk menjalankannya

Untuk jenis server model (disebut biner penyajian) kami mendukung

Platform penyajian berikut saat ini didukung:

  • Docker Lokal (Docker harus diinstal terlebih dahulu)
  • Kubernetes (dukungan terbatas hanya untuk KubeflowDagRunner)

Pilihan untuk melayani biner dan melayani platform yang dibuat dengan menentukan oneof blok ServingSpec . Misalnya menggunakan TensorFlow Melayani biner berjalan pada cluster Kubernetes, tensorflow_serving dan kubernetes lapangan harus ditetapkan.

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

Untuk mengkonfigurasi lanjut ServingSpec , silahkan periksa definisi protobuf .

ValidationSpec

Konfigurasi opsional untuk menyesuaikan kriteria atau alur kerja validasi infra.

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

Semua bidang ValidationSpec memiliki nilai default suara. Periksa lebih rinci dari definisi protobuf .

RequestSpec

Konfigurasi opsional untuk menentukan bagaimana membangun permintaan sampel saat menjalankan infra validasi di LOAD_AND_QUERY modus. Untuk menggunakan LOAD_AND_QUERY modus, diperlukan untuk menentukan baik request_spec sifat eksekusi serta examples saluran masukan dalam definisi komponen.

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

Memproduksi Model Tersimpan dengan pemanasan

(Dari versi 0.30.0)

Karena model InfraValidator memvalidasi dengan permintaan nyata, dapat dengan mudah menggunakan kembali permintaan validasi ini sebagai permintaan pemanasan dari SavedModel. InfraValidator memberikan pilihan ( RequestSpec.make_warmup ) untuk mengekspor SavedModel dengan pemanasan.

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

Maka output InfraBlessing artefak akan berisi SavedModel dengan pemanasan, dan juga dapat didorong oleh Pusher , seperti Model artefak.

Keterbatasan

InfraValidator saat ini belum lengkap, dan memiliki beberapa keterbatasan.

  • Hanya TensorFlow SavedModel Format model dapat divalidasi.
  • Saat menjalankan TFX pada Kubernetes, pipa harus dieksekusi oleh KubeflowDagRunner dalam Kubeflow Pipa. Server model akan diluncurkan di cluster Kubernetes yang sama dan namespace yang digunakan Kubeflow.
  • InfraValidator terutama difokuskan pada penyebaran ke TensorFlow Melayani , dan sementara masih berguna itu kurang akurat untuk penyebaran ke TensorFlow Lite dan TensorFlow.js , atau kerangka kerja inferensi lainnya.
  • Ada dukungan terbatas pada LOAD_AND_QUERY modus untuk Memprediksi metode tanda tangan (yang merupakan satu-satunya metode ekspor di TensorFlow 2). InfraValidator membutuhkan Memprediksi tanda tangan untuk mengkonsumsi serial tf.Example sebagai satu-satunya masukan.

    @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'))
    })
    
    • Memeriksa sebuah contoh Penguin kode contoh untuk melihat bagaimana tanda tangan ini berinteraksi dengan komponen lain dalam TFX.