אם מריצים כמה תהליכי 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, אתם צריכים לבצע את הפעולות הבאות:
- הפעלה של הקצאת זיכרון דינמית ב-GPU. אפשר להשתמש באחת מהאפשרויות הבאות של TensorFlow:
- כדי להפעיל את הגדלת הזיכרון, מתקשרים למספר
tf.config.experimental.set_memory_growth(gpu, True). - מגדירים את משתנה הסביבה
TF_FORCE_GPU_ALLOW_GROWTHלערך true.
- כדי להפעיל את הגדלת הזיכרון, מתקשרים למספר
- שימוש במכשירים לוגיים עם מגבלות זיכרון מתאימות.
- כדי להשיג ביצועים אופטימליים, מומלץ להשתמש ב-GPU כשאפשר באמצעות מיקום רך של מכשירים או מיקום ידני.
המאמרים הבאים
- שיטות מומלצות נוספות מפורטות במאמר GPUs and worker parallelism.