ส่วนประกอบไปป์ไลน์ InfraValidator TFX

จัดทุกอย่างให้เป็นระเบียบอยู่เสมอด้วยคอลเล็กชัน บันทึกและจัดหมวดหมู่เนื้อหาตามค่ากำหนดของคุณ

InfraValidator เป็นส่วนประกอบ TFX ที่ใช้เป็นเลเยอร์การเตือนล่วงหน้าก่อนที่จะส่งแบบจำลองเข้าสู่ขั้นตอนการผลิต เครื่องมือตรวจสอบชื่อ "อินฟรา" มาจากข้อเท็จจริงที่ว่ามันกำลังตรวจสอบโมเดลในโมเดลจริงที่ให้บริการ "โครงสร้างพื้นฐาน" หาก ประเมิน คือการรับประกันประสิทธิภาพของรูปแบบที่ InfraValidator คือการรับประกันรูปแบบเป็นกลไกที่ดีและป้องกันไม่ให้รูปแบบที่เลวร้ายจากการถูกผลักดัน

มันทำงานอย่างไร?

InfraValidator รับโมเดล เปิดเซิร์ฟเวอร์โมเดลแซนด์บ็อกซ์พร้อมกับโมเดล และดูว่าสามารถโหลดได้สำเร็จหรือไม่ และสามารถเลือกสอบถามหรือไม่ก็ได้ ผลการตรวจสอบข้างล่างนี้จะถูกสร้างขึ้นใน blessing ผลลัพธ์ในลักษณะเดียวกับที่ ประเมิน ไม่

InfraValidator มุ่งเน้นไปที่การทำงานร่วมกันระหว่างไบนารีรุ่นเซิร์ฟเวอร์ (เช่น TensorFlow ให้บริการ ) และรูปแบบในการปรับใช้ แม้จะมีชื่อ "ข้างล่างนี้" ตรวจสอบก็เป็นความรับผิดชอบของผู้ใช้เพื่อกำหนดค่าสภาพแวดล้อมได้อย่างถูกต้องและตรวจสอบข้างล่างนี้เท่านั้นปฏิสัมพันธ์กับเซิร์ฟเวอร์แบบในสภาพแวดล้อมที่ผู้ใช้กำหนดค่าเพื่อดูว่ามันทำงานได้ดี การกำหนดค่าสภาพแวดล้อมนี้อย่างถูกต้องจะช่วยให้มั่นใจได้ว่าการตรวจสอบอินฟาเรดผ่านหรือล้มเหลวจะบ่งชี้ว่าโมเดลจะสามารถให้บริการในสภาพแวดล้อมการให้บริการที่ใช้งานจริงได้หรือไม่ นี่หมายถึงบางส่วนแต่ไม่จำกัดเพียงสิ่งต่อไปนี้:

  1. InfraValidator ใช้ไบนารีเซิร์ฟเวอร์รุ่นเดียวกับที่จะใช้ในการผลิต นี่คือระดับต่ำสุดที่สภาพแวดล้อมการตรวจสอบความถูกต้องของอินฟาเรดต้องมาบรรจบกัน
  2. InfraValidator ใช้ทรัพยากรเดียวกัน (เช่น ปริมาณการจัดสรรและประเภทของ CPU หน่วยความจำ และตัวเร่งความเร็ว) ตามที่จะใช้ในการผลิต
  3. InfraValidator ใช้การกำหนดค่าเซิร์ฟเวอร์รุ่นเดียวกับที่จะใช้ในการผลิต

ผู้ใช้สามารถเลือกระดับ InfraValidator ที่ควรจะเหมือนกันกับสภาพแวดล้อมการใช้งานจริงทั้งนี้ขึ้นอยู่กับสถานการณ์ ในทางเทคนิค โมเดลสามารถตรวจสอบความถูกต้องด้วยอินฟาเรดในสภาพแวดล้อม Docker ในพื้นที่และให้บริการในสภาพแวดล้อมที่ต่างไปจากเดิมอย่างสิ้นเชิง (เช่นคลัสเตอร์ Kubernetes) โดยไม่มีปัญหา อย่างไรก็ตาม InfraValidator จะไม่ตรวจสอบความแตกต่างนี้

โหมดการทำงาน

ขึ้นอยู่กับการกำหนดค่า การตรวจสอบ infra ทำได้ในโหมดใดโหมดหนึ่งต่อไปนี้:

  • 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 มันกำหนด:

  • สิ่งที่ประเภทของเซิร์ฟเวอร์รุ่นวิ่ง
  • สถานที่ที่จะใช้มัน

สำหรับประเภทเซิร์ฟเวอร์รุ่น (เรียกว่าไบนารีที่ให้บริการ) เราสนับสนุน

ปัจจุบันรองรับแพลตฟอร์มที่ให้บริการต่อไปนี้:

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

การสร้าง SavedModel ด้วย warmup

(จากเวอร์ชั่น 0.30.0)

ตั้งแต่ InfraValidator ตรวจสอบรูปแบบที่มีการร้องขอจริงก็สามารถนำมาใช้ในการตรวจสอบคำขอเหล่านี้เป็น คำขอวอร์ม ของ SavedModel InfraValidator ให้ตัวเลือก ( RequestSpec.make_warmup ) การส่งออก SavedModel กับวอร์ม

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

แล้วส่งออก InfraBlessing สิ่งประดิษฐ์จะมี SavedModel กับวอร์มและยังสามารถผลักดันโดย Pusher เช่นเดียวกับ Model สิ่งประดิษฐ์

ข้อจำกัด

InfraValidator ปัจจุบันยังไม่สมบูรณ์ และมีข้อจำกัดบางประการ

  • เพียง TensorFlow SavedModel รูปแบบรูปแบบที่สามารถตรวจสอบได้
  • เมื่อใช้ TFX บน Kubernetes ท่อควรจะดำเนินการโดย KubeflowDagRunner ภายใน Kubeflow วางท่อ เซิร์ฟเวอร์รุ่นจะเปิดตัวในคลัสเตอร์ Kubernetes เดียวกันและเนมสเปซที่ Kubeflow ใช้อยู่
  • InfraValidator จะเน้นหลักในการใช้งานเพื่อ TensorFlow การแสดง และในขณะที่ยังคงมีประโยชน์อย่างถูกต้องน้อยสำหรับการใช้งานในการ TensorFlow Lite และ TensorFlow.js หรือกรอบการอนุมานอื่น ๆ
  • มีการสนับสนุนที่ จำกัด ในการเป็น LOAD_AND_QUERY โหมดสำหรับ การทาย วิธีลายเซ็น (ซึ่งเป็นเพียงวิธีการส่งสินค้าออกใน 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'))
    })
    
    • ตรวจสอบออก เพนกวินตัวอย่าง โค้ดตัวอย่างเพื่อดูวิธีการนี้ปฏิสัมพันธ์ลายเซ็นกับส่วนประกอบอื่น ๆ ใน TFX