עזרה להגן על שונית המחסום הגדולה עם TensorFlow על Kaggle הצטרפו אתגר

SignatureDefs ב- SavedModel להגשת TensorFlow

מַטָרָה

מסמך זה מספק דוגמאות לשימוש המיועד ב-SignatureDefs ב-SavedModel הממפה את ממשקי ה-API של TensorFlow Serving.

סקירה כללית

SignatureDef מגדיר את החתימה של חישוב נתמך גרף TensorFlow. SignatureDefs שואף לספק תמיכה גנרית לזהות תשומות ותפוקות של פונקציה והוא יכול להיות מוגדר בעת בניית SavedModel .

רקע כללי

TF-יצואן לבין SessionBundle בשימוש חתימות דומות מושג אך משתמשים נדרשים להבחין בין בשם וחתימות מחדל, כדי שתוכל להישלף כראוי בעת עומס. לאלו שהשתמשו בעבר TF-יצואן / SessionBundle, Signatures ב TF-יצואן יוחלף SignatureDefs ב SavedModel.

SignatureDef Structure

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 הוא ספציפי לגרף שלך.

סיווג SignatureDef

Classification SignatureDefs תומכת בקריאות מובנות לממשק API לסיווג של TensorFlow Serving. קובע אלו שחייבות להיות inputs מותחות, וכי ישנם שני tensors פלט אופציונלי: 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 ממופות לטנזור בפועל הגרף שלך x:0 .

Predict SignatureDefs מאפשרים ניידות בין דגמים. אמצעי זה כי אתה יכול להחליף ב SavedModels השונה, ואולי עם שמות מותח בסיסי שונים (למשל, במקום x:0 אולי יש לך מודל חלופי חדש עם מותח z:0 ), בעוד הלקוחות שלך יכולים להישאר באינטרנט שאילתות הישנים ברציפות חדשה גרסאות של דגם זה ללא שינויים בצד הלקוח.

Predict SignatureDefs גם מאפשרים לך להוסיף Tensors אופציונליים נוספים לפלטים, שתוכל לבצע שאילתה מפורשת. נניח כי בנוסף למפתח הפלט מתחת של scores , גם אתה רוצה להביא שכבת איגום לאיתור באגים או למטרות אחרות. במקרה כזה, אתה פשוט להוסיף מותח נוסף עם מפתח כמו 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"
  }
}