SavedModel Warmup

מבוא

לזמן הריצה של TensorFlow יש רכיבים שמאוחלים בעצלתיים, מה שעלול לגרום להשהיה גבוהה עבור הבקשה/ות הראשונים שנשלחו לדגם לאחר טעינתו. חביון זה יכול להיות גבוה בכמה סדרי גודל מזה של בקשת הסקה בודדת.

כדי להפחית את ההשפעה של האתחול העצל על זמן השהיית הבקשה, אפשר להפעיל את האתחול של תת-המערכות והרכיבים בזמן טעינת המודל על ידי אספקת קבוצה לדוגמה של בקשות הסקת מסקנות יחד עם SavedModel. תהליך זה ידוע כ"חימום" של הדגם.

נוֹהָג

SavedModel Warmup נתמך עבור Regress, Classify, MultiInference ו-Predict. כדי להפעיל חימום של הדגם בזמן הטעינה, צרף קובץ נתוני חימום מתחת לתיקיית המשנה assets.extra של ספריית SavedModel.

דרישות לחימום הדגם לעבוד כהלכה:

  • שם קובץ חימום: 'tf_serving_warmup_requests'
  • מיקום הקובץ: assets.extra/
  • פורמט קובץ: TFRecord עם כל רשומה בתור PredictionLog .
  • מספר שיאי החימום <= 1000.
  • נתוני החימום חייבים להיות מייצגים את בקשות ההסקה ששימשו בהגשה.

קטע קוד לדוגמה המפיק נתוני חימום:

import tensorflow as tf
from tensorflow_serving.apis import classification_pb2
from tensorflow_serving.apis import inference_pb2
from tensorflow_serving.apis import model_pb2
from tensorflow_serving.apis import predict_pb2
from tensorflow_serving.apis import prediction_log_pb2
from tensorflow_serving.apis import regression_pb2

def main():
    with tf.io.TFRecordWriter("tf_serving_warmup_requests") as writer:
        # replace <request> with one of:
        # predict_pb2.PredictRequest(..)
        # classification_pb2.ClassificationRequest(..)
        # regression_pb2.RegressionRequest(..)
        # inference_pb2.MultiInferenceRequest(..)
        log = prediction_log_pb2.PredictionLog(
            predict_log=prediction_log_pb2.PredictLog(request=<request>))
        writer.write(log.SerializeToString())

if __name__ == "__main__":
    main()