הגדרת אימון מבוזר עם Horovod: ניסיון ומקרי מבחן

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

תחומי פיתוח AI

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1365
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • עיצוב לוגו לחברת B2B Advance
    עיצוב לוגו לחברת B2B Advance
    776
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח לוגו חברת AIDER
    פיתוח לוגו חברת AIDER
    1022
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113

במהלך אימון מודל על 8 GPUs, זמן סנכרון הגרדיאנטים צרך 40% מכל צעד — עד שהגדרנו את Horovod עם NCCL. ה-DataParallel הסטנדרטי של PyTorch לא הצליח להתמודד עם תקשורת בין שרתים: החביון גדל, והניצול ירד. הבעיה לא הייתה המודל אלא תבנית התקשורת. Ring-allreduce של Horovod פתר את זה ביומיים: חביון p99 ירד פי 3, והתפוקה עלתה ב-180%.

אנחנו מגדירים אימון מבוזר על Horovod כבר יותר מ-5 שנים — במהלך תקופה זו השלמנו מעל 50 פרויקטים עבור חברות מארה"ב, אירופה ו-CIS. אנחנו עוזרים בבחירת טופולוגיה, אופטימיזציה של היפרפרמטרים, ושילוב צינור MLOps.

למה Horovod לאימון מבוזר?

Ring-allreduce היא לא השיטה היחידה, אבל אחת היעילות ביותר עבור אשכולות GPU מרובי צמתים. בבדיקות על 16 GPUs עם InfiniBand, Horovod הראה האצה של פי 14.8 יחסית ל-GPU בודד, בעוד PyTorch DDP השיג פי 13.2. ההפרש של 12% נובע מאופטימיזציית NCCL אגרסיבית יותר ותמיכה במיזוג טנסורים. עבור TensorFlow, Horovod נשאר האופציה היחידה: tf.distribute.MirroredStrategy לא תומך בסנכרון בין שרתים, ו-tf.distribute.MultiWorkerMirroredStrategy מסובך יותר להגדרה.

אילו בעיות אנחנו פותרים עם Horovod

בעיה 1: ניצול GPU נמוך עקב עיכובי תקשורת. על 8 שרתים עם 4 GPUs כל אחד, allreduce סטנדרטי גרם לזמן סרק של GPU של 35-50%. פתרון: הגדרת NCCL עם אלגוריתם אופטימלי (ring לעומת tree) ופרמטרים (NCCL_IB_DISABLE, NCCL_SOCKET_IFNAME). לאחר כיול, הניצול עלה מ-55% ל-88%.

בעיה 2: קצב למידה א-סימטרי בעת הגדלת מספר ה-GPUs. אם lr לא מוקטן באופן פרופורציונלי למספר ה-GPUs, המודל מתפצל או מתכנס לאט. Horovod מאפשר להגדיר lr = base_lr * hvd.size() ולהשתמש ב-DistributedOptimizer עם דחיסת fp16 — זה מייצב את התהליך.

בעיה 3: חוסר גמישות בתרחישי ענן. בעת שימוש במופעי GPU ספוטיים, הם עלולים להישלל במפתיע. Elastic Training שומר על המצב בין שינויי גודל — אין צורך להפעיל מחדש את האימון מההתחלה.

איך Horovod Elastic Training פותר חוסר יציבות בענן

בסביבות ענן שבהן מופעי ספוט יכולים להישלל בכל רגע, Elastic Training מאפשר לשנות את גודל האשכול דינמית מבלי לעצור את האימון. אנחנו מעטרים את פונקציית האימון עם @hvd.elastic.run ומשתמשים ב-hvd.elastic.TorchState כדי לשמור את מצב האופטימייזר ומונה הצעדים. זה מספק סובלנות לתקלות וחוסך זמן בהפעלות מחדש.

מהניסיון שלנו: הגדרת Horovod עבור טרנספורמר עם פרמטר 1B

פרויקט: אימון טרנספורמר עם מיליארד פרמטרים על 32 GPUs (4 שרתים × 8 A100). הפתרון הראשוני עם PyTorch DDP נתקל בפסק זמן של NCCL במהלך סנכרון בין שרתים. כתבנו מחדש את האימון באמצעות Horovod Elastic Training.

מחסנית: PyTorch 2.0, Horovod 0.28, CUDA 11.8, NCCL 2.16, InfiniBand HDR100, SLURM. שלבים מרכזיים:

  1. התקנה עם HOROVOD_GPU_OPERATIONS=NCCL ותמיכה במיזוג טנסורים (גודל buffer של 128 MB).
  2. החלפת DataLoader ב-hvd.DistributedSampler — ללא shuffle, עם seed המבוסס על rank.
  3. שימוש ב-hvd.Broadcast לאתחול משקלים ואופטימייזר (קנה מידה של lr: 1e-3 → 1e-4).
  4. הגדרת Elastic Training: @hvd.elastic.run עם TorchState, נקודות שמירה כל 100 צעדים.

תוצאה: האצה של פי 3.5 על 4 GPUs (יחסית ל-GPU בודד), פי 2.8 על 8 GPUs (תת-לינארית עקב קישור בין שרתים). זמן האימון ירד מ-30 ל-9 ימים. להשוואה: ללא Horovod על אותה חומרה, הניצול היה 40% — לאחר כוונון, 85%.

השוואת מהירות קנה מידה של Horovod בגדלים שונים של אשכול

מספר GPUs האצה (Horovod) האצה (PyTorch DDP) יעילות Horovod, %
4 פי 3.5 פי 3.2 87.5
8 פי 6.8 פי 6.1 85.0
16 פי 13.2 פי 11.9 82.5
32 פי 25.6 פי 22.5 80.0

נתונים עם InfiniBand HDR100 ו-NCCL 2.16. כפי שניתן לראות, Horovod עוקף בעקביות את DDP ב-8-12% הודות לאופטימיזציית מיזוג טנסורים והקבלה אגרסיבית של allreduce.

מה כוללת עבודת הגדרת Horovod שלנו

אנחנו מציעים מחזור מלא של הגדרה:

  • ביקורת תשתית קיימת: בדיקות רוחב פס של קישורים בין שרתים (IB/RoCE), זיהוי צווארי בקבוק של NCCL.
  • התקנה והגדרה: בניית Horovod עם ה-backend הנדרש (NCCL/gloo/MPI), הגדרת משתני סביבה (NCCL_DEBUG, NCCL_IB_GID_INDEX).
  • שילוב קוד: רפקטורינג של סקריפט האימון ל-API של Horovod, הוספת elastic training, פרופילינג עם Timeline.
  • אופטימיזציה: כוונון גודל מיזוג טנסורים, בחירת אלגוריתם allreduce, דחיסת fp16.
  • תיעוד ורשימת בדיקה: מתן קונפיגורציות, סקריפטי הפעלה, המלצות לבחירת גודל אשכול.
  • תמיכה: ניטור באמצעות Weights & Biases, סיוע בפריסה על SLURM/Kubernetes.

יש לנו ניסיון עם אשכולות עד 256 GPUs — אנחנו מבטיחים מהירות יציבה עם MPI מוגדר כראוי.

תהליך עבודה

  1. ניתוח: לימוד המודל שלך, מערך הנתונים, מדדים נוכחיים (FLOPS, ניצול GPU).
  2. עיצוב: בחירת מספר GPUs, סוג interconnect, backend (NCCL עבור NVIDIA, gloo עבור AMD).
  3. יישום: כתיבה ובדיקת קוד, פרופילינג על אשכול קטן.
  4. בדיקות: הרצה על האשכול המלא, בדיקת האצה לינארית, קביעת קו בסיס ביצועים.
  5. פריסה ומסירה: כל התיעוד, הסקריפטים, קבצי הקונפיגורציה — מוכנים לייצור.

דוגמה לפקודת התקנת Horovod עם תמיכת GPU:

HOROVOD_GPU_OPERATIONS=NCCL pip install horovod[tensorflow,pytorch] horovodrun --check-build 

השוואה: Horovod לעומת PyTorch DDP לעומת DeepSpeed

פרמטר Horovod PyTorch DDP DeepSpeed
תמיכה בפריימוורק TF, PyTorch, Keras, MXNet PyTorch בלבד PyTorch (בעיקר)
סוג סנכרון Ring-allreduce Allreduce (NCCL) אופטימיזציות ZeRO
תמיכה בריבוי צמתים כן (MPI) כן (torchrun, SLURM) כן (DeepSpeed launcher)
Elastic training מובנה לא (נדרשים כלים חיצוניים) לא
פרופילר Timeline (chrome://tracing) torch.profiler DeepSpeed Profiler
קלות הגדרה למתחילים בינונית גבוהה נמוכה

מסקנה: עבור פרויקטים חדשים של PyTorch עם צומת יחיד — DDP. עבור ריבוי פריימוורקים או TensorFlow — Horovod. עבור מודלים ענקיים (>10B) — DeepSpeed. אנחנו עוזרים לך להחליט: מעריכים את המשימה שלך, בודקים על אשכול הבדיקות שלנו.

איך אנחנו מעריכים לוחות זמנים

טווח: מ-5 עד 15 ימי עבודה בהתאם למורכבות האינטגרציה. העלות מחושבת באופן פרטני לכל פרויקט. צור קשר לייעוץ — קבל תוכנית מפורטת ולוח זמנים משוער תוך יום. הזמן הגדרת Horovod — ננתח את המשימה שלך ונציע את הפתרון האופטימלי.

יש לנו יותר מ-5 שנות ניסיון ו-50+ פרויקטים — הפקידו את הגדרת האימון המבוזר בידי אנשי מקצוע.

Sergeev, A., & Del Balso, M. Horovod: fast and easy distributed deep learning in TensorFlow. arXiv preprint arXiv:1802.05799.