SignatureDefs ใน SavedModel สำหรับ TensorFlow Serving

วัตถุประสงค์

เอกสารนี้ให้ตัวอย่างสำหรับการใช้งานตามวัตถุประสงค์ของ SignatureDefs ใน SavedModel ที่แมปกับ API ของ TensorFlow Serving

ภาพรวม

SignatureDef กำหนดลายเซ็นของการคำนวณที่รองรับในกราฟ TensorFlow SignatureDefs มุ่งหวังที่จะให้การสนับสนุนทั่วไปเพื่อระบุอินพุตและเอาต์พุตของฟังก์ชัน และสามารถระบุได้เมื่อสร้าง SavedModel

พื้นหลัง

TF-Exporter และ SessionBundle ใช้ ลายเซ็น ซึ่งมีแนวคิดคล้ายกัน แต่ต้องการให้ผู้ใช้แยกความแตกต่างระหว่างลายเซ็นที่มีชื่อและลายเซ็นเริ่มต้นเพื่อให้สามารถดึงข้อมูลได้อย่างถูกต้องเมื่อโหลด สำหรับผู้ที่เคยใช้ TF-Exporter/SessionBundle มาก่อน ลาย Signatures ใน TF-Exporter จะถูกแทนที่ด้วย SignatureDefs ใน SavedModel

โครงสร้าง SignatureDef

SignatureDef ต้องการข้อกำหนดของ:

  • inputs เป็นแผนผังของสตริงไปยัง TensorInfo
  • outputs เป็นแมปของสตริงไปยัง TensorInfo
  • method_name (ซึ่งสอดคล้องกับชื่อวิธีการที่รองรับในเครื่องมือ/ระบบการโหลด)

โปรดทราบว่า TensorInfo เองต้องมีข้อกำหนดเฉพาะของชื่อ dtype และรูปร่างของเทนเซอร์ แม้ว่าข้อมูลเทนเซอร์จะมีอยู่ในกราฟอยู่แล้วก็ตาม การกำหนด TensorInfo ไว้อย่างชัดเจนให้เป็นส่วนหนึ่งของ SignatureDef ก็มีประโยชน์ เนื่องจากเครื่องมือจะทำการตรวจสอบความถูกต้องของลายเซ็นได้ ฯลฯ โดยไม่ต้องอ่านคำจำกัดความของกราฟ

เพื่อความสะดวกในการใช้ซ้ำและแบ่งปันระหว่างเครื่องมือและระบบต่างๆ ค่าคงที่ที่ใช้กันทั่วไปที่เกี่ยวข้องกับ SignatureDefs ที่จะได้รับการสนับสนุนใน TensorFlow Serving จึงถูกกำหนดให้เป็นค่าคงที่ โดยเฉพาะ:

นอกจากนี้ SavedModel ยังมี ยูทิลิตี้ เพื่อช่วยสร้าง Signature-def

โครงสร้างตัวอย่าง

TensorFlow Serving มี API ระดับสูงสำหรับการอนุมาน หากต้องการเปิดใช้งาน API เหล่านี้ โมเดลต้องมี SignatureDef อย่างน้อย 1 รายการที่กำหนดโหนด TensorFlow ที่แน่นอนเพื่อใช้สำหรับอินพุตและเอาต์พุต ดูตัวอย่าง SignatureDefs เฉพาะที่ TensorFlow Serving รองรับแต่ละ API ด้านล่าง

โปรดทราบว่าการให้บริการ TensorFlow ขึ้นอยู่กับคีย์ของ TensorInfo แต่ละรายการ (ในอินพุตและเอาต์พุตของ SignatureDef) รวมถึง method_name ของ SignatureDef เนื้อหาที่แท้จริงของ TensorInfo นั้นเฉพาะเจาะจงกับกราฟของคุณ

ลายเซ็นการจำแนกประเภทDef

Classification SignatureDefs รองรับการเรียกที่มีโครงสร้างไปยัง Classification API ของ TensorFlow Serving สิ่งเหล่านี้กำหนดให้ต้องมีเทนเซอร์ inputs และมีเทนเซอร์เอาท์พุตทางเลือกสองตัว: 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 มี images Tensor อินพุตแบบลอจิคัลตัวเดียวที่แมปกับ Tensor จริงในกราฟของคุณ x:0

คาดการณ์ SignatureDefs ช่วยให้สามารถพกพาข้ามรุ่นได้ ซึ่งหมายความว่าคุณสามารถสลับใน SavedModels ที่แตกต่างกันได้ อาจมีชื่อ Tensor พื้นฐานที่แตกต่างกัน (เช่น แทนที่จะเป็น 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 หนึ่งรายการอย่างแน่นอน และเทนเซอร์ 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"
  }
}