לכידת פרופילים

כדי להשתמש ב-Xprof, צריך קודם להפעיל את תיעוד הפרופיל בקוד של עומס העבודה של המודל. יש שתי דרכים לצלם פרופילים, שמפורטות בהמשך.

צילום פרוגרמטי

בשיטה של תיעוד פרוגרמטי, צריך להוסיף הערות לקוד המודל כדי לציין איפה בקוד רוצים לתעד פרופילים. בדרך כלל, משתמשים אוספים פרופילים לכמה שלבים במהלך לולאת האימון, או יוצרים פרופיל של בלוק ספציפי במודל. יש כמה דרכים ללכוד עקבות ב-frameworks השונים JAX, ‏ Pytorch XLA ו-Tensorflow – אפשר להשתמש בפונקציות API להתחלה ולהפסקה של מעקב או במנהל הקשר.

צילום מסך לפי דרישה (הידוע גם כצילום מסך ידני)

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

כדי להפעיל את יצירת הפרופיל לפי דרישה, עדיין צריך להפעיל את שרת xprof בקוד. לדוגמה, ב-JAX, הפעלת jax.profiler.start_server תתחיל שרת xprof בעומס העבודה של למידת המכונה, שמקשיב לטריגר של לכידת פרופילים לפי דרישה כדי להתחיל ללכוד פרופילים.

כמה סשנים בכל הפעלה

כשמבצעים פרופילים, אפשר לבצע פרופילים להרצה יחידה כמספר סשנים. נניח שאתם מצלמים פרופילים בהרצת אימון משלב 1 עד 3, ומאוחר יותר מצלמים פרופילים משלב 8 עד 10. אלה פרופילים של אותו ריצה, אבל התמונה הראשונה משלב 1-3 תהיה session1 והתמונה השנייה משלב 8-10 תהיה session2. כל הפעילויות באתר יסומנו בחותמת תאריך שונה מתחת לכל הרצה. אפשר לצלם פרופילים בסשנים שונים באופן פרוגרמטי או לפי דרישה, או בשילוב של שתי הדרכים.

XProf ו-Tensorboard ב-Google Cloud

ב-Google Cloud, מומלץ להשתמש בספרייה cloud-diagnostics-xprof כדי לארח בקלות את Tensorboard ו-XProf. אלה כמה מהיתרונות העיקריים של שימוש בספרייה הזו ב-GCP:

  • הגדרה ואריזה קלות של יחסי תלות של XProf ו-TensorBoard.
  • אחסון הפרופילים ב-GCS, שיכול להיות שימושי לשמירה לטווח ארוך ולניתוח אחרי ההרצה (פרופילים מקומיים שנתפסו יימחקו אחרי שהחוקר יסיים את ההרצה);
  • טעינה מהירה של פרופילים גדולים ושל כמה פרופילים על ידי הקצאת Tensorboard במכונה וירטואלית ב-GCE או בתרמיל ב-GKE, עם אפשרות לשנות את סוג המכונה בהתאם לצרכים של המשתמשים מבחינת מהירות טעינה ועלות.
  • ליצור קישור לשיתוף קל של פרופילים ולשיתוף פעולה עם חברי הצוות ומהנדסי Google.
  • קל יותר ליצור פרופילים של עומסי עבודה ב-GKE וב-GCE לפי דרישה, כדי לבחור כל מארח שמריץ את עומס העבודה שלכם וליצור פרופילים.

הוראות ספציפיות למסגרת

כאן מוסבר איך להפעיל פרופילים פרוגרמטיים ופרופילים לפי דרישה במסגרות שונות:

פתרון בעיות

פרופיילינג של ה-GPU

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

אם מופיעה שגיאה כמו: Could not load dynamic library 'libcupti.so.10.1'
השגיאה המלאה:

W external/org_tensorflow/tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'libcupti.so.10.1'; dlerror: libcupti.so.10.1: cannot open shared object file: No such file or directory
2020-06-12 13:19:59.822799: E external/org_tensorflow/tensorflow/core/profiler/internal/gpu/cupti_tracer.cc:1422] function cupti_interface_->Subscribe( &subscriber_, (CUpti_CallbackFunc)ApiCallback, this)failed with error CUPTI could not be loaded or symbol could not be found.

מוסיפים את הנתיב אל libcupti.so למשתנה הסביבה LD_LIBRARY_PATH. (אפשר לנסות ללחוץ על locate libcupti.so כדי למצוא את הנתיב). לדוגמה:

export LD_LIBRARY_PATH=/usr/local/cuda-10.1/extras/CUPTI/lib64/:$LD_LIBRARY_PATH

אם ההודעה Could not load dynamic library עדיין מופיעה אחרי שמבצעים את הפעולה הזו, בודקים אם מעקב אחר ה-GPU מופיע בכל זאת בכלי לצפייה במעקב. ההודעה הזו מופיעה לפעמים גם כשהכול פועל, כי המערכת מחפשת את ספריית libcupti בכמה מקומות.

אם מופיעה שגיאה כמו: failed with error CUPTI_ERROR_INSUFFICIENT_PRIVILEGES
השגיאה המלאה:

E external/org_tensorflow/tensorflow/core/profiler/internal/gpu/cupti_tracer.cc:1445] function cupti_interface_->EnableCallback( 0 , subscriber_, CUPTI_CB_DOMAIN_DRIVER_API, cbid)failed with error CUPTI_ERROR_INSUFFICIENT_PRIVILEGES
2020-06-12 14:31:54.097791: E external/org_tensorflow/tensorflow/core/profiler/internal/gpu/cupti_tracer.cc:1487] function cupti_interface_->ActivityDisable(activity)failed with error CUPTI_ERROR_NOT_INITIALIZED

מריצים את הפקודות הבאות (שימו לב שצריך להפעיל מחדש את המחשב):

echo 'options nvidia "NVreg_RestrictProfilingToAdminUsers=0"' | sudo tee -a /etc/modprobe.d/nvidia-kernel-common.conf
sudo update-initramfs -u
sudo reboot now

מידע נוסף על השגיאה הזו מופיע במאמרי העזרה של NVIDIA.

יצירת פרופילים במחשב מרוחק

אם התוכנית שרוצים ליצור לה פרופיל פועלת במכונה מרוחקת, אפשרות אחת היא להריץ את כל ההוראות שלמעלה במכונה המרוחקת (במיוחד, להפעיל את שרת XProf במכונה המרוחקת), ואז להשתמש בהעברה ליציאה מקומית באמצעות SSH כדי לגשת לממשק המשתמש של XProf בדפדפן מהמכונה המקומית. משתמשים בפקודת ה-SSH הבאה כדי להעביר את יציאת ברירת המחדל של XProf‏ 8791 מהמכונה המקומית למכונה המרוחקת:

ssh -L 8791:localhost:8791 <remote server address>

או אם אתם משתמשים ב-Google Cloud:

$ gcloud compute ssh <machine-name> -- -L 8791:localhost:8791

כמה התקנות של TensorBoard

אם הפעלת TensorBoard נכשלת ומופיעה שגיאה כמו: ValueError: Duplicate plugins for name projector

הסיבה לכך היא לרוב שיש שתי גרסאות של TensorBoard או TensorFlow מותקנות (למשל, חבילות ה-pip‏ tensorflow, tf-nightly, tensorboard ו-tb-nightly כוללות את TensorBoard). הסרת חבילת pip אחת עלולה לגרום להסרת קובץ ההפעלה tensorboard, ואז קשה להחליף אותו. לכן, יכול להיות שיהיה צורך להסיר את כל החבילות ולהתקין מחדש גרסה אחת:

pip uninstall tensorflow tf-nightly tensorboard tb-nightly xprof xprof-nightly tensorboard-plugin-profile tbp-nightly
pip install tensorboard xprof

פתרון בעיות שקשורות להרשאות

כשמריצים פרופיל באמצעות CUDA® Toolkit בסביבת Docker או ב-Linux, יכול להיות שתיתקלו בבעיות שקשורות להרשאות CUPTI לא מספיקות (CUPTI_ERROR_INSUFFICIENT_PRIVILEGES). אפשר לעבור אל NVIDIA Developer Docs כדי לקבל מידע נוסף על פתרון הבעיות האלה ב-Linux.

כדי לפתור בעיות הרשאה של CUPTI בסביבת Docker, מריצים את הפקודה

docker run option '--privileged=true'