בחירת הגדרת האחסון הנכונה היא קריטית לביצועים וליציבות של אשכול האימון. השירות משתלב עם שני פתרונות אחסון נפרדים בעלי ביצועים גבוהים:
- Filestore: שירות חובה לניהול קבצים שמספק את ספריות
/homeהמשותפות לכל הצמתים באשכול. - Google Cloud Managed Lustre: מערכת קבצים מקבילה אופציונלית שמיועדת לביצועי קלט/פלט (I/O) גבוהים במיוחד, ומתאימה לאימון על מערכי נתונים גדולים. התייחסו אליו כאל אחסון עבודה עם ביצועים גבוהים ולא כאל מערכת של רשומות, והשאירו את Cloud Storage כמקור המהימנות שלכם. מידע נוסף זמין במאמר גיבוי נתונים של Managed Lustre ב-Cloud Storage.
בדף הזה מוסבר איך משתמשים בהם, ומהן הדרישות הספציפיות לרשת ולפריסה כדי לשלב אותם באשכול.
שילוב אחסון לאשכולות אימון
אשכולות האימון של Gemini Enterprise Agent Platform מסתמכים על פתרונות אחסון ספציפיים ברשת כדי לפעול. Filestore נדרש כדי לספק את ספריות /home המשותפות לאשכול, ו-Managed Lustre היא מערכת קבצים אופציונלית עם ביצועים גבוהים לעומסי עבודה תובעניים.
חשוב להגדיר נכון את הרשת של שירותי האחסון האלה לפני פריסת האשכול.
Filestore לספריות בית
השירות הזה משתמש במכונה של Filestore כדי לספק את הספרייה המשותפת /home לאשכול. כדי לוודא שהקישוריות תקינה, צריך ליצור את משאבי הענן בסדר הספציפי הזה:
- יצירת רשת VPC: קודם פורסים רשת VPC שמוגדרת עם ה-MTU המומלץ (לדוגמה, 8896).
- יצירת מכונה של Filestore: פורסים את המכונה של Filestore ב-VPC שיצרתם.
- יוצרים את אשכול האימון: לבסוף, פורסים את האשכול, שיוכל להתחבר למכונה של Filestore באותה רשת.
Google Cloud Managed Lustre לעומסי עבודה עם ביצועים גבוהים
לעומסי עבודה שדורשים ביצועי קלט/פלט מקסימליים, אפשר לצרף מערכת קבצים של Managed Lustre. השירות הזה מתחבר ל-VPC באמצעות גישה לשירותים פרטיים.
Managed Lustre מותאם לקצב העברת נתונים ולא לעמידות. מופע הוא אזורי, ואין לו יכולת ליצור קובץ snapshot, גיבוי או ביטול מחיקה. לגבות ב-Cloud Storage כל מה שאי אפשר ליצור מחדש. מידע נוסף מופיע במאמר גיבוי נתונים של Managed Lustre ב-Cloud Storage.
גיבוי נתונים של Managed Lustre ב-Cloud Storage
להשאיר את Cloud Storage כמקור האמת של Managed Lustre. כך תוכלו להגן על נקודות השמירה ולשחזר במהירות אם מכונה וירטואלית נכשלת או נמחקת.
Managed Lustre כולל העברה מובנית עם קצב נתונים גבוה, שמייצאת ישירות ל-Cloud Storage. ההעברות הן מצטברות: בכל הפעלה מועתקים רק הקבצים שלא קיימים ביעד, או שהשתנו מאז ההעברה האחרונה.
שתי זהויות צריכות הרשאות. לחשבון המשתמש או לחשבון השירות שמפעיל את הייצוא צריכה להיות ההרשאה lustre.instances.exportData, שכלולה בתפקיד roles/lustre.admin או שאפשר להעניק באמצעות תפקיד בהתאמה אישית. לסוכן השירות של Managed Lustre צריכה להיות גישת כתיבה נפרדת לקטגוריית היעד.
נותנים לסוכן השירות של Managed Lustre גישת כתיבה לקטגוריית היעד. צריך לעשות את זה רק פעם אחת לכל קטגוריה:
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-lustre.iam.gserviceaccount.com \ --role=roles/storage.objectUserכאשר:
- BUCKET_NAME היא קטגוריית היעד.
- PROJECT_NUMBER הוא מספר הפרויקט שמכיל את המכונה של Managed Lustre. מידע נוסף זמין במאמר הרשאות לסוכן השירות של Managed Lustre.
מייצאים את מערכת הקבצים לקטגוריה:
gcloud lustre instances export-data INSTANCE_ID \ --location=ZONE \ --lustre-path="/" \ --gcs-path-uri="gs://BUCKET_NAME/INSTANCE_ID/"כאשר:
- INSTANCE_ID הוא השם של המכונה ב-Managed Lustre שרוצים לגבות.
- ZONE: האזור של המכונה, למשל
us-central1-a.
הערך של
--gcs-path-uriיכול להיות קטגוריה בפני עצמה, או נתיב בתוך קטגוריה. אם כוללים נתיב, הוא חייב להסתיים בלוכסן. כדי להפריד בין המכונות, צריך לייצא כל מכונה לנתיב שנקרא על שמה: אם מחברים יותר ממכונה אחת של Managed Lustre לאשכול, צריך לתת לכל אחת נתיב משלה, כי שתי מכונות שמייצאות לאותו נתיב מחליפות את הקבצים זו של זו.
כדי שהגיבוי יהיה עדכני, צריך להריץ את הייצוא לפי לוח זמנים. לדוגמה, אפשר להריץ משימת cron יומית בצומת התחברות במקום להריץ אותה רק בסוף הרצת האימון. ההעברות הן מצטברות, ולכן בכל הפעלה אחרי ההפעלה הראשונה מועתקים רק השינויים.
כשמתכננים גיבוי, כדאי להביא בחשבון את הנקודות הבאות:
- בכל מכונה, רק פעולת העברה אחת יכולה להיות פעילה בכל פעם. אם מתחילים העברה בזמן שהעברה אחרת עדיין פועלת, ההעברה נכשלת עם השגיאה
ABORTED: unable to queue the operation. - הייצוא אף פעם לא מוחק אובייקטים מהיעד, כך שקובץ שאתם מוחקים ב-Managed Lustre נשאר בקטגוריה. מפעילים את ניהול הגרסאות של האובייקטים בקטגוריית היעד, כדי שתוכלו לשחזר גם קובץ שהוחלף בתוכן לא רצוי.
- קישורים סמליים, ספריות ריקות ופריסות של חלוקה לרצועות שמוגדרות באמצעות
lfs setstripeלא נשמרים, וקישורים קשיחים מיוצאים כאובייקטים נפרדים, כך שקובץ עם קישור קשיח תופס מקום פעם אחת לכל קישור בקטגוריה. POSIX UID, GID, מצב ו-mtime נשמרים כמטא-נתונים של אובייקט בהתאמה אישית. - כתיבת נקודות ביקורת באופן אטומי – כתיבה לנתיב זמני, ואז שינוי שם הקובץ למקום – כך שייצוא שפועל במהלך כתיבה מתעד את הקובץ הקודם או את הקובץ החדש המלא, ולא קובץ חלקי.
כדי לשחזר, יוצרים מכונה חדשה של Managed Lustre וטוענים את הנתונים בחזרה באמצעות gcloud lustre instances import-data. מידע נוסף זמין במאמר העברת נתונים אל Cloud Storage וממנו.
מגבלה קריטית ברשת: אין קישור טרנזיטיבי בין רשתות שכנות (peering)
מגבלה קריטית גם ב-Filestore וגם ב-Google Cloud Managed Lustre היא שהם לא תומכים בקישור טרנזיטיבי בין רשתות שכנות (Peering). כלומר, רק משאבים ב-VPC שמחובר ישירות יכולים לגשת לשירות האחסון. לדוגמה, אם ה-VPC של האשכול (N1) מקושר לשירות האחסון, ל-VPC אחר (N2) שמקושר ל-N1 לא תהיה גישה.
שילוב אחסון לאשכולות אימון
אשכולות האימון של Gemini Enterprise Agent Platform מסתמכים על פתרונות אחסון ספציפיים ברשת לצורך הפעולה שלהם. צריך את Filestore כדי לספק את ספריות /home המשותפות לאשכול, ו-Google Cloud Managed Lustre היא מערכת קבצים אופציונלית עם ביצועים גבוהים לעומסי עבודה תובעניים.
חשוב להגדיר נכון את הרשת של שירותי האחסון האלה לפני פריסת האשכול.
Filestore
שימושים עיקריים ב-Filestore עם אשכולות אימון
בנוסף לתפקיד של Filestore כספריית הבית שחובה להשתמש בה, הוא גם מספק דרך גמישה לשתף נתונים משותפים עם האשכול.נפח אחסון משותף נוסף: אתם יכולים לצרף מכונה אחת או יותר של Filestore לכל מאגר צמתים.
האפשרות הזו שימושית כשרוצים לספק למשימות האימון מערכי נתונים משותפים, קובצי אפליקציות בינאריים או קבצים נפוצים אחרים. כשמציינים את זה בהגדרות של מאגר הצמתים, אשכולות האימון מחברים באופן אוטומטי את המכונות האלה לספרייה /mnt/filestore בכל צומת.
דרישות לגבי Filestore
כדי לשלב בהצלחה את Filestore עם אשכולות אימון, צריך להגדיר את הדברים הבאים:
- הפעלת ה-API: צריך להפעיל את Filestore API בפרויקט בענן ב-Google Cloud לפני שיוצרים את האשכול.
- ספריית
/homeחובה: כל אשכול אימון דורש מכונה ייעודית של Filestore שתשמש כספריית/homeהמשותפת. למכונה הזו יש דרישות הגדרה ספציפיות:- רשת: צריכה להיות באותה רשת VPC כמו צומתי המחשוב וצומתי ההתחברות של האשכול.
- מיקום: צריך להיות באותו אזור או באותו אזור זמין כמו האשכול.
- הגדרה: כשיוצרים את האשכול באמצעות ה-API, צריך לציין את שם המשאב המלא של המכונה הזו בשדה
.orchestrator_spec.slurm_spec.home_directory_storage
הגדרת אחסון ב-Filestore
יוצרים מכונה אזורית של Filestore באזור שבו רוצים ליצור את האשכול. כדי להשתמש ב-Agent Platform API, צריך לצרף Filestore לאשכול שישמש כספרייה /home.
מופע Filestore צריך להיות באותו אזור או תחום ובאותה רשת כמו כל צומתי המחשוב וצומתי ההתחברות. בדוגמה הבאה, טווח הכתובות 172.16.10.0/24 משמש לפריסה של Filestore.
SERVICE_TIER=ZONAL # Can use BASIC_SSD # Create reserved IP address range gcloud compute addresses create CLUSTER_IDfs-ip-range \ --project=PROJECT_ID \ --global \ --purpose=VPC_PEERING \ --addresses=172.16.10.0 \ --prefix-length=24 \ --description="Filestore instance reserved IP range" \ --network=NETWORK # Get the CIDR range FS_IP_RANGE=$( gcloud compute addresses describe CLUSTER_IDfs-ip-range \ --global \ --format="value[separator=/](address, prefixLength)" ) # Create the Filestore instance gcloud filestore instances create FS_INSTANCE_ID \ --project=PROJECT_ID \ --location=ZONE \ --tier=ZONAL \ --file-share=name="nfsshare",capacity=1024 \ --network=name=NETWORK,connect-mode=DIRECT_PEERING,reserved-ip-range="${FS_IP_RANGE}"
Lustre
Google Cloud Managed Lustre היא מערכת קבצים מקבילה, מנוהלת ובעלת ביצועים גבוהים, שמותאמת לאפליקציות של AI ו-HPC. עם קיבולת של כמה פטה-בייטים וקצב העברת נתונים של עד 1TBps, Managed Lustre מאפשר להעביר לענן עומסי עבודה כבדים.
מכונות Managed Lustre נמצאות באזורים בתוך מחוזות. אזור הוא מיקום גיאוגרפי ספציפי שבו אפשר להשתמש במשאבים. כל אזור מחולק לכמה תחומים. לדוגמה, האזור us-central1 במרכז ארצות הברית מכיל את התחומים us-central1-a, us-central1-b, us-central1-c ו-us-central1-f. מידע נוסף זמין בקטע מיקום גיאוגרפי ואזורים.
כדי לצמצם את זמן האחזור ברשת, מומלץ ליצור מכונה של Managed Lustre באזור ובאזור זמין שקרובים למקום שבו אתם מתכננים להשתמש בה.
כשיוצרים מכונה של Managed Lustre, צריך להגדיר את המאפיינים הבאים:
- שם המכונה שמשמשת את Google Cloud.
- השם של מערכת הקבצים שמשמשת את הכלים בצד הלקוח, לדוגמה
lfs. - נפח האחסון בגיביבייט (GiB). הקיבולת יכולה להיות בין 9,000GiB ל-~8PiB (7,632,000GiB). הגודל המקסימלי של מכונה תלוי ברמת הביצועים שלה.
- ב-Managed Lustre יש רמות ביצועים שנעות בין 125MBps ל-TiB ל-1,000MBps ל-TiB.
- כדי לקבל את הביצועים הכי טובים, כדאי ליצור את המכונה באותו אזור שבו נמצא אשכול האימון.
- רשת ה-VPC של המכונה הזו צריכה להיות זהה לרשת שבה משתמש אשכול האימון.
ב-Managed Lustre יש 4 רמות ביצועים, ולכל אחת מהן יש מהירות תפוקה מקסימלית שונה ל-TiB. רמות הביצועים משפיעות גם על הגודל המינימלי והמקסימלי של המכונה, ועל גודל השלב בין ערכי הקיבולת הקבילים. אי אפשר לשנות את רמת הביצועים של מכונה אחרי שהיא נוצרה.
כדי לפרוס את Managed Lustre צריך גישה לשירותים פרטיים, שיוצרת קישור בין רשתות VPC שכנות (peering) בין ה-VPC של אשכול האימון לבין ה-VPC שמארח את Managed Lustre, באמצעות רשת משנה ייעודית של /20.
הגדרת מכונה של Managed Lustre (אופציונלי)
אתם צריכים להשתמש ב-Google Cloud Managed Lustre רק אם אתם רוצים להשתמש ב-Managed Lustre ב-Model Development Service.
Google Cloud Managed Lustre הוא שירות מנוהל של מערכת קבצים מקבילה עם ביצועים גבוהים ב-Google Cloud. הוא תוכנן במיוחד כדי להאיץ עומסי עבודה תובעניים ב-AI, בלמידת מכונה ובמחשוב עתיר ביצועים (HPC).
כדי להשיג ביצועים אופטימליים כשמשתמשים באשכולות אימון, צריך לפרוס את Google Cloud Managed Lustre מאותו VPC ואותו אזור כמו אשכול האימון, באמצעות קישור VPC בין רשתות שכנות (peering) לרשתות שירותים.
יצירת מכונה של Lustre
gcloud lustre instances create LUSTRE_INSTANCE_ID \
--project=PROJECT_ID \
--location=ZONE \
--filesystem=lustrefs \
--per-unit-storage-throughput=500 \
--capacity-gib=36000 \
--network=NETWORK_NAME
טעינת Cloud Storage
כדרישה מוקדמת, ודאו שלחשבון השירות של ה-VM יש את התפקיד Storage Object User.
התקנה כברירת מחדל
אשכולות האימון של Gemini Enterprise Agent Platform משתמשים ב-Cloud Storage FUSE כדי לטעון באופן דינמי את הקטגוריות של Cloud Storage בכל צומתי ההתחברות והמחשוב, כך שהן יהיו נגישות בספרייה /gcs. אי אפשר להציג רשימה של קטגוריות שנטענו באופן דינמי מנקודת הטעינה של הרמה הבסיסית (root) /gcs. אפשר לגשת לקטגוריות שנטענו באופן דינמי כספריות משנה:
user@testcluster:$ ls /gcs/your-bucket-name
user@testcluster:$ cd /gcs/your-bucket-name
מעמד בהתאמה אישית
כדי לטעון קטגוריה ספציפית של Cloud Storage לספרייה מקומית עם אפשרויות בהתאמה אישית, משתמשים במבנה הפקודה הבא. אפשר להעביר אותו כחלק מהסקריפט לטעינה בזמן ההפעלה כשיוצרים את האשכול, או להריץ אותו ישירות בצומת אחרי שיוצרים את האשכול.
sudo mkdir -p $MOUNT_DIR
echo "$GCS_BUCKET $MOUNT_DIR gcsfuse $OPTION_1,$OPTION_2,..." | sudo tee -a /etc/fstab
sudo mount -a
לדוגמה, כדי לטעון את הקטגוריה mtdata לספרייה /data, משתמשים בפקודה הבאה:
sudo mkdir -p /data
echo "mtdata /data gcsfuse defaults,_netdev,implicit_dirs,allow_other,dir_mode=777,file-mode=777,metadata_cache_negative_ttl_secs=0,metadata_cache_ttl_secs=-1,stat_cache_max_size_mb=-1,type_cache_max_size_mb=-1,enable_streaming_writes=true" | sudo tee -a /etc/fstab
sudo mount -a
כדי להגדיר באופן אוטומטי ועקבי, צריך לכלול את הסקריפטים המותאמים אישית לטעינה בסקריפטים לטעינה בזמן ההפעלה של האשכול. כך אפשר לוודא שהקטגוריות של Cloud Storage יותקנו באופן אוטומטי בכל הצמתים בזמן ההפעלה, בלי שיהיה צורך בהגדרה ידנית.
המלצות נוספות להגדרות אישיות שמותאמות לעומסי עבודה של AI/ML מפורטות במדריך לשיטות מומלצות לכוונון הביצועים. הוא מספק הנחיות ספציפיות לאופטימיזציה של Cloud Storage FUSE לאימון, להסקת מסקנות ולנקודות ביקורת.
המאמרים הבאים
השלבים הבאים מתמקדים בשימוש יעיל באשכול לאימון בקנה מידה גדול.
- התאמת הקוד לאימון מבוזר: כדי לנצל את היתרונות של אשכול עם כמה צמתים ושל אחסון עם ביצועים גבוהים, צריך להתאים את קוד האימון לסביבה מבוזרת.
- ניהול המשימות באמצעות Agent Platform Pipelines ב-Gemini Enterprise: בתהליכי עבודה בסביבת הייצור, אפשר להפוך את תהליך הכנת הנתונים, שליחת המשימות ורישום המודלים לאוטומטי באמצעות Agent Platform Pipelines.
- מעקב אחרי משימות האימון וניפוי באגים: מעקב אחרי ההתקדמות והשימוש במשאבים של משימות האימון המבוזרות כדי לזהות ולפתור בעיות.