הפעלה, השבתה והגדרה של CoMMA

במדריך הזה מוסבר איך להפעיל, להשבית ולנהל את ספריית Collective Communication Analyzer ‏ (CoMMA). ‫CoMMA אוסף טלמטריה של NCCL עבור שירותיGoogle Cloud . מידע נוסף על CoMMA זמין במאמר Collective Communication Analyzer (CoMMA).

הפעלת CoMMA

‫CoMMA מותקן מראש ומופעל אם משתמשים בתמונות שמכילות את התוסף NCCL gIB. הרשימה המלאה של התמונות האלה זמינה במאמר תמונות שמופעל בהן CoMMA.

אפשרויות התקנה

אם אתם לא משתמשים באף אחת מהתמונות האלה ורוצים להתקין את CoMMA, אתם יכולים להשתמש באחת מהשיטות הבאות.

שיטת ההתקנה סוגי מכונות נתמכים
תמונת NCCL Google Infrastructure Bundle‏ (gIB) (מומלצת לסוגים חדשים יותר של מכונות) ‫A4X Max,‏ A4X,‏ A4 High ו-A3 Ultra
תמונת מתקין CoMMA ‫A4X,‏ A4 High ו-A3 Ultra
Build from source (חובה לסוגי מכונות ישנים יותר) ‫A3 Mega,‏ A3 High,‏ A3 Edge,‏ A2 Ultra,‏ A2 Standard ו-N1 עם מעבדי GPU מצורפים

התקנה של CoMMA

כדי להתקין את CoMMA, בוחרים באחת מהאפשרויות הבאות:

תמונת NCCL gIB

כדי להתקין את CoMMA באמצעות תמונת ה-gIB של NCCL, מריצים את הפקודה הבאה.

docker run --rm --name nccl-gib-installer
 --volume /usr/local/gib:/var/lib/gib \
 us-docker.pkg.dev/gce-ai-infra/gpudirect-gib/nccl-plugin-gib install \
 --install-nccl

תמונת מצב בזמן ההתקנה של CoMMA

אפשר לקבל קבצים בינאריים של CoMMA בתמונת Docker עצמאית. אתם יכולים להשתמש בקובץ אימג' של Docker‏, us-docker.pkg.dev/gce-ai-infra/gpudirect-gib/comma-installer, בתור initContainers כדי להתקין קבצים בינאריים של CoMMA במאגר העומס שלכם. הקונטיינר מאחסן את הקבצים הבינאריים בספרייה /artifacts.

כדי להשתמש בתמונת ההתקנה של CoMMA, מבצעים את השלבים הבאים:

  1. מתקינים את NCCL 2.23 ואילך.

  2. כדי להתקין את CoMMA בעומס העבודה, מוסיפים את קטע הקוד הבא אל initContainers:

    - name: profiler-plugin-installer
      image: us-docker.pkg.dev/gce-ai-infra/gpudirect-gib/comma-installer:latest
      imagePullPolicy: Always
      volumeMounts:
      - name: nccl-plugin-volume
        mountPath: /usr/local/nccl-plugin
      command:
        - /bin/sh
        - -c
        - |
          set -ex
          rm -rf /usr/local/nccl-plugin/lib64/libnccl-profiler.so
          cp /artifacts/libnccl_profiler.so /usr/local/nccl-plugin/lib64/libnccl-profiler.so
    
          # GPUViz is a dependency of telemetry insights such as straggler detection
          rm -rf /usr/local/nccl-plugin/lib64/libGPUViz.so
          cp /artifacts/libGPUViz.so /usr/local/nccl-plugin/lib64/
    

קטע ההגדרות ב-YAML מציין קונטיינר להתקנת CoMMA. בקטע הקוד מוגדר קובץ האימג' של הקונטיינר להתקנה, מדיניות השליפה שלו והרכבת נפח לאחסון הפלאגין. צריך לטעון את אותו נפח אחסון למכולת של עומס העבודה עם <mount-path>/lib64 שנוסף ל-LD_LIBRARY_PATH. בקטע command מופעל סקריפט מעטפת להסרת ספריית פרופילים קיימת. לאחר מכן, הוא מעתיק את ספריית פרופילר החדשה לתיקיית הפלאגין המיועדת. הסקריפט מוודא שגרסת הפלאגין הנכונה של כלי הפרופיל מותקנת ומוכנה לשימוש.

בנייה ממקור

כדי ליצור את ספריית CoMMA ממקור, צריך להתקין את התוכנה הבאה:

  • שפת התכנות Rust, שנדרשת לקומפיילר ול-Cargo. אפשר להתקין את זה באמצעות rustup או חבילות מערכת
  • ההרשאה Libclang-dev, שנדרשת ל-bindgen.
  • CMake גרסה 3.10 ואילך

כדי לבצע בנייה ממקור, פועלים לפי השלבים הבאים:

  1. משכפלים את המאגר ואת מודולי המשנה שלו.

    git clone --recurse-submodules https://github.com/google/CoMMA
  2. קומפילציה של קובצי ההפעלה באמצעות Cargo.

    cargo build --release

    ‫Cargo שומר את הקובץ הבינארי ב-target/release/libnccl_profiler.so.

  3. כדי להפעיל את NCCL לטעינת ספריות CoMMA, משתמשים באחת מהשיטות הבאות:

    • מעתיקים את הקובץ המהודר libnccl_profiler.so לספרייה ב-LD_LIBRARY_PATH. משנים את השם ל-libnccl-profiler.so (משתמשים במקף במקום בקו תחתון).
    • אפשר גם להגדיר את משתנה הסביבה NCCL_PROFILER_PLUGIN כדי לציין את הנתיב של הקובץ .so.

אימות ההתקנה או ההפעלה

כדי לוודא ש-NCCL טוען את ספריות CoMMA, בודקים את היומנים של NCCL:

  1. הפעלת רישום ביומן של ניפוי באגים ב-NCCL. כדי להפעיל את הרישום ביומן, מגדירים את משתנה הסביבה NCCL_DEBUG=INFO. אפשר גם לציין רמת ניפוי באגים מפורטת יותר. אפשרויות נוספות לניפוי באגים מפורטות בקטע NCCL_DEBUG במסמכי התיעוד של NVIDIA.
  2. מציינים את מערכת המשנה INIT לניפוי הבאגים. מציינים את INIT על ידי הגדרת משתנה הסביבה NCCL_DEBUG_SUBSYS=INIT. אפשר גם לציין מערכות משנה אחרות. אפשרויות נוספות של מערכת המשנה מפורטות בקטע NCCL_DEBUG_SUBSYS.
  3. מחפשים ביומן של NCCL שורה שדומה לשורה הבאה: NCCL INFO PROFILER/Plugin: Plugin name set by env to PATH_TO_PROFILER_PLUGIN

השבתת CoMMA

אם CoMMA כבר מותקן, כדי למנוע ממנו לאסוף נתוני טלמטריה של NCCL, צריך להגדיר את NCCL_TELEMETRY_MODE=0 משתנה הסביבה של CoMMA לפני שמריצים את עומסי העבודה. הוראות להגדרת משתני סביבה של CoMMA מופיעות במאמר בנושא הגדרת משתני סביבה.

כדי להפעיל מחדש את CoMMA אחרי השבתה, פועלים לפי השלבים הבאים:

  1. מגדירים את משתנה הסביבה NCCL_TELEMETRY_MODE לערך שאינו אפס. לדוגמה, כדי להשתמש במצב ברירת המחדל, מציינים NCCL_TELEMETRY_MODE=3.

    רשימת האפשרויות המלאה מופיעה בטבלה אפשרויות הגדרה בקטע NCCL_TELEMETRY_MODE.

  2. איך מוודאים ש-CoMMA פועל

הגדרה של טלמטריה של CoMMA NCCL וצפייה בה

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

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

הגדרת רמת הפירוט של הנתונים

מערכת CoMMA אוספת נתוני טלמטריה של NCCL ברמות פירוט שונות. מגדירים את רמת הגרנולריות באמצעות משתני סביבה. הוראות להגדרת משתני סביבה של CoMMA מופיעות במאמר בנושא הגדרת משתני סביבה.

  • התנהגות ברירת המחדל: כברירת מחדל, CoMMA עוקב אחרי פעולות NCCL, כולל פעולות קולקטיביות ועמית לעמית, המטא-נתונים של הפעולות האלה וזמני השלמת הפעולות. הוא משתמש במשתני הסביבה הבאים:
    • NCCL_PROFILER_TRACK_NCCLOP=true
    • NCCL_PROFILER_AGGREGATE_STEPS=true
    • NCCL_PROFILER_TRACK_INTERPROCESS_PROXYOP=true
  • כדי להפעיל רמות מפורטות יותר של איסוף נתונים, צריך להגדיר את משתני הסביבה הבאים:
    • כדי לעקוב אחרי משך הזמן של פעולות שמתבצעות דרך שרת proxy, צריך להגדיר את NCCL_PROFILER_TRACK_PROXYOP=true.
    • כדי לעקוב אחרי הזמן שמוקדש לכל פעולת קלט/פלט ברשת, צריך להגדיר את NCCL_PROFILER_TRACK_STEPS=true. ההגדרה הזו מספקת את רמת הפירוט הגבוהה ביותר.

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

ייצוא נתונים לקובץ מקומי

כדי לראות את הנתונים הגולמיים, מייצאים אותם לקובץ מקומי. כדי לייצא את הנתונים לקובץ מקומי ולראות את הפלט, פועלים לפי השלבים הבאים:

  1. מגדירים את NCCL_TELEMETRY_MODE לערך 1 או 4. מידע על משתנה הסביבה NCCL_TELEMETRY_MODE זמין במאמר אפשרויות הגדרה.
  2. מגדירים אחת מנתיבי הייצוא הבאים:

    • מגדירים את NCCL_PROFILER_LATENCY_FILE=PATH לייצוא של עקבות מפורטים של אירועים לקובץ מקומי. מחליפים את PATH בנתיב כמו /tmp/latency-%p.txt.
    • מגדירים את NCCL_PROFILER_SUMMARY_FILE=PATH לייצוא של נתונים סטטיסטיים מסוכמים. מחליפים את PATH בנתיב כמו /tmp/summary-%p.txt.

      המערכת מחליפה את %p במזהה התהליך.

  3. בדקו את התוצאה. הפלט הגולמי הוא קובץ JSON.

אפשרויות להגדרות אישיות

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

הגדרת משתני סביבה של CoMMA

כדי להגדיר משתנה סביבה של CoMMA לערך שאינו ברירת המחדל, מגדירים משתני סביבה. אפשר להגדיר משתני סביבה בשורת הפקודה עבור מופע המחשוב או להוסיף אותם לסקריפט לטעינה בזמן ההפעלה. אם מגדירים את משתני הסביבה בשורת הפקודה, הערך נשמר רק לסשן הנוכחי. כדי שהמשתנים של סביבת העבודה יהיו קבועים, צריך להציב אותם בקובץ ~/.bashrc, בקובץ ~/.profile או בכל קובץ הפעלה אחר שבו מערכת ההפעלה משתמשת. מידע נוסף זמין במסמכי מערכת ההפעלה.

צריך להגדיר את משתני הסביבה של CoMMA לפני שהעומס מתחיל, כי העומס קורא את המשתנים במהלך האתחול של NCCL. אפשר להגדיר משתני סביבה באופן הבא:

export ENVIRONMENT_VARIABLE=VALUE

מחליפים את מה שכתוב בשדות הבאים:

  • ENVIRONMENT_VARIABLE: משתנה הסביבה שרוצים להגדיר. לדוגמה, NCCL_TELEMETRY_MODE.
  • VALUE: הערך של משתנה הסביבה, לדוגמה 0.

משתני סביבה של CoMMA

בקטע הזה מפורטים משתני הסביבה שאפשר להגדיר עבור CoMMA וערכי ברירת המחדל שלהם.

שם תיאור ברירת מחדל
NCCL_PROFILER_AGGREGATE_STEPS הפעלה (true) או השבתה (false) של צבירת פעולות של נתחי רשת. true
NCCL_PROFILER_GPUVIZ_LIB מציין את הנתיב אל libGPUViz.so, ספרייה שמעלה טלמטריה של NCCL לשירותי Google Cloud . הספרייה הזו היא wrapper ל-Agent Communication API. ממשק ה-API של תקשורת הסוכן הוא הממשק שסוכנים, כמו תהליכים שפועלים במערכת ההפעלה של האורח, משתמשים בו כדי ליצור חיבורים מאובטחים ואמינים עם Google Cloud שירותים.

אם אתם משתמשים בתמונה של NCCL gIB כקובץ התקנה או באחת מהתמונות שמצורף אליהן התוסף NCCL gIB, אתם לא צריכים להגדיר את משתנה הסביבה הזה.

NCCL_PROFILER_LATENCY_FILE מציינת את תבנית הנתיב לקובץ מעקב ההשהיה. לדוגמה, /tmp/latency-%p.txt. המערכת מחליפה את %p בשם במזהה התהליך (pid). ‫

כדי להשבית ייצוא מבוסס-קובץ, צריך לבטל את ההגדרה של המשתנה הזה.
NCCL_PROFILER_PLUGIN מציין את הנתיב לקובץ הבינארי של תוסף הפרופילר.

אם לא מציינים את ההגדרה הזו, NCCL מחפש את libnccl-profiler.so ב- LD_LIBRARY_PATH.
NCCL_PROFILER_SUMMARY_FILE מציין את הנתיב לקובץ הסיכום המצטבר. לדוגמה, /tmp/summary-%p.txt. המערכת מחליפה את %p בשם במזהה התהליך (pid).

כדי להשבית ייצוא מבוסס-קובץ, צריך לבטל את ההגדרה של המשתנה הזה.
NCCL_PROFILER_SUMMARY_INTERVAL מציינת את המרווח לדיווח סיכום. לדוגמה, 10s, 1m. תומך ב-d, ‏ h, ‏ m, ‏ s, ms, ‏ us, ‏ ns 1m
NCCL_PROFILER_TRACK_INTERPROCESS_PROXYOP הפעלה (true) או השבתה (false) של מעקב אחר פעולות פרוקסי של NCCL בין תהליכים. true
NCCL_PROFILER_TRACK_NCCLOP הפעלה (true) או השבתה (false) של מעקב ודיווח על פעולות NCCL, כולל תקשורת קולקטיבית ותקשורת ישירה. true
NCCL_PROFILER_TRACK_PROXYOP הפעלה (true) או השבתה (false) של מעקב ודיווח על פעולות שמתבצעות דרך שרת proxy. false
NCCL_PROFILER_TRACK_STEPS הפעלה (true) או השבתה (false) של מעקב ודיווח על פעולות של חלקי רשת. false
NCCL_TELEMETRY_MODE ההגדרה הזו קובעת את מיקום הייצוא של נתוני הטלמטריה של NCCL. האפשרויות כוללות את הפעולות הבאות:

ערך תיאור
0 השבתה של איסוף נתוני הטלמטריה של NCCL.
1 מייצא טלמטריה של NCCL לקובץ מקומי. בשיטה הזו, נתוני הטלמטריה של NCCL לא זמינים ל-Google.
3 ייצוא טלמטריה של NCCL לשירותי Google.
4 מייצא טלמטריה של NCCL לקובץ מקומי ולשירותי Google.
3

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