InfraValidator เป็นส่วนประกอบ TFX ที่ใช้เป็นเลเยอร์การเตือนล่วงหน้าก่อนที่จะส่งแบบจำลองเข้าสู่ขั้นตอนการผลิต เครื่องมือตรวจสอบชื่อ "อินฟรา" มาจากข้อเท็จจริงที่ว่ามันกำลังตรวจสอบโมเดลในโมเดลจริงที่ให้บริการ "โครงสร้างพื้นฐาน" หาก ประเมิน คือการรับประกันประสิทธิภาพของรูปแบบที่ InfraValidator คือการรับประกันรูปแบบเป็นกลไกที่ดีและป้องกันไม่ให้รูปแบบที่เลวร้ายจากการถูกผลักดัน
มันทำงานอย่างไร?
InfraValidator รับโมเดล เปิดเซิร์ฟเวอร์โมเดลแซนด์บ็อกซ์พร้อมกับโมเดล และดูว่าสามารถโหลดได้สำเร็จหรือไม่ และสามารถเลือกสอบถามหรือไม่ก็ได้ ผลการตรวจสอบข้างล่างนี้จะถูกสร้างขึ้นใน blessing
ผลลัพธ์ในลักษณะเดียวกับที่ ประเมิน ไม่
InfraValidator มุ่งเน้นไปที่การทำงานร่วมกันระหว่างไบนารีรุ่นเซิร์ฟเวอร์ (เช่น TensorFlow ให้บริการ ) และรูปแบบในการปรับใช้ แม้จะมีชื่อ "ข้างล่างนี้" ตรวจสอบก็เป็นความรับผิดชอบของผู้ใช้เพื่อกำหนดค่าสภาพแวดล้อมได้อย่างถูกต้องและตรวจสอบข้างล่างนี้เท่านั้นปฏิสัมพันธ์กับเซิร์ฟเวอร์แบบในสภาพแวดล้อมที่ผู้ใช้กำหนดค่าเพื่อดูว่ามันทำงานได้ดี การกำหนดค่าสภาพแวดล้อมนี้อย่างถูกต้องจะช่วยให้มั่นใจได้ว่าการตรวจสอบอินฟาเรดผ่านหรือล้มเหลวจะบ่งชี้ว่าโมเดลจะสามารถให้บริการในสภาพแวดล้อมการให้บริการที่ใช้งานจริงได้หรือไม่ นี่หมายถึงบางส่วนแต่ไม่จำกัดเพียงสิ่งต่อไปนี้:
- InfraValidator ใช้ไบนารีเซิร์ฟเวอร์รุ่นเดียวกับที่จะใช้ในการผลิต นี่คือระดับต่ำสุดที่สภาพแวดล้อมการตรวจสอบความถูกต้องของอินฟาเรดต้องมาบรรจบกัน
- InfraValidator ใช้ทรัพยากรเดียวกัน (เช่น ปริมาณการจัดสรรและประเภทของ CPU หน่วยความจำ และตัวเร่งความเร็ว) ตามที่จะใช้ในการผลิต
- 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