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

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

เอกสารนี้แสดงตัวอย่างสำหรับจุดประสงค์ในการใช้งาน 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"
  }
}