בדף הזה מוסבר איך ליצור מכונות 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 (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. עם זאת, אפשר גם להשתמש ב- Google Cloud console או ב-Compute Engine API כדי ליצור את המכונות הווירטואליות האלה. מידע נוסף על יצירת מכונות וירטואליות עם GPU זמין במאמר יצירת מכונה וירטואלית עם GPU מצורף.
A2 (A100)
לדוגמה, כדי ליצור מכונת VM עם רוחב פס מקסימלי של 100Gbps, עם שמונה כרטיסי A100 GPU מצורפים, שמשתמשת באימג' של
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)
לדוגמה, כדי ליצור מכונה וירטואלית עם רוחב פס מקסימלי של 100Gbps, עם שמונה יחידות GPU מסוג V100 שמצורפות אליה ועם שימוש בתמונה
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
-
אם אתם לא משתמשים בתמונות של מכונות וירטואליות ללמידה עמוקה עם תמיכה ב-GPU או במערכת הפעלה שמותאמת לקונטיינרים, אתם צריכים להתקין דרייברים של GPU. מידע נוסף זמין במאמר בנושא התקנת דרייברים של GPU.
אופציונלי: במכונה הווירטואלית, מתקינים את Fast Socket.
אחרי שמגדירים את ה-VM, אפשר לאמת את רוחב הפס של הרשת.
התקנת Fast Socket
ספריית התקשורת הקולקטיבית של NVIDIA (NCCL) נמצאת בשימוש במסגרות ללמידה עמוקה כמו TensorFlow, PyTorch ו-Horovod לאימון של כמה GPU ושל כמה צמתים.
Fast Socket הוא פרוטוקול העברת נתונים ברשת קנייני של Google ל-NCCL. ב-Compute Engine, Fast Socket משפר את הביצועים של NCCL ברשתות של 100Gbps על ידי צמצום התחרות בין כמה חיבורי TCP. מידע נוסף על עבודה עם NCCL זמין במדריך למשתמש של NCCL.
ההערכה הנוכחית מראה ש-Fast Socket משפר את קצב העברת הנתונים של פעולות all-reduce ב-30% עד 60%, בהתאם לגודל ההודעה.
כדי להגדיר סביבת Fast Socket, אפשר להשתמש בקובצי אימג' של מכונות וירטואליות ללמידה עמוקה שבהם 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 ......
בדיקת רוחב הפס של הרשת
בקטע הזה מוסבר איך לבדוק את רוחב הפס של הרשת עבור מופעי 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 לא מצליח להגיע למכונה הווירטואלית השנייה, יכול להיות שתצטרכו לשנות את הרשת או את הגדרות חומת האש במכונות הווירטואליות, או אולי במסוף Google Cloud .
כשמשתמשים ברוחב הפס המקסימלי הזמין של 100Gbps או 1000Gbps (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, הם איטיים יותר.
בגלל גורמים כמו תקורה של פרוטוקול ועומס ברשת, הביצועים מקצה לקצה של זרמי נתונים עשויים להיות נמוכים יותר.
כדי להשיג רוחב פס מקסימלי בין מכונות VM, צריך להשתמש בכמה זרמי TCP. Google ממליצה על 4 עד 16 זרמים. ב-16 זרימות, תהיה לכם אפשרות למקסם את קצב העברת הנתונים. יכול להיות שתצטרכו לשנות את ההגדרות של האפליקציה או של הקוד כדי להגדיר כמה זרמים, בהתאם לאפליקציה ולחבילת התוכנה שלכם.
מה השלב הבא?
- כדי לעקוב אחרי הביצועים של ה-GPU, אפשר לעיין במאמר מעקב אחרי הביצועים של ה-GPU.
- במאמר טיפול באירועי תחזוקה של מארחי GPU מוסבר איך לטפל בתחזוקה של מארחי GPU.