בדף הזה מוסבר איך ליצור מכונות מסוג A2, G2 ו-N1 שמשתמשות ברוחבי פס גבוהים יותר ברשת. כדי ללמוד איך להשתמש ברוחבי פס גבוהים יותר ברשת עבור סדרות מכונות אחרות שעברו אופטימיזציה למאיצים, אפשר לעיין במאמר בנושא יצירת מכונות GPU עם רוחב פס גבוה.
אתם יכולים להשתמש ברוחבי פס גבוהים יותר ברשת, של 100 Gbps ומעלה, כדי לשפר את הביצועים של עומסי עבודה מבוזרים שפועלים במכונות וירטואליות עם GPU. רוחבי פס גבוהים יותר ברשת זמינים למכונות וירטואליות מסוג A2, G2 ו-N1 עם כרטיסי GPU מצורפים ב-Compute Engine, באופן הבא:
- במכונות וירטואליות למטרות כלליות מסוג N1 שמצורפות אליהן יחידות GPU מסוג T4 ו-V100, אפשר לקבל רוחב פס מקסימלי של עד 100 Gbps, בהתאם לשילוב של יחידות ה-GPU ומספר ה-vCPU.
- במכונות וירטואליות מסוג A2 ו-G2 שעברו אופטימיזציה להאצה, אפשר לקבל רוחב פס מקסימלי של עד 100 Gbps, בהתאם לסוג המכונה.
כדי לעיין בהגדרות או בסוגי המכונות שתומכים בשיעורי רוחב פס גבוהים יותר ברשת, אפשר לעיין במאמר רוחבי פס ברשת ו-GPU.
מידע כללי על רוחב פס ברשת ב-Compute Engine זמין במאמר בנושא רוחב פס ברשת.
סקירה כללית
כדי להשתמש ברוחבי הפס הגבוהים יותר ברשת שזמינים לכל מכונה וירטואלית עם GPU, צריך לבצע את השלבים המומלצים הבאים:
- יוצרים מכונה וירטואלית עם GPU באמצעות תמונת מערכת הפעלה שתומכת ב-Google Virtual NIC (gVNIC).
- אופציונלי: התקנת Fast Socket. התכונה Fast Socket משפרת את הביצועים של NCCL ברשתות של 100 Gbps ומעלה, כי היא מפחיתה את המחלוקת בין כמה חיבורי TCP. חלק מתמונות ה-VM של למידה עמוקה (DLVM) מגיעות עם Fast Socket מותקן מראש.
שימוש בתמונות VM של למידה עמוקה (Deep Learning)
אתם יכולים ליצור מכונות וירטואליות באמצעות כל תמונה נתמכת של GPU מהפרויקט Deep Learning VM Images. בכל תמונות ה-DLVM שנתמכות על ידי GPU, מותקנים מראש מנהל ההתקן של ה-GPU, תוכנת ה-ML ו-gVNIC. רשימת תמונות DLVM זמינה במאמר בחירת תמונה.
אם רוצים להשתמש ב-Fast Socket, אפשר לבחור תמונת DLVM כמו:
tf-latest-gpu-debian-10 או tf-latest-gpu-ubuntu-1804.
יצירת מכונות וירטואליות שמשתמשות ברוחבי פס גבוהים יותר ברשת
אם רוחב הפס של הרשת גבוה יותר, מומלץ להפעיל את Google Virtual NIC (gVNIC). מידע נוסף זמין במאמר בנושא שימוש בממשק רשת וירטואלי של Google.
כדי ליצור מכונה וירטואלית עם כרטיסי GPU מצורפים ורוחב פס רשת גבוה יותר, מבצעים את הפעולות הבאות:
- כדאי לעיין ברוחב הפס המרבי של הרשת שזמין לכל סוג מכונה עם כרטיסי GPU מצורפים.
יוצרים מכונה וירטואלית עם GPU. בדוגמאות הבאות מוצגות דרכים ליצור מכונות A2 ו-N1 עם מכונות VM מסוג V100 שמצורפות אליהן.
בדוגמאות האלה, מכונות וירטואליות נוצרות באמצעות Google Cloud CLI. עם זאת, אפשר גם להשתמש ב- Cloud de Confiance console או ב-Compute Engine API כדי ליצור את מכונות ה-VM האלה. מידע נוסף על יצירת מכונות וירטואליות עם GPU זמין במאמר יצירת מכונה וירטואלית עם GPU מצורף.
A2 (A100)
לדוגמה, כדי ליצור מכונת VM עם רוחב פס מקסימלי של 100 Gbps, עם שמונה יחידות GPU מסוג A100 שמחוברות אליה, ועם שימוש באימג' של
tf-latest-gpuDLVM, מריצים את הפקודה הבאה:gcloud compute instances create VM_NAME \ --project=PROJECT_ID \ --zone=ZONE \ --machine-type=a2-highgpu-8g \ --maintenance-policy=TERMINATE --restart-on-failure \ --image-family=tf-latest-gpu \ --image-project=deeplearning-platform-release \ --boot-disk-size=200GB \ --network-interface=nic-type=GVNIC \ --metadata="install-nvidia-driver=True,proxy-mode=project_editors" \ --scopes=https://www.googleapis.com/auth/cloud-platform
מחליפים את מה שכתוב בשדות הבאים:
-
VM_NAME: השם של מכונת ה-VM -
PROJECT_ID: מזהה הפרויקט -
ZONE: האזור של המכונה הווירטואלית. באזור הזה צריכה להיות תמיכה בסוג ה-GPU שצוין. מידע נוסף על אזורים זמין במאמר זמינות של אזורים ושל אזורים גיאוגרפיים של GPU.
N1 (V100)
לדוגמה, כדי ליצור מכונה וירטואלית עם רוחב פס מקסימלי של 100 Gbps, עם שמונה כרטיסי V100 GPU שמצורפים אליה ועם שימוש בתמונה
tf-latest-gpuDLVM, מריצים את הפקודה הבאה:gcloud compute instances create VM_NAME \ --project PROJECT_ID \ --custom-cpu 96 \ --custom-memory 624 \ --image-project=deeplearning-platform-release \ --image-family=tf-latest-gpu \ --accelerator type=nvidia-tesla-v100,count=8 \ --maintenance-policy TERMINATE \ --metadata="install-nvidia-driver=True" \ --boot-disk-size 200GB \ --network-interface=nic-type=GVNIC \ --zone=ZONE
-
אם אתם לא משתמשים בתמונות VM של למידה עמוקה (Deep Learning) עם תמיכה ב-GPU או במערכת הפעלה שמותאמת לקונטיינרים, התקינו דרייברים של GPU. מידע נוסף זמין במאמר בנושא התקנת דרייברים של GPU.
אופציונלי: במכונה הווירטואלית, מתקינים את Fast Socket.
אחרי שמגדירים את ה-VM, אפשר לאמת את רוחב הפס של הרשת.
התקנת Fast Socket
ספריית התקשורת הקולקטיבית של NVIDIA (NCCL) נמצאת בשימוש במסגרות למידה עמוקה כמו TensorFlow, PyTorch ו-Horovod לאימון עם כמה GPU וכמה צמתים.
Fast Socket הוא פרוטוקול העברת נתונים ברשת קנייני של Google ל-NCCL. ב-Compute Engine, Fast Socket משפר את הביצועים של NCCL ברשתות של 100 Gbps על ידי צמצום התחרות בין כמה חיבורי TCP. מידע נוסף על עבודה עם NCCL זמין במדריך למשתמש של NCCL.
ההערכה הנוכחית מראה ש-Fast Socket משפר את קצב העברת הנתונים של פעולת all-reduce ב-30% עד 60%, בהתאם לגודל ההודעה.
כדי להגדיר סביבת Fast Socket, אפשר להשתמש ב-Deep Learning VM Images שמותקן בה Fast Socket מראש, או להתקין את Fast Socket באופן ידני במכונת Linux וירטואלית. כדי לבדוק אם Fast Socket מותקן מראש, אפשר לעיין במאמר בנושא אימות ההפעלה של Fast Socket.
לפני שמתקינים את Fast Socket במכונת Linux וירטואלית, צריך להתקין את NCCL. הוראות מפורטות זמינות במסמכי NVIDIA NCCL.
CentOS/RHEL
כדי להוריד ולהתקין את Fast Socket במכונה וירטואלית של CentOS או RHEL:
מוסיפים את מאגר החבילות ומייבאים מפתחות ציבוריים.
sudo tee /etc/yum.repos.d/google-fast-socket.repo << EOM [google-fast-socket] name=Fast Socket Transport for NCCL baseurl=https://packages.cloud.google.com/yum/repos/google-fast-socket enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg EOMמתקינים את Fast Socket.
sudo yum install google-fast-socket
מוודאים שהאפשרות Fast Socket מופעלת.
SLES
כדי להוריד ולהתקין את Fast Socket במכונה וירטואלית של SLES, מבצעים את השלבים הבאים:
מוסיפים את מאגר החבילות.
sudo zypper addrepo https://packages.cloud.google.com/yum/repos/google-fast-socket google-fast-socket
מוסיפים מפתחות מאגר.
sudo rpm --import https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
מתקינים את Fast Socket.
sudo zypper install google-fast-socket
מוודאים שהאפשרות Fast Socket מופעלת.
Debian/Ubuntu
כדי להוריד ולהתקין את Fast Socket במכונת VM של Debian או Ubuntu, מבצעים את השלבים הבאים:
מתקינים את מפתח ה-GPG של המאגר הציבורי ב-
/etc/apt/keyrings:sudo curl https://packages.cloud.google.com/apt/doc/apt-key.gpg -o /etc/apt/keyrings/google-fast-socket-keyring.gpg
מוסיפים את מאגר החבילות:
echo "deb [signed-by=/etc/apt/keyrings/google-fast-socket-keyring.gpg] https://packages.cloud.google.com/apt google-fast-socket main" | sudo tee /etc/apt/sources.list.d/google-fast-socket.list
מתקינים את Fast Socket.
sudo apt update && sudo apt install google-fast-socket
מוודאים שהאפשרות Fast Socket מופעלת.
איך מוודאים ש-Fast Socket מופעל
במכונה הווירטואלית, מבצעים את השלבים הבאים:
מחפשים את ספריית הבית של NCCL.
sudo ldconfig -p | grep nccl
לדוגמה, בתמונה של DLVM, הפלט שמתקבל הוא:
libnccl.so.2 (libc6,x86-64) => /usr/local/nccl2/lib/libnccl.so.2 libnccl.so (libc6,x86-64) => /usr/local/nccl2/lib/libnccl.so libnccl-net.so (libc6,x86-64) => /usr/local/nccl2/lib/libnccl-net.so
הערך הזה מציין שספריית הבית של NCCL היא
/usr/local/nccl2.בודקים ש-NCCL טוען את הפלאגין Fast Socket. כדי לבדוק, צריך להוריד את חבילת הבדיקה של NCCL. כדי להוריד את חבילת הבדיקה, מריצים את הפקודה הבאה:
git clone https://github.com/NVIDIA/nccl-tests.git && \ cd nccl-tests && make NCCL_HOME=NCCL_HOME_DIRECTORY
מחליפים את
NCCL_HOME_DIRECTORYבספריית הבית של NCCL.מהספרייה
nccl-tests, מריצים את התהליךall_reduce_perf:NCCL_DEBUG=INFO build/all_reduce_perf
אם Fast Socket מופעל, ההודעה
FastSocket plugin initializedמוצגת ביומן הפלט.# nThread 1 nGpus 1 minBytes 33554432 maxBytes 33554432 step: 1048576(bytes) warmup iters: 5 iters: 20 validation: 1 # # Using devices # Rank 0 Pid 63324 on fast-socket-gpu device 0 [0x00] Tesla V100-SXM2-16GB ..... fast-socket-gpu:63324:63324 [0] NCCL INFO NET/FastSocket : Flow placement enabled. fast-socket-gpu:63324:63324 [0] NCCL INFO NET/FastSocket : queue skip: 0 fast-socket-gpu:63324:63324 [0] NCCL INFO NET/FastSocket : Using [0]ens12:10.240.0.24 fast-socket-gpu:63324:63324 [0] NCCL INFO NET/FastSocket plugin initialized ......
השוואת הביצועים של קמפיינים עם יעד עלות להמרה
כשמבצעים אופטימיזציה של ביצועי GPU לעומסי עבודה מבוזרים, חשוב לבצע השוואה בין ביצועים של NVIDIA Collective Communications Library (NCCL). הביצועים של NCCL נמדדים לפי רוחב פס של האוטובוס (busbw), בדרך כלל באמצעות בדיקת all_reduce_perf.
ביצועים צפויים של NCCL במכונות וירטואליות מסוג A3 High ו-A3 Mega
בטבלה הבאה מפורטים מדדי רוחב הפס הצפויים של NCCL bus למכונות וירטואליות מסוג A3 High ו-A3 Mega בבדיקה של שני צמתים שבהם גודל ההודעה הוא 1GB עד 8GB.
| סוג המכונה | מספר הצמתים | רוחב פס צפוי של האוטובוס (GBps) all_reduce_perf |
|---|---|---|
| A3 High | 2 | > 80 GBps |
| A3+ Mega | 2 | > 160 GBps |
ככל שמוסיפים עוד מכונות וירטואליות לפעולה הקולקטיבית, רוחב הפס של האוטובוס בדרך כלל יורד. לדוגמה, יכול להיות שקלאסטר A3+ עם 4 צמתים ישיג מהירות של 130-140 GBps.
הרצת בדיקת ביצועים של NCCL all-reduce
כדי להריץ את מדד ההשוואה all_reduce_perf בכמה צמתים, משתמשים ב-mpirun.
צריך לוודא שמתקיימות הדרישות המוקדמות הבאות:
- בכל צומת, מורידים ומקמפלים את
nccl-tests. מידע נוסף זמין במאמר בנושא אימות ההפעלה של Fast Socket. - יוצרים
hostfile, מפרטים את הצמתים ומציינים 8 יחידות GPU לכל צומת.
קובץ hostfile הוא קובץ טקסט שמציין ל-
mpirunאילו צמתים להשתמש וכמה תהליכים להריץ בכל צומת. כדי ליצור קובץ כזה, יוצרים קובץ טקסט בספריית העבודה שבו מפורט כל צומת בשורה נפרדת, עם שם המארח או כתובת ה-IP, ואחריהםslots=8. לדוגמה, כדי ליצור קובץ host בשםmy-hostfileלצמתיםnode-1ו-node-2, מוסיפים את השורות הבאות לקובץmy-hostfile:node-1 slots=8 node-2 slots=8
- בכל צומת, מורידים ומקמפלים את
מריצים את הבדיקה. הפקודה הבאה מריצה את הבדיקה
all-reduce-perfבשני צמתים, עם 16 תהליכים בסך הכול.mpirun -x LD_LIBRARY_PATH --hostfile HOSTFILE_NAME \ -n 16 ./build/all_reduce_perf -b 1G -e 8G -f 2 -g 8
מחליפים את
HOSTFILE_NAMEבשם שלhostfileשיצרתם בשלב הקודם. לדוגמה,my-hostfile.-
-n 16: המספר הכולל של תהליכי MPI, שמחושב כמספר הצמתים כפול מספר יחידות ה-GPU לכל צומת. -
-b 1G -e 8G: טווח גדלים להודעה. -
-f 2: מכפיל לגודל ההודעה בכל שלב. -
-g 8: מספר יחידות ה-GPU לכל תהליך.
-
בדיקת רוחב הפס של הרשת
בקטע הזה מוסבר איך לבדוק את רוחב הפס של הרשת עבור מכונות וירטואליות מסוג A3 Mega, A3 High, A3 Edge, A2, G2 ו-N1. כשעובדים עם יחידות GPU עם רוחב פס גבוה, אפשר להשתמש בכלי לתעבורת נתונים ברשת, כמו iperf2, כדי למדוד את רוחב הפס של הרשת.
כדי לבדוק את מהירויות רוחב הפס, צריך לפחות שני מכונות וירטואליות עם כרטיסי GPU מצורפים, ששתיהן יכולות לתמוך במהירות רוחב הפס שאתם בודקים.
אפשר להשתמש ב-iPerf כדי לבצע את ההשוואה במערכות מבוססות Debian.
יוצרים שתי מכונות וירטואליות שיכולות לתמוך במהירויות רוחב הפס הנדרשות.
אחרי ששתי המכונות הווירטואליות פועלות, משתמשים ב-SSH כדי להתחבר לאחת מהן.
gcloud compute ssh VM_NAME \ --project=PROJECT_IDמחליפים את מה שכתוב בשדות הבאים:
-
VM_NAME: השם של המכונה הווירטואלית הראשונה -
PROJECT_ID: מזהה הפרויקט
-
במכונה הווירטואלית הראשונה, מבצעים את השלבים הבאים:
מתקינים את
iperf.sudo apt-get update && sudo apt-get install iperf
מקבלים את כתובת ה-IP הפנימית של המכונה הווירטואלית. כדאי לרשום את זה כדי לעקוב.
ip a
מפעילים את שרת iPerf.
iperf -s
הפעולה הזו מפעילה שרת שמקשיב לחיבורים כדי לבצע את הבדיקה. משאירים את התהליך הזה פועל למשך הבדיקה.
מטרמינל לקוח חדש, מתחברים למכונה הווירטואלית השנייה באמצעות SSH.
gcloud compute ssh VM_NAME \ --project=PROJECT_ID
מחליפים את מה שכתוב בשדות הבאים:
-
VM_NAME: השם של המכונה הווירטואלית השנייה -
PROJECT_ID: מזהה הפרויקט
-
במכונה הווירטואלית השנייה, מבצעים את השלבים הבאים:
מתקינים את iPerf.
sudo apt-get update && sudo apt-get install iperf
מריצים את בדיקת iperf ומציינים את כתובת ה-IP של המכונה הווירטואלית הראשונה כיעד.
iperf -t 30 -c internal_ip_of_instance_1 -P 16
הפקודה הזו מפעילה בדיקה שנמשכת 30 שניות ומפיקה תוצאה שדומה לפלט הבא. אם iPerf לא מצליח להגיע למכונה הווירטואלית השנייה, יכול להיות שתצטרכו לשנות את הרשת או את הגדרות חומת האש במכונות הווירטואליות או במסוף Cloud de Confiance .
כשמשתמשים ברוחב הפס המקסימלי הזמין של 100 Gbps או 1,000 Gbps (A3 Mega, A3 High או A3 Edge), חשוב לזכור את הנקודות הבאות:
בגלל התקורה של כותרות חבילות בפרוטוקולים של רשתות כמו Ethernet, IP ו-TCP במערך הווירטואליזציה, קצב העברת הנתונים, כפי שנמדד על ידי
netperf, מגיע לרוויה בסביבות 90 Gbps או 800 Gbps (A3 Mega, A3 High או A3 Edge). המדד הזה נקרא בדרך כלל goodput.פרוטוקול TCP יכול להשיג מהירות רשת של 100 או 1,000 Gbps. פרוטוקולים אחרים, כמו UDP, הם איטיים יותר.
בגלל גורמים כמו תקורה של פרוטוקולים ועומס ברשת, הביצועים מקצה לקצה של זרמי נתונים עשויים להיות נמוכים יותר.
כדי להשיג רוחב פס מקסימלי בין מכונות וירטואליות, צריך להשתמש בכמה זרמי TCP. Google ממליצה על 4 עד 16 זרמים. ב-16 זרימות, תהיה לכם אפשרות למקסם את קצב העברת הנתונים. בהתאם לאפליקציה ולחבילת התוכנה, יכול להיות שתצטרכו לשנות את ההגדרות של האפליקציה או של הקוד כדי להגדיר כמה זרמים.
מה השלב הבא?
- כדי לעקוב אחרי הביצועים של ה-GPU, אפשר לעיין במאמר מעקב אחרי הביצועים של ה-GPU.
- במאמר טיפול באירועי תחזוקה של מארחי GPU מוסבר איך לטפל בתחזוקה של מארחי GPU.