วัตถุประสงค์
เอกสารนี้แสดงตัวอย่างสำหรับจุดประสงค์ในการใช้งาน SignatureDefs ใน SavedModel ที่แมปกับ API ของ TensorFlow Serving
ภาพรวม
SignatureDef กำหนดลายเซ็นของการคำนวณที่ได้รับการสนับสนุนในกราฟ TensorFlow SignatureDefs มุ่งมั่นที่จะให้การสนับสนุนทั่วไปเพื่อระบุปัจจัยการผลิตและผลของการทำงานและสามารถระบุได้เมื่อมีการสร้าง SavedModel
พื้นหลัง
TF-ส่งออก และ SessionBundle ใช้ ลายเซ็น ที่มีความคล้ายกันในแนวคิด แต่ผู้ใช้ที่จำเป็นในการแยกแยะความแตกต่างระหว่างการตั้งชื่อและลายเซ็นเริ่มต้นเพื่อให้พวกเขาที่จะดึงอย่างถูกต้องเมื่อโหลด สำหรับผู้ที่ใช้ก่อนหน้านี้ TF-ส่งออก / SessionBundle, Signatures
ใน TF-ส่งออกจะถูกแทนที่ด้วย SignatureDefs
ใน SavedModel
โครงสร้าง SignatureDef
SignatureDef ต้องการข้อกำหนดของ:
-
inputs
แผนที่ของสตริงเพื่อ TensorInfo -
outputs
เป็นแผนที่ของสตริงเพื่อ TensorInfo -
method_name
(ซึ่งสอดคล้องกับชื่อของวิธีการที่ได้รับการสนับสนุนในเครื่องมือการโหลด / ระบบ)
โปรดทราบว่า TensorInfo ตัวเองต้องมีคุณสมบัติของชื่อ dtype และรูปร่างเมตริกซ์ ในขณะที่ข้อมูลเทนเซอร์มีอยู่แล้วในกราฟ การกำหนดให้ TensorInfo กำหนดเป็นส่วนหนึ่งของ SignatureDef นั้นเป็นประโยชน์อย่างยิ่ง เนื่องจากเครื่องมือต่างๆ จะสามารถดำเนินการตรวจสอบลายเซ็นได้ ฯลฯ โดยไม่ต้องอ่านคำจำกัดความของกราฟ
ค่าคงที่และค่าที่เกี่ยวข้อง
เพื่อความสะดวกในการนำกลับมาใช้ใหม่และแบ่งปันระหว่างเครื่องมือและระบบ ค่าคงที่ที่ใช้กันทั่วไปที่เกี่ยวข้องกับ SignatureDefs ที่จะได้รับการสนับสนุนใน TensorFlow Serving จะถูกกำหนดเป็นค่าคงที่ โดยเฉพาะ:
นอกจากนี้ยังมี SavedModel util ที่จะช่วยสร้างลายเซ็น def
โครงสร้างตัวอย่าง
TensorFlow Serving จัดเตรียม API ระดับสูงสำหรับการอนุมาน ในการเปิดใช้งาน API เหล่านี้ โมเดลต้องมี SignatureDefs ตั้งแต่หนึ่งตัวขึ้นไปที่กำหนดโหนด TensorFlow ที่แน่นอนเพื่อใช้สำหรับอินพุตและเอาต์พุต ดูตัวอย่างด้านล่างของ SignatureDefs ที่ TensorFlow Serving รองรับสำหรับแต่ละ API
โปรดทราบว่าการให้บริการ TensorFlow ขึ้นอยู่กับคีย์ของแต่ละ TensorInfo (ในอินพุตและเอาต์พุตของ SignatureDef) รวมถึง method_name ของ SignatureDef เนื้อหาจริงของ TensorInfo นั้นเจาะจงสำหรับกราฟของคุณ
ลายเซ็นการจำแนกประเภทDef
Classification SignatureDefs รองรับการเรียกแบบมีโครงสร้างไปยัง Classification API ของ TensorFlow Serving ยามาเหล่านี้ที่จะต้องมี inputs
Tensor และว่ามีสองตัวเลือกเอาท์พุทเทนเซอร์: classes
และ scores
อย่างน้อยหนึ่งซึ่งจะต้องนำเสนอ
signature_def: {
key : "my_classification_signature"
value: {
inputs: {
key : "inputs"
value: {
name: "tf_example:0"
dtype: DT_STRING
tensor_shape: ...
}
}
outputs: {
key : "classes"
value: {
name: "index_to_string:0"
dtype: DT_STRING
tensor_shape: ...
}
}
outputs: {
key : "scores"
value: {
name: "TopKV2:0"
dtype: DT_FLOAT
tensor_shape: ...
}
}
method_name: "tensorflow/serving/classify"
}
}
ทำนายลายเซ็นDef
Predict SignatureDefs รองรับการเรียก Predict API ของ TensorFlow Serving ลายเซ็นเหล่านี้ช่วยให้คุณรองรับเทนเซอร์อินพุตและเอาต์พุตจำนวนมากตามอำเภอใจได้อย่างยืดหยุ่น สำหรับตัวอย่างด้านล่างลายเซ็น my_prediction_signature
มีอินพุตตรรกะ Tensor เดียว images
ที่ถูกแมปที่จะเกิดขึ้นจริง Tensor ในกราฟของคุณ x:0
0
ทำนาย SignatureDefs เปิดใช้งานการพกพาข้ามรุ่น ซึ่งหมายความว่าคุณสามารถสลับใน SavedModels ที่แตกต่างกันอาจมีชื่อพื้นฐานเทนเซอร์ที่แตกต่างกัน (เช่นแทนที่จะ x:0
บางทีคุณอาจมีรูปแบบทางเลือกใหม่ที่มี Tensor z:0
) ในขณะที่ลูกค้าของคุณสามารถพักออนไลน์อย่างต่อเนื่องสอบถามเก่าและใหม่ เวอร์ชันของโมเดลนี้โดยไม่มีการเปลี่ยนแปลงฝั่งไคลเอ็นต์
Predict SignatureDefs ยังอนุญาตให้คุณเพิ่ม Tensors เพิ่มเติมที่เป็นตัวเลือกให้กับเอาต์พุต ซึ่งคุณสามารถสืบค้นได้อย่างชัดเจน พูดเถอะว่านอกเหนือไปจากการส่งออกที่สำคัญที่อยู่ด้านล่างของ scores
คุณยังต้องการที่จะดึงข้อมูลชั้นร่วมกันสำหรับการแก้จุดบกพร่องหรือเพื่อวัตถุประสงค์อื่น ๆ ในกรณีที่คุณก็จะเพิ่ม Tensor เพิ่มเติมด้วยคีย์เช่น pool
และมูลค่าที่เหมาะสม
signature_def: {
key : "my_prediction_signature"
value: {
inputs: {
key : "images"
value: {
name: "x:0"
dtype: ...
tensor_shape: ...
}
}
outputs: {
key : "scores"
value: {
name: "y:0"
dtype: ...
tensor_shape: ...
}
}
method_name: "tensorflow/serving/predict"
}
}
ลายเซ็นถดถอยDef
Regression SignatureDefs รองรับการเรียกที่มีโครงสร้างไปยัง Regression API ของ TensorFlow Serving ยามาเหล่านี้ว่าจะต้องมีอีกหนึ่ง inputs
Tensor และหนึ่ง outputs
เทนเซอร์
signature_def: {
key : "my_regression_signature"
value: {
inputs: {
key : "inputs"
value: {
name: "x_input_examples_tensor_0"
dtype: ...
tensor_shape: ...
}
}
outputs: {
key : "outputs"
value: {
name: "y_outputs_0"
dtype: DT_FLOAT
tensor_shape: ...
}
}
method_name: "tensorflow/serving/regress"
}
}