שיפור הביצועים ב-GPU משותף באמצעות NVIDIA MPS

אם מפעילים כמה תהליכי SDK ב-GPU משותף של Dataflow, אפשר לשפר את היעילות והניצול של ה-GPU על ידי הפעלת NVIDIA Multi-Process Service ‏ (MPS). ‫MPS תומך בעיבוד מקביל ב-GPU על ידי מתן אפשרות לתהליכים לשתף הקשרים של CUDA ולתזמן משאבים. השימוש ב-MPS יכול להפחית את העלויות של מעבר בין הקשרים, להגדיל את המקביליות ולצמצם את דרישות האחסון.

תהליכי העבודה של היעד הם צינורות Python שפועלים על עובדים עם יותר מ-vCPU אחד.

‫MPS היא טכנולוגיה של NVIDIA שמיישמת את CUDA API, פלטפורמה של NVIDIA שתומכת בחישוב GPU למטרות כלליות. מידע נוסף מופיע במדריך למשתמש של NVIDIA Multi-Process Service.

יתרונות

  • משפר את העיבוד המקביל ואת התפוקה הכוללת של צינורות GPU, במיוחד עבור עומסי עבודה עם שימוש נמוך במשאבי GPU.
  • משפר את ניצול ה-GPU, מה שעשוי להפחית את העלויות.

תמיכה ומגבלות

  • ‫MPS נתמך רק ב-workers של Dataflow שמשתמשים במעבד גרפי יחיד.
  • אי אפשר להשתמש בצינור עיבוד נתונים באפשרויות של צינור עיבוד נתונים שמגבילות את ההפעלה המקבילה.
  • אל תשתמשו באפשרות הצינור --experiments=no_use_multiple_sdk_containers כשמשתמשים ב-NVIDIA MPS. האפשרות הזו מגבילה את Dataflow לתהליך Python יחיד לכל מכונה וירטואלית. כך נמנעת חלוקה יעילה של משאבי GPU בין תהליכים על ידי MPS. היא גם מגבילה מאוד את ההרצה המקבילית בגלל Global Interpreter Lock ‏ (GIL) של Python, וגורמת לכך שפרמטרים רבים אחרים של כוונון לא יעילים.
  • מומלץ להימנע מחריגה מזיכרון ה-GPU הזמין, במיוחד בתרחישי שימוש שכוללים טעינה של מודלים גדולים של למידת מכונה. צריך לאזן בין מספר יחידות ה-vCPU ומספר תהליכי ה-SDK לבין זיכרון ה-GPU הזמין שנדרש לתהליכים האלה.
  • ה-MPS לא משפיע על הפעולות המקבילות שלא מבוססות על GPU.
  • אין תמיכה ב-MPS ב-Dataflow Prime.

הפעלת MPS

מומלץ להפעיל MPS בכל פעם שמעלים יותר מעותק אחד של המודל ל-GPU יחיד (לדוגמה, באמצעות model_copies > 1 בטרנספורמציה RunInference). כך כמה תהליכים יכולים לגשת ל-GPU בו-זמנית, מה שמשפר את היעילות ואת השימוש.

כשמריצים צינור נתונים עם יחידות GPU, צריך להפעיל את MPS באופן הבא:

  • באפשרות הצינור --dataflow_service_options, מוסיפים use_nvidia_mps לפרמטר worker_accelerator.
  • מגדירים את הערך count ל-1.
  • אל תשתמשו באפשרות הצינור --experiments=no_use_multiple_sdk_containers.

אפשרות הצינור --dataflow_service_options נראית כך:

--dataflow_service_options="worker_accelerator=type:GPU_TYPE;count:1;install-nvidia-driver;use_nvidia_mps"

אם אתם משתמשים ב-TensorFlow ומפעילים את MPS, אתם צריכים לבצע את הפעולות הבאות:

  1. הפעלת הקצאת זיכרון דינמית ב-GPU. משתמשים באחת מהאפשרויות הבאות של TensorFlow:
    • כדי להגדיל את הזיכרון, מתקשרים למספר tf.config.experimental.set_memory_growth(gpu, True).
    • מגדירים את משתנה הסביבה TF_FORCE_GPU_ALLOW_GROWTH לערך true.
  2. שימוש במכשירים לוגיים עם מגבלות זיכרון מתאימות.
  3. כדי להשיג ביצועים אופטימליים, מומלץ להשתמש ב-GPU כשאפשר באמצעות מיקום מודעות גמיש במכשירים או מיקום מודעות ידני.

המאמרים הבאים