מגיש דגמי TensorFlow עם אופציות מותאמות אישית

TensorFlow מגיע בנוי מראש עם ספרייה נרחבת של אופציות וגרעיני הפעלה (יישומים) מכוונים לסוגי חומרה שונים (CPU, GPU וכו'). פעולות אלו מקושרות אוטומטית לתוך TensorFlow Serving ModelServer הבינארי ללא עבודה נוספת הנדרשת על ידי המשתמש. עם זאת, ישנם שני מקרי שימוש המחייבים את המשתמש לקשר באופציות ל-ModelServer במפורש:

  • כתבת אופציה מותאמת אישית משלך (לדוגמה באמצעות מדריך זה )
  • אתה משתמש באופ שכבר מיושם שלא נשלח עם TensorFlow

לא משנה אם יישמת את האופ או לא, כדי להגיש מודל עם אופציות מותאמות אישית, אתה צריך גישה למקור האופ. מדריך זה מנחה אותך בשלבי השימוש במקור כדי להפוך אופציות מותאמות אישית לזמינות להגשה. להדרכה לגבי הטמעת פעולות מותאמות אישית, עיין ב- tensorflow/custom-op repo.

תנאי מוקדם: כאשר Docker מותקן, שיבטת את מאגר TensorFlow Serving וספריית העבודה הנוכחית שלך היא השורש של המאגר.

העתק על קוד הפעלה לפרויקט הגשה

על מנת לבנות את TensorFlow Serving עם המבצעים המותאמים אישית שלך, תחילה עליך להעתיק את מקור ההפעלה לפרויקט ההגשה שלך. עבור דוגמה זו, תשתמש ב- tensorflow_zero_out ממאגר ה-Custom-op שהוזכר לעיל.

בתוך ריפו ההגשה, צור ספריית custom_ops , שתכיל את כל הפעולות המותאמות אישית שלך. עבור דוגמה זו, יהיה לך רק את הקוד tensorflow_zero_out .

mkdir tensorflow_serving/custom_ops
cp -r <custom_ops_repo_root>/tensorflow_zero_out tensorflow_serving/custom_ops

בניית ספרייה סטטית עבור האופ

בקובץ BUILD של tensorflow_zero_out, אתה רואה יעד שמייצר קובץ אובייקט משותף ( .so ), אותו היית טוען ל-python כדי ליצור ולאמן את המודל שלך. עם זאת, TensorFlow Serving מקשרת באופן סטטי פעולות בזמן הבנייה, ודורשת קובץ .a . אז תוסיף כלל בנייה שמייצר את הקובץ הזה ל- tensorflow_serving/custom_ops/tensorflow_zero_out/BUILD :

cc_library(
    name = 'zero_out_ops',
    srcs = [
        "cc/kernels/zero_out_kernels.cc",
        "cc/ops/zero_out_ops.cc",
    ],
    alwayslink = 1,
    deps = [
        "@org_tensorflow//tensorflow/core:framework",
    ]
)

בנה ModelServer עם ה-Op מקושר

כדי לשרת מודל שמשתמש באופ מותאם אישית, עליך לבנות את ה-ModelServer הבינארי עם ה-Op שלו מקושר פנימה. באופן ספציפי, אתה מוסיף את יעד הבנייה zero_out_ops שנוצר לעיל לקובץ BUILD של ModelServer.

ערוך tensorflow_serving/model_servers/BUILD כדי להוסיף את יעד ה-op build המותאם אישית שלך ל- SUPPORTED_TENSORFLOW_OPS הכלול ביעד server_lib :

SUPPORTED_TENSORFLOW_OPS = [
    ...
    "//tensorflow_serving/custom_ops/tensorflow_zero_out:zero_out_ops"
]

לאחר מכן השתמש בסביבת Docker כדי לבנות את ModelServer:

tools/run_in_docker.sh bazel build tensorflow_serving/model_servers:tensorflow_model_server

הגישו דגם המכיל את האופציה המותאמת אישית שלכם

כעת תוכל להפעיל את ה-ModelServer הבינארי ולהתחיל להגיש מודל המכיל את האופציה המותאמת אישית הזו:

tools/run_in_docker.sh -o "-p 8501:8501" \
bazel-bin/tensorflow_serving/model_servers/tensorflow_model_server \
--rest_api_port=8501 --model_name=<model_name> --model_base_path=<model_base_path>

שלח בקשת הסקה לבדיקת הפעלה ידנית

כעת תוכל לשלוח בקשת הסקה לשרת הדגם כדי לבדוק את האופציה המותאמת אישית שלך:

curl http://localhost:8501/v1/models/<model_name>:predict -X POST \
-d '{"inputs": [[1,2], [3,4]]}'

דף זה מכיל API שלם יותר לשליחת בקשות REST לשרת הדגם.