במאמר הזה מוסבר איך להריץ עומסי עבודה של מחשוב בעל ביצועים גבוהים (HPC) באשכולות Google Kubernetes Engine (GKE) שמשתמשים בסדרת המכונות H4D ובגישה ישירה לזיכרון מרחוק (RDMA).
H4D היא סדרת מכונות במשפחת המכונות שמותאמות לצריכת מעבד גבוהה ב-Compute Engine. סדרת המכונות מותאמת לביצועים גבוהים, לעלות נמוכה ולגמישות. H4D מתאים לאפליקציות שניתנות להרחבה על פני מספר צמתים. מכונות H4D שהוגדרו לשימוש ב-RDMA תומכות ברוחב פס של עד 200 Gbps ברשת בין הצמתים.
לפני שמתחילים
לפני שמתחילים, חשוב לוודא שביצעתם את הפעולות הבאות:
- מפעילים את ממשק ה-API של Google Kubernetes Engine. הפעלת Google Kubernetes Engine API
- אם רוצים להשתמש ב-CLI של Google Cloud למשימה הזו, צריך להתקין ואז להפעיל את ה-CLI של gcloud. אם התקנתם בעבר את ה-CLI של gcloud, מריצים את הפקודה
gcloud components updateכדי לקבל את הגרסה העדכנית. יכול להיות שגרסאות קודמות של ה-CLI של gcloud לא יתמכו בהרצת הפקודות שמופיעות במסמך הזה.
קבלת קיבולת למכונות וירטואליות מסוג H4D אחרי בחירת אפשרות צריכה. מומלץ להקצות משאבים בצפיפות למכונות וירטואליות מסוג H4D. הקצאת משאבים צפופה זמינה בחלק ממודלי ההקצאה של H4D, ומספקת לכם יכולות משופרות של ניהול אשכולות עבור קיבולת H4D. כדי לקבל קיבולת:
חשוב לוודא שאתם עומדים בדרישות הבאות לגבי גרסת GKE:
- משתמשים בגרסה GKE 1.32.6-gke.1060000 ואילך כדי ליצור מאגר צמתים עם מכונות וירטואליות מסוג H4D שהוזמנו מראש במצב GKE Standard.
משתמשים בגרסה 1.33.2-gke.4731000 ואילך של GKE כדי ליצור את הפריטים הבאים:
- צמתים מסוג H4D עם flex-start
- צמתים מסוג H4D עם Autopilot
- צמתים מסוג H4D עם cluster autoscaling באשכולות רגילים
- צמתים מסוג H4D עם הקצאת צמתים אוטומטית באשכולות רגילים
להשתמש רק במיקומים שבהם סוג המכונה H4D זמין. מידע נוסף מופיע בטבלה שבמאמר אזורים ותחומים זמינים, אחרי סינון לפי
H4D.שימוש רק בקובצי אימג' של צמתים של מערכת הפעלה שמותאמת לקונטיינרים.
כדאי לעיין במגבלות של H4D.
חשוב לעיין בהוראות לטיפול בתחזוקת המארח, כי סוגי המכונות H4D לא תומכים במיגרציה פעילה. מידע נוסף זמין במאמרים בנושא חוויית התחזוקה של מופעי H4D וניהול שיבושים בצמתי GKE שלא מתבצעת בהם העברה פעילה.
הגדרת אשכולות GKE ורשתות
אתם יכולים להשתמש ב-Cluster Toolkit כדי ליצור במהירות אשכול GKE שמוכן לייצור ומשתמש במכונות וירטואליות H4D שמוגבלות להזמנה. ההוראות ל-Cluster Toolkit בקטע הזה מתייחסות ל-GKE H4D Blueprint.
לחלופין, אפשר להשתמש ב-Google Cloud CLI כדי להגדיר את סביבת האשכול עם מכונות וירטואליות שמוגבלות להזמנה או עם מכונות וירטואליות מסוג Flex-start, וליהנות מגמישות מקסימלית.
Cluster Toolkit
מגדירים את Cluster Toolkit. מומלץ להשתמש ב-Cloud Shell לשם כך, כי יחסי התלות כבר מותקנים מראש ב-Cluster Toolkit.
משיגים את כתובת ה-IP של המחשב המארח שבו התקנתם את Cluster Toolkit:
curl ifconfig.meשומרים את כתובת ה-IP הזו כדי להשתמש בה במשתנה
IP_ADDRESSבשלב מאוחר יותר.יוצרים קטגוריה של Cloud Storage לאחסון המצב של פריסת Terraform:
gcloud storage buckets create gs://BUCKET_NAME \ --default-storage-class=STANDARD \ --project=PROJECT_ID \ --location=COMPUTE_REGION_TERRAFORM_STATE \ --uniform-bucket-level-access gcloud storage buckets update gs://BUCKET_NAME --versioningמחליפים את המשתנים הבאים:
-
BUCKET_NAME: השם של קטגוריית Cloud Storage החדשה. -
PROJECT_ID: מזהה הפרויקט ב- Google Cloud . -
COMPUTE_REGION_TERRAFORM_STATE: האזור של Compute שבו רוצים לאחסן את המצב של פריסת Terraform.
-
ב-
examples/gke-h4d/gke-h4d-deployment.yamlblueprint ממאגר GitHub, ממלאים את ההגדרות הבאות בקטעיםterraform_backend_defaultsו-varsבהתאם לערכים הספציפיים של הפריסה:-
DEPLOYMENT_NAME: שם ייחודי לפריסה, באורך של 6 עד 30 תווים. אם שם הפריסה לא ייחודי בפרויקט, יצירת האשכול נכשלת. ערך ברירת המחדל הואgke-h4d. -
BUCKET_NAME: השם של קטגוריית Cloud Storage שיצרתם בשלב הקודם. -
PROJECT_ID: מזהה הפרויקט ב- Google Cloud . -
COMPUTE_REGION: אזור החישוב של האשכול, שחייב להיות זהה לאזור שבו המכונות זמינות להזמנה. -
COMPUTE_ZONE: אזור החישוב של מאגר הצמתים של מכונות H4D. חשוב לשים לב שאזור הזמינות הזה צריך להיות זהה לאזור הזמינות שבו המכונות זמינות בהזמנה שלכם. -
NODE_COUNT: מספר הצמתים מסוג H4D באשכול. -
IP_ADDRESS/SUFFIX: טווח כתובות ה-IP שרוצים לאפשר להתחבר לאשכול. בלוק ה-CIDR הזה צריך לכלול את כתובת ה-IP של המכונה שבה רוצים להשתמש כדי להפעיל את Terraform. מידע נוסף זמין במאמר בנושא הסבר על רשתות מורשות. בשדה
reservation, משתמשים באחת מהאפשרויות הבאות, בהתאם לשאלה אם רוצים לטרגט בלוקים ספציפיים בהזמנה כשמבצעים הקצאה של מאגר הצמתים:- כדי למקם את מאגר הצמתים בכל מקום בהזמנה, צריך לציין את שם ההזמנה (
RESERVATION_NAME). כדי לטרגט בלוק ספציפי בהזמנה, משתמשים בשמות ההזמנה והבלוק בפורמט הבא:
RESERVATION_NAME/reservationBlocks/BLOCK_NAMEאם אתם לא יודעים אילו בלוקים זמינים בהזמנה שלכם, תוכלו לעיין במאמר בנושא הצגת טופולוגיה של הזמנה.
- כדי למקם את מאגר הצמתים בכל מקום בהזמנה, צריך לציין את שם ההזמנה (
-
יוצרים Application Default Credentials (ADC) כדי לספק גישה ל-Terraform. אם אתם משתמשים ב-Cloud Shell, אתם יכולים להריץ את הפקודה הבאה:
gcloud auth application-default loginפורסים את תוכנית ה-Blueprint כדי להקצות את התשתית של GKE באמצעות סוגי המכונות H4D:
./gcluster deploy -d examples/gke-h4d/gke-h4d-deployment.yaml examples/gke-h4d/gke-h4d.yamlכשמופיעה בקשה, בוחרים באפשרות (A)pply (החלה) כדי לפרוס את התוכנית.
בנוסף, תוכנית ה-Blueprint הזו מספקת מופע של Filestore ומקשרת אותו לאשכול GKE באמצעות Persistent Volume (PV). התוכנית הזו כוללת תבנית לדוגמה של משימה. בתבנית הזו מופעלת משימה מקבילית שקוראת נתונים מנפח האחסון המשותף הזה וכותבת נתונים אליו.
kubectl createמוצג בפלט של הפריסה, ואפשר להשתמש בו כדי להפעיל את המשימה לדוגמה.
Google Cloud CLI
מחליפים את הערכים הבאים בפקודות שבקטע הזה:
-
PROJECT_ID: מזהה הפרויקט ב- Google Cloud . -
CLUSTER_NAME: השם של האשכול. -
CONTROL_PLANE_LOCATION: המיקום של מישור הבקרה של האשכול ב-Compute Engine. מציינים אזור לאשכולות אזוריים או אזור זמין לאשכולות אזוריים. מומלץ להשתמש באשכולות אזוריים לעומסי עבודה בסביבת ייצור. במקרה של אשכולות אזוריים, האזור צריך לכלול אזור שבו יש זמינות של H4D. במקרה של אשכולות אזוריים, האזור צריך להיות זמין לשימוש ב-H4D. אם משתמשים בשמירת משאבים, האזור והתחום צריכים להיות זהים לאלה של שמירת המשאבים. -
COMPUTE_ZONE: האזור של מאגר הצמתים. האזור הזה חייב להיות אזור שבו זמין H4D. אם משתמשים בשמירת משאבים, האזור והתחום צריכים להיות זהים לאזור ולתחום של שמירת המשאבים. אי אפשר ליצור מאגר צמתים מרובה אזורים אם רוצים שהצמתים מסוג H4D יפעלו עם Cloud RDMA. -
RDMA_NETWORK_PREFIX: קידומת הרשת של RDMA (לדוגמה,h4d-rdma). -
RDMA_SUBNET_CIDR: טווח ה-CIDR של תת-הרשת של RDMA. מוודאים שהטווח הזה לא חופף לרשתות ברירת המחדל של האשכול. -
NODE_POOL_NAME: השם של מאגר הצמתים H4D. -
NODE_COUNT: מספר הצמתים מסוג H4D שייווצרו במאגר הצמתים. -
H4D_MACHINE_TYPE: סוג מכונת H4D לשימוש (לדוגמה,h4d-highmem-192-lssd).
כדי ליצור אשכול באמצעות ה-CLI של gcloud, פועלים לפי השלבים הבאים:
יצירת רשתות VPC ותת-רשתות: הגדרת ענן וירטואלי פרטי (VPC) ותת-רשת כברירת מחדל עבור האשכול. עבור כרטיס הרשת (NIC) של IRDMA, יוצרים VPC ותת-רשת ייעודיים. רשת ה-VPC שנוצרת באמצעות ההוראות הבאות משתמשת בפרופיל של רשת Falcon VPC, כנדרש.
יוצרים VPC לממשק הרשת IRDMA שמשתמש בפרוטוקול התעבורה RDMA over Falcon:
gcloud compute --project=PROJECT_ID \ networks create RDMA_NETWORK_PREFIX-net \ --network-profile=COMPUTE_ZONE-vpc-falcon \ --subnet-mode=customיוצרים תת-רשת לרשת ה-VPC של Falcon:
gcloud compute --project=PROJECT_ID \ networks subnets create \ RDMA_NETWORK_PREFIX-sub-0 \ --network=RDMA_NETWORK_PREFIX-net \ --region=CONTROL_PLANE_LOCATION \ --range=RDMA_SUBNET_CIDR
יצירת אשכול GKE עם רשתות מרובות: יוצרים את האשכול. אפשר גם להשתמש בפקודה הזו כדי לציין במפורש את טווחי ה-CIDR המשניים של השירותים וה-Pods.
מריצים את הפקודה הבאה:
gcloud container clusters create CLUSTER_NAME --project PROJECT_ID \ --enable-dataplane-v2 --enable-ip-alias --location=CONTROL_PLANE_LOCATION \ --enable-multi-networking \ [--services-ipv4-cidr=SERVICE_CIDR \ --cluster-ipv4-cidr=POD_CIDR]אם משתמשים בדגלים האופציונליים האלה, צריך להחליף את הערכים הנוספים הבאים:
-
SERVICE_CIDR: טווח ה-CIDR המשני לשירותים. -
POD_CIDR: טווח ה-CIDR המשני של ה-Pods.
כשמשתמשים בדגלים האלה, צריך לוודא שטווח ה-CIDR לא חופף לטווחים של רשתות משנה ברשתות צמתים נוספות. לדוגמה,
SERVICE_CIDR=10.65.0.0/19ו-POD_CIDR=10.64.0.0/19.-
יצירת אובייקטים של רשת GKE: מגדירים את רשת ה-VPC באמצעות קבוצות של פרמטרים של רשת GKE. החלת האובייקטים
GKENetworkParamSetו-Network:kubectl apply -f - <<EOF apiVersion: networking.gke.io/v1 kind: GKENetworkParamSet metadata: name: rdma-0 spec: vpc: RDMA_NETWORK_PREFIX-net vpcSubnet: RDMA_NETWORK_PREFIX-sub-0 deviceMode: RDMA --- apiVersion: networking.gke.io/v1 kind: Network metadata: name: rdma-0 spec: type: "Device" parametersRef: group: networking.gke.io kind: GKENetworkParamSet name: rdma-0 EOFיצירת מאגר צמתים מסוג H4D: יוצרים מאגר צמתים שמשתמש ב-H4D ומתחבר לרשת Falcon VPC. אפשר להשתמש בצמתי H4D שמוגבלים להזמנה ובמיקום קומפקטי. אפשר גם להשתמש בצמתי H4D שהוקצו עם flex-start. בוחרים את הכרטיסייה שמתאימה לאפשרות הצריכה שלכם:
הזמנה בלבד
יוצרים מדיניות משאבים למיקום קומפקטי. מיקום קומפקטי מבצע אופטימיזציה של הביצועים עבור עומסי עבודה של HPC עם צימוד הדוק – שפועלים בכמה צמתים – על ידי הבטחה שהצמתים ממוקמים פיזית ביחס זה לזה בתוך אזור.
מריצים את הפקודה הבאה:
gcloud compute resource-policies create group-placement POLICY_NAME \ --region REGION --collocation collocatedמחליפים את הערכים הבאים:
-
POLICY_NAME: השם של מדיניות המשאבים (לדוגמה,h4d-compact). -
REGION: האזור של האשכול.
-
יוצרים מאגר צמתים שמשתמש ב-H4D ומתחבר לרשת RDMA:
gcloud container node-pools create NODE_POOL_NAME --project PROJECT_ID \ --location=CONTROL_PLANE_LOCATION --cluster CLUSTER_NAME --num-nodes=NODE_COUNT \ --node-locations=COMPUTE_ZONE \ --machine-type H4D_MACHINE_TYPE \ --additional-node-network network=RDMA_NETWORK_PREFIX-net,subnetwork=RDMA_NETWORK_PREFIX-sub-0 \ --placement-policy POLICY_NAME \ --max-surge-upgrade 0 \ --max-unavailable-upgrade MAX_UNAVAILABLEמחליפים את
MAX_UNAVAILABLEבמספר המקסימלי של צמתים שיכולים להיות לא זמינים בו-זמנית במהלך שדרוג של מאגר צמתים. למיקום קומפקטי, מומלץ לבצע שדרוגים מהירים ללא עליות פתאומיות כדי להגדיל את הסיכוי למצוא צמתים במיקום משותף במהלך השדרוגים.
Flex-start
יוצרים מאגר צמתים שמשתמש בצמתים מסוג H4D שהוקצו באמצעות flex-start, ומתחבר לרשת Falcon VPC:
gcloud container node-pools create NODE_POOL_NAME --project PROJECT_ID \ --location=CONTROL_PLANE_LOCATION --cluster CLUSTER_NAME \ --node-locations=COMPUTE_ZONE \ --machine-type H4D_MACHINE_TYPE \ --additional-node-network network=RDMA_NETWORK_PREFIX-net,subnetwork=RDMA_NETWORK_PREFIX-sub-0 \ --flex-start --enable-autoscaling --reservation-affinity=none \ --min-nodes=0 --max-nodes=MAX_NODES --num-nodes=0מחליפים את
MAX_NODESבמספר המקסימלי של הצמתים שאליהם יתבצע שינוי גודל אוטומטי עבור מאגר הצמתים שצוין לכל אזור.
הכנת קובץ האימג' של Docker
מכינים את קובץ האימג' באמצעות קובץ Dockerfile לדוגמה:
FROM docker.io/rockylinux/rockylinux:8.10
RUN dnf -y install https://depot.ciq.com/public/download/ciq-sigcloud-next-8/ciq-sigcloud-next-8.x86_64/Packages/c/ciq-sigcloud-next-release-6-1.el8_10.cld_next.noarch.rpm
&& dnf -y update ciq-sigcloud-next-release
&& dnf clean all
RUN dnf install rdma-core libibverbs-utils librdmacm-utils infiniband-diags perftest -y
מידע נוסף על התמונות שתומכות ב-IRDMA זמין בכרטיסיות Interfaces בטבלאות שבמאמר פרטים על מערכת ההפעלה.
הגדרת קובצי המניפסט ל-RDMA
כדי להפעיל את Cloud RDMA, מוסיפים את ההערות הבאות למטא-נתונים של ה-Pod:
metadata:
annotations:
networking.gke.io/default-interface: 'eth0'
networking.gke.io/interfaces: |
[
{"interfaceName":"eth0","network":"default"},
{"interfaceName":"eth1","network":"rdma-0"},
]
בדיקת RDMA באמצעות rping
כדי לוודא שפונקציונליות Cloud RDMA פועלת, מריצים את הפקודה rping בין שרת לבין Pod של לקוח:
ב-Pod של השרת, מריצים את הפקודה
rping:rping -sב-Pod של הלקוח, מריצים את הפקודה
rping:rping -c -C 2 -d -a SERVER_IPמחליפים את
SERVER_IPבכתובת ה-IP של ה-Pod של השרת.אם הפעולה מצליחה, הפלט ייראה כך:
created cm_id 0x5b597bf94800 cma_event type RDMA_CM_EVENT_ADDR_RESOLVED cma_id 0x5b597bf94800 (parent) cma_event type RDMA_CM_EVENT_ROUTE_RESOLVED cma_id 0x5b597bf94800 (parent) rdma_resolve_addr - rdma_resolve_route successful created pd 0x5b597bf94fa0 created channel 0x5b597bf96830 created cq 0x5b597bf94ff0 created qp 0x5b597bf96c00 rping_setup_buffers called on cb 0x5b597bf8c820 allocated & registered buffers... cq_thread started. cma_event type RDMA_CM_EVENT_ESTABLISHED cma_id 0x5b597bf94800 (parent) ESTABLISHED rdma_connect successful RDMA addr 5b597bf8cd80 rkey dadac8c4 len 64 send completion recv completion RDMA addr 5b597bf8cff0 rkey 86ef015f len 64 send completion recv completion RDMA addr 5b597bf8cd80 rkey dadac8c4 len 64 send completion recv completion RDMA addr 5b597bf8cff0 rkey 86ef015f len 64 send completion recv completion rping_free_buffers called on cb 0x5b597bf8c820 destroy cm_id 0x5b597bf94800
המאמרים הבאים
- מידע נוסף על מחשוב בעל ביצועים גבוהים
- שיטות מומלצות להרצת עומסי עבודה של HPC ב-GKE
- חלק מעומסי העבודה של HPC דורשים ממשק להעברת הודעות (MPI) כדי להפעיל עומסי עבודה צמודים, מרובי צמתים עם RDMA. מידע נוסף על הגדרת MPI באשכול עבור צמתי H4D זמין במאמר בנושא הפעלת עומסי עבודה של MPI ב-GKE H4D.