אופטימיזציה של הביצועים של TensorFlow באמצעות XProf

במדריך הזה נסביר איך להשתמש בכלים שזמינים ב-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.profiler

    tf.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)

מקורות מידע נוספים