שיפור הביצועים ב-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 בין התהליכים. היא גם מגבילה מאוד את ההרצה המקבילית בגלל 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 כשאפשר באמצעות מיקום רך של מכשירים או מיקום ידני.

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