לאחר פריסת TensorFlow Serving והנפקת בקשות מהלקוח שלך, ייתכן שתבחין שהבקשות נמשכות זמן רב יותר ממה שציפית, או שאינך משיג את התפוקה שהיית רוצה.
במדריך זה, נשתמש בפרופיל של TensorBoard, שבו אתה כבר עשוי להשתמש כדי ליצור פרופיל של אימון מודלים , כדי להתחקות אחר בקשות להסקת מסקנות כדי לעזור לנו לנפות באגים ולשפר את ביצועי ההסקות.
עליך להשתמש במדריך זה בשילוב עם שיטות העבודה המומלצות המצוינות במדריך הביצועים כדי לייעל את המודל, הבקשות ומופע TensorFlow Serving שלך.
סקירה כללית
ברמה גבוהה, נכוון את כלי הפרופילים של TensorBoard לשרת gRPC של TensorFlow Serving. כאשר אנו שולחים בקשת הסקה ל- Tensorflow Serving, אנו גם נשתמש בו-זמנית בממשק המשתמש של TensorBoard כדי לבקש ממנו ללכוד את עקבות הבקשה הזו. מאחורי הקלעים, TensorBoard ישוחח עם TensorFlow Serving דרך gRPC ויבקש ממנו לספק מעקב מפורט של משך החיים של בקשת ההסקה. לאחר מכן, TensorBoard ידמיין את הפעילות של כל שרשור בכל מכשיר מחשוב (ריצת קוד משולב עם profiler::TraceMe
) במהלך כל חיי הבקשה בממשק המשתמש של TensorBoard כדי שנוכל לצרוך אותו.
דרישות מוקדמות
-
Tensorflow>=2.0.0
- TensorBoard (יש להתקין אם TF הותקן באמצעות
pip
) - Docker (בו נשתמש כדי להוריד ולהפעיל TF serving>=2.1.0 תמונה)
פרוס מודל עם TensorFlow Serving
עבור דוגמה זו, נשתמש ב-Docker, הדרך המומלצת לפריסת Tensorflow Serving, כדי לארח מודל צעצוע שמחשב f(x) = x / 2 + 2
שנמצא במאגר Tensorflow Serving Github .
הורד את מקור ההגשה של TensorFlow.
git clone https://github.com/tensorflow/serving /tmp/serving
cd /tmp/serving
הפעל את TensorFlow Serving באמצעות Docker ופרוס את מודל half_plus_two.
docker pull tensorflow/serving
MODELS_DIR="$(pwd)/tensorflow_serving/servables/tensorflow/testdata"
docker run -it --rm -p 8500:8500 -p 8501:8501 \
-v $MODELS_DIR/saved_model_half_plus_two_cpu:/models/half_plus_two \
-v /tmp/tensorboard:/tmp/tensorboard \
-e MODEL_NAME=half_plus_two \
tensorflow/serving
במסוף אחר, בצע שאילתות במודל כדי לוודא שהמודל פרוס כהלכה
curl -d '{"instances": [1.0, 2.0, 5.0]}' \
-X POST http://localhost:8501/v1/models/half_plus_two:predict
# Returns => { "predictions": [2.5, 3.0, 4.5] }
הגדר את הפרופיל של TensorBoard
בטרמינל אחר, הפעל את הכלי TensorBoard במחשב שלך, מתן ספרייה לשמירת אירועי מעקב ההסקה ל:
mkdir -p /tmp/tensorboard
tensorboard --logdir /tmp/tensorboard --port 6006
נווט אל http://localhost:6006/ כדי להציג את ממשק המשתמש של TensorBoard. השתמש בתפריט הנפתח בחלק העליון כדי לנווט ללשונית פרופיל. לחץ על Capture Profile וציין את הכתובת של שרת gRPC של Tensorflow Serving.
ברגע שתלחץ על "Capture", TensorBoard יתחיל לשלוח בקשות פרופיל לשרת הדגם. בתיבת הדו-שיח שלמעלה, אתה יכול להגדיר הן את המועד האחרון עבור כל בקשה והן את מספר הפעמים הכולל של Tensorboard לנסות שוב אם לא נאספו אירועי מעקב. אם אתה מתכנן מודל יקר, ייתכן שתרצה להגדיל את המועד האחרון כדי להבטיח שבקשת הפרופיל לא תסתיים לפני השלמת בקשת ההסקה.
שלח בקשת מסקנות ויצירת פרופיל
לחץ על Capture בממשק המשתמש של TensorBoard ושלח בקשת הסקה ל-TF Serving במהירות לאחר מכן.
curl -d '{"instances": [1.0, 2.0, 5.0]}' -X POST \
http://localhost:8501/v1/models/half_plus_two:predict
אתה אמור לראות "פרופיל לכידת בהצלחה. אנא רענן." טוסט מופיע בתחתית המסך. משמעות הדבר היא כי TensorBoard הצליח לאחזר אירועי מעקב מ- TensorFlow Serving ושמר אותם ב- logdir
שלך. רענן את הדף כדי להמחיש את בקשת ההסקה באמצעות ה-Trace Viewer של The Profiler, כפי שניתן לראות בסעיף הבא.
נתח את מעקב בקשת ההסקה
כעת אתה יכול לראות בקלות איזה חישוב מתרחש כתוצאה מבקשת ההסקה שלך. אתה יכול להגדיל וללחוץ על כל אחד מהמלבנים (מעקב אחר אירועים) כדי לקבל מידע נוסף כגון שעת התחלה מדויקת ומשך הקיר.
ברמה גבוהה, אנו רואים שני שרשורים השייכים לזמן הריצה של TensorFlow ושלישי השייך לשרת REST, מטפלים בקבלת בקשת ה-HTTP ויוצרים סשן של TensorFlow.
אנחנו יכולים להתקרב כדי לראות מה קורה בתוך ה-SessionRun.
בשרשור השני, אנו רואים קריאה התחלתית של ExecutorState::Process שבה לא פועלות אופציות של TensorFlow אלא מבוצעים שלבי אתחול.
בשרשור הראשון, אנו רואים את הקריאה לקרוא את המשתנה הראשון, וברגע שהמשתנה השני זמין גם הוא, מבצע את הכפל ומוסיף גרעינים ברצף. לבסוף, ה-Executor מסמן שהחישוב שלו נעשה על ידי קריאת DoneCallback וניתן לסגור את ה-Session.
השלבים הבאים
למרות שזו דוגמה פשוטה, אתה יכול להשתמש באותו תהליך כדי ליצור פרופיל של מודלים הרבה יותר מורכבים, מה שמאפשר לך לזהות פעולות איטיות או צווארי בקבוק בארכיטקטורת המודל שלך כדי לשפר את הביצועים שלו.
אנא עיין במדריך TensorBoard Profiler לקבלת הדרכה מלאה יותר על תכונות של TensorBoard Profiler ו- TensorFlow Serving Performance Guide, כדי ללמוד עוד על אופטימיזציה של ביצועי מסקנות.