מַטָרָה
מסמך זה מספק דוגמאות לשימוש המיועד ב-SignatureDefs ב-SavedModel הממפה את ממשקי ה-API של TensorFlow Serving.
סקירה כללית
SignatureDef מגדיר את החתימה של חישוב הנתמך בגרף TensorFlow. SignatureDefs שואף לספק תמיכה גנרית לזיהוי כניסות ופלטים של פונקציה וניתן לציין אותם בעת בניית SavedModel .
רֶקַע
TF-Exporter ו- SessionBundle השתמשו בחתימות הדומות בקונספציה אך דרשו מהמשתמשים להבחין בין חתימות בעלות שם לבין חתימות ברירת מחדל על מנת שיאוחזרו בצורה נכונה בעת טעינה. למי שהשתמש בעבר ב-TF-Exporter/SessionBundle, Signatures
ב-TF-Exporter יוחלפו ב- SignatureDefs
ב-SavedModel.
SignatureDef Structure
SignatureDef דורש מפרט של:
-
inputs
כמפה של מחרוזת ל-TensorInfo. -
outputs
כמפה של מחרוזת ל- TensorInfo. -
method_name
(המתאים לשם שיטה נתמך בכלי/מערכת הטעינה).
שימו לב ש- TensorInfo עצמו דורש מפרט של שם, dtype וצורת טנסור. בעוד שמידע טנסור כבר קיים בגרף, כדאי להגדיר במפורש את TensorInfo כחלק מה-SignatureDef, מכיוון שכלים יכולים לבצע אימות חתימה וכו' מבלי לקרוא את הגדרת הגרף.
קבועים ושימושים קשורים
כדי להקל על השימוש החוזר והשיתוף בין כלים ומערכות, קבועים נפוצים הקשורים ל-SignatureDefs שייתמכו ב- TensorFlow Serving מוגדרים כקבועים. ספציפית:
בנוסף, SavedModel מספק עזר שיעזור לבנות הגדרת חתימה.
מבנים לדוגמה
TensorFlow Serving מספק ממשקי API ברמה גבוהה לביצוע מסקנות. כדי לאפשר ממשקי API אלה, המודלים חייבים לכלול SignatureDefs אחד או יותר המגדירים את צמתי TensorFlow המדויקים לשימוש עבור קלט ופלט. ראה להלן דוגמאות של SignatureDefs הספציפיים שבהם תומך TensorFlow Serving עבור כל API.
שימו לב שהשרת TensorFlow תלויה במפתחות של כל TensorInfo (בכניסות וביציאות של ה-SignatureDef), כמו גם בשם method_name של ה-SignatureDef. התוכן בפועל של TensorInfo הוא ספציפי לגרף שלך.
סיווג SignatureDef
Classification SignatureDefs תומכת בקריאות מובנות לממשק 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"
}
}
חיזוי SignatureDef
Predict SignatureDefs תמיכה בקריאות ל-Predict API של TensorFlow Serving. חתימות אלו מאפשרות לך לתמוך בצורה גמישה שרירותית בטנסורי קלט ופלט רבים. עבור הדוגמה שלהלן, החתימה my_prediction_signature
כוללת קלט לוגי יחיד של images
Tensor הממופות לטנסור בפועל בתרשים x:0
שלך.
Predict SignatureDefs מאפשרים ניידות בין דגמים. משמעות הדבר היא שאתה יכול להחליף מודלים שמורים שונים, אולי עם שמות טנסור שונים (לדוגמה, במקום 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"
}
}