במדריך הזה נסביר איך להשתמש בכלים שזמינים ב-XProf כדי לעקוב אחרי הביצועים של מודלים של TensorFlow במארח (CPU), במכשיר (GPU) או בשילוב של המארח והמכשיר(או המכשירים).
פרופיל עוזר להבין את צריכת משאבי החומרה (זמן וזיכרון) של הפעולות השונות של TensorFlow (ops) במודל, לפתור צווארי בקבוק בביצועים ובסופו של דבר לגרום למודל לפעול מהר יותר.
במדריך הזה נסביר איך להשתמש בכלים השונים שזמינים ב-Profiler, ואיך הוא אוסף נתוני ביצועים במצבים שונים.
אם אתם רוצים ליצור פרופיל של ביצועי המודל ב-Cloud TPU, כדאי לעיין במדריך Cloud TPU.
איסוף נתוני ביצועים
XProf אוסף פעילויות של המארח ועקבות של GPU של מודל TensorFlow. אתם יכולים להגדיר את XProf לאיסוף נתוני ביצועים באמצעות מצב תכנותי או מצב דגימה.
Profiling APIs
אפשר להשתמש בממשקי ה-API הבאים כדי לבצע פרופילים.
מצב פרוגרמטי באמצעות TensorBoard Keras Callback (
tf.keras.callbacks.TensorBoard)# Profile from batches 10 to 15 tb_callback = tf.keras.callbacks.TensorBoard(log_dir=log_dir, profile_batch='10, 15') # Train the model and use the TensorBoard Keras callback to collect # performance profiling data model.fit(train_data, steps_per_epoch=20, epochs=5, callbacks=[tb_callback])מצב תכנותי באמצעות Function API
tf.profilertf.profiler.experimental.start('logdir') # Train the model here tf.profiler.experimental.stop()מצב תכנותי באמצעות מנהל ההקשר
with tf.profiler.experimental.Profile('logdir'): # Train the model here pass
מצב דגימה: כדי להתחיל הפעלה של שרת gRPC עם המודל של TensorFlow, משתמשים ב-
tf.profiler.experimental.server.startכדי לבצע פרופיל על פי דרישה. אחרי שמפעילים את שרת gRPC ומריצים את המודל, אפשר ללכוד פרופיל באמצעות הלחצן Capture Profile (לכידת פרופיל) ב-XProf. אם מופע TensorBoard לא פועל, אפשר להשתמש בסקריפט שבקטע Install profiler שלמעלה כדי להפעיל אותו.לדוגמה,
# Start a profiler server before your model runs. tf.profiler.experimental.server.start(6009) # (Model code goes here). # Send a request to the profiler server to collect a trace of your model. tf.profiler.experimental.client.trace('grpc://localhost:6009', 'gs://your_tb_logdir', 2000)דוגמה ליצירת פרופיל של כמה עובדים:
# E.g., your worker IP addresses are 10.0.0.2, 10.0.0.3, 10.0.0.4, and you # would like to profile for a duration of 2 seconds. tf.profiler.experimental.client.trace( 'grpc://10.0.0.2:8466,grpc://10.0.0.3:8466,grpc://10.0.0.4:8466', 'gs://your_tb_logdir', 2000)

משתמשים בתיבת הדו-שיח Capture Profile כדי לציין:
- רשימה של כתובות URL של שירותי פרופילים או שמות של TPU, שמופרדים באמצעות פסיקים.
- משך יצירת הפרופילים.
- רמת המעקב אחר קריאות לפונקציות של Python במכשיר ובמארח.
- כמה פעמים רוצים שהכלי ליצירת פרופילים ינסה שוב ללכוד פרופילים אם הניסיון הראשון לא הצליח.
יצירת פרופיל של לולאות אימון מותאמות אישית
כדי ליצור פרופיל של לולאות אימון מותאמות אישית בקוד TensorFlow, צריך להשתמש ב-API tf.profiler.experimental.Trace כדי לסמן את גבולות השלבים ב-XProf.
הארגומנט name משמש כקידומת לשמות השלבים, הארגומנט של מילת המפתח step_num מצורף לשמות השלבים, והארגומנט של מילת המפתח _r גורם לכך שאירוע המעקב הזה יעבור עיבוד כאירוע שלב על ידי XProf.
לדוגמה,
for step in range(NUM_STEPS):
with tf.profiler.experimental.Trace('train', step_num=step, _r=1):
train_data = next(dataset)
train_step(train_data)
הפעולה הזו תאפשר ניתוח ביצועים מבוסס-שלבים של XProf, ואירועי השלבים יופיעו בכלי לצפייה בנתוני המעקב.
חשוב לוודא שכוללים את האיטרטור של מערך הנתונים בהקשר של tf.profiler.experimental.Trace כדי לבצע ניתוח מדויק של צינור הנתונים של הקלט.
קטע הקוד הבא הוא אנטי-תבנית:
for step, train_data in enumerate(dataset):
with tf.profiler.experimental.Trace('train', step_num=step, _r=1):
train_step(train_data)
תרחישים לדוגמה של יצירת פרופילים
הפרופילר כולל מספר תרחישי שימוש לאורך ארבעה צירים שונים. חלק מהשילובים נתמכים כרגע, ואחרים יתווספו בעתיד. אלה כמה תרחישי שימוש:
- פרופילים מקומיים לעומת פרופילים מרחוק: אלה שתי דרכים נפוצות להגדרת סביבת הפרופילים. בפרופיל מקומי, מתבצעת קריאה ל-Profiling API באותה מכונה שבה המודל מופעל, למשל, תחנת עבודה מקומית עם GPU. בפרופיל מרחוק, מתבצעת קריאה ל-Profiling API במחשב אחר שבו המודל פועל, למשל ב-Cloud TPU.
- יצירת פרופיל של כמה תהליכי worker: אפשר ליצור פרופיל של כמה מכונות כשמשתמשים ביכולות האימון המבוזר של TensorFlow.
- פלטפורמת חומרה: פרופיילינג של מעבדי CPU, מעבדי GPU ומעבדי TPU.
בטבלה הבאה מופיעה סקירה כללית של תרחישי השימוש שנתמכים על ידי TensorFlow ומפורטים למעלה:
| Profiling API | מקומי | שלט רחוק | מספר עובדים | פלטפורמות חומרה |
|---|---|---|---|---|
| TensorBoard Keras Callback | נתמך | Not Supported | Not Supported | מעבד, GPU |
tf.profiler.experimental
הפעלה/הפסקה של API |
נתמך | Not Supported | Not Supported | מעבד, GPU |
tf.profiler.experimental
client.trace API |
נתמך | נתמך | נתמך | CPU, GPU, TPU |
| Context manager API | נתמך | לא נתמך | Not Supported | מעבד (CPU), מעבד גרפי (GPU) |
מקורות מידע נוספים
- המדריך TensorFlow Profiler: Profile model performance עם Keras ו-TensorBoard, שבו אפשר ליישם את ההמלצות שבמדריך הזה.
- ההרצאה Performance profiling in TensorFlow 2 מ-TensorFlow Dev Summit 2020.
- הדגמה של TensorFlow Profiler מ-TensorFlow Dev Summit 2020.