אימון מודל באמצעות TPU v6e
במאמר הזה נסביר איך לאמן מודלים ב-Cloud TPU v6e (שנקרא גם Trillium), כולל הגדרת סביבה, אופטימיזציה של הביצועים ודוגמאות מעשיות לאימון באמצעות JAX ו-PyTorch.
TPU v6e, שנקרא גם Trillium, הוא הדור השישי של יחידות ה-TPU של Google. בכל הממשקים הטכניים, כמו ה-API והיומנים, ובכל המסמך הזה, Trillium נקרא v6e. עם 256 צ'יפים לכל Pod, הארכיטקטורה של TPU v6e דומה מאוד ל-v5e. TPU v6e מותאם לאימון, לכוונון ולהצגה של מודלים מסוג Transformer, יצירת תמונות לפי טקסט ורשתות נוירונים מלאכותיות (CNN). מידע נוסף על הארכיטקטורה וההגדרות של מערכת TPU v6e זמין במאמר TPU v6e.
במדריכים הבאים מוסבר איך להריץ הסקה ב-Cloud TPU v6e:
לפני שמתחילים
לפני שמתחילים, צריך:
- הגדרת פרויקט ב- Google Cloud ל-TPU
- התקנת Google Cloud CLI
- הפעלת Compute Engine API
- יצירת חשבון שירות ב-Compute Engine והענקת הרשאות
מידע נוסף זמין במאמר הגדרת סביבת Cloud TPU.
אימות המכסה וההרשאות
מוודאים שלפרויקט יש את המכסות הבאות:
- מכסת מאיצי TPU ב-Compute Engine
- מכסות למכונות וירטואליות ב-Compute Engine
- מכסת כתובות IP
מכסה ל-Hyperdisk Balanced ולכל סוגי הדיסקים האחרים שבהם רוצים להשתמש
אם אתם משתמשים ב-Google Kubernetes Engine (GKE) עם XPK (Accelerated Processing Kit), אתם צריכים הרשאות נוספות במסוף Google Cloud . למידע נוסף, קראו את המאמר ההרשאות שנדרשות במסוף Google Cloud .
אפשרויות הקצאת הרשאות ידנית
אתם יכולים להקצות ולנהל את TPU v6e בדרכים הבאות:
- Compute Engine (Google Cloud CLI): אתם יכולים להשתמש בכלי Google Cloud CLI כדי לנהל את מכונות ה-TPU הווירטואליות ישירות כמשאבים של Compute Engine. אתם יכולים להקצות מכונות וירטואליות נפרדות של TPU או להשתמש בקבוצות של מופעי מכונה מנוהלים (MIG) כדי לנהל קבוצות של מכונות וירטואליות של TPU. למידע נוסף, קראו את הסקירה הכללית על יצירת TPU.
- GKE: אתם יכולים להשתמש ב-GKE כדי להקצות ולנהל יחידות TPU כמאגר של מאיצים לעומסי העבודה של למידת המכונה בקונטיינרים. מידע נוסף זמין במאמר מידע על יחידות TPU ב-GKE.
- GKE ו-XPK: XPK הוא כלי שורת פקודה שמפשט את יצירת האשכולות ואת הרצת עומסי העבודה ב-GKE. הוא מיועד למומחי ML שרוצים להקצות יחידות TPU ולהריץ משימות אימון בלי צורך בידע מעמיק ב-Kubernetes. מידע נוסף זמין במאגר של XPK ב-GitHub.
הקצאת מעבדי TPU מדור v6e באמצעות GKE ו-XPK
אם אתם משתמשים ב-GKE עם יחידות TPU מסוג v6e, אתם יכולים להשתמש בפקודות Kubernetes או ב-XPK כדי להקצות יחידות TPU ולאמן או להציג מודלים. מידע נוסף על השימוש ב-GKE עם יחידות TPU זמין במאמר מידע על יחידות TPU ב-GKE.
ב-Cloud TPU v6e יש תמיכה בהגדרות של כרטיס רשת (NIC) שמאפשרות לשנות את קצב הנתונים בכמה רשתות. בקטעים הבאים מפורטות פקודות ליצירת אשכול GKE עם תמיכה ב-NIC יחיד או ב-multi-NIC באמצעות XPK. ברוב עומסי העבודה בפרוסה אחת, כרטיס רשת אחד מספק ביצועים מספיקים עם פחות הגדרות אישיות. לעומסי עבודה של ריבוי-פרוסות (Multislice) ולעומסי עבודה שדורשים מהירויות גבוהות של הטמעת נתונים, השתמשו ב-multi-NIC.
יצירת אשכול עם תמיכה ב-NIC יחיד באמצעות XPK
ברוב עומסי העבודה בפרוסה אחת, כרטיס רשת אחד מספק ביצועים מספיקים עם פחות הגדרות. לעומסי עבודה של ריבוי-פרוסות (Multislice) ולעומסי עבודה שדורשים מהירויות גבוהות של הטמעת נתונים, השתמשו ב-multi-NIC.
בקטעים הבאים מוסבר איך ליצור אשכול GKE עם תמיכה ב-NIC יחיד באמצעות XPK.
התקנת XPK והגדרת משתני סביבה
התקנת XPK. פועלים לפי ההוראות במאגר של XPK ב-GitHub.
מגדירים משתני סביבה לאשכול:
export CLUSTER_NAME=XPK_CLUSTER_NAME export ZONE=us-east1-d export PROJECT_ID=PROJECT_ID export ACCELERATOR_TYPE=ACCELERATOR_TYPE export NUM_SLICES=1
מגדירים את משתני הסביבה הבאים:
-
CLUSTER_NAME: שם לאשכול. -
ZONE: האזור שבו ייווצר אשכול ה-TPU. מידע נוסף על אזורים נתמכים זמין במאמר אזורים ותת-אזורים. -
PROJECT_ID: מזהה הפרויקט ב- Google Cloud . -
ACCELERATOR_TYPE: סוג ה-TPU, שנקרא גם סוג המאיץ, מציין את הגרסה והגודל של ה-Cloud TPU שרוצים ליצור. לדוגמה,v6e-256. למידע נוסף על סוגי המאיצים שנתמכים בכל גרסת TPU, קראו את המאמר גרסאות TPU. -
NUM_SLICES: מספר פרוסות ה-TPU של האשכול. בכל פרוסה יש את מספר הצ'יפים שצוין ב-ACCELERATOR_TYPE. באשכול עם פרוסה אחת, מגדירים אתNUM_SLICESל-1. באשכול Multislice, מציינים את מספר הפרוסות בהתאם לדרישות של עומס העבודה בנוגע ליכולת ההתאמה לעומס. מספר הצ'יפים הכולל באשכול הוא מספר הצ'יפים ב-ACCELERATOR_TYPEכפולNUM_SLICES.
-
יצירת האשכול
בוחרים אחת מהאפשרויות הבאות כדי ליצור את האשכול. כדי להגיע לביצועים אופטימליים, מומלץ להשתמש ברשת בהתאמה אישית עם MTU של 8,896. מידע נוסף זמין במאמר הגדרת MTU.
רשת בהתאמה אישית
כדי ליצור רשת בהתאמה אישית עם MTU של 8,896 ולהשתמש בה באשכול:
מגדירים משתני סביבה לשמות של הרשת וחומת האש:
export NETWORK_NAME=NETWORK_NAME export NETWORK_FW_NAME=FIREWALL_NAME
מחליפים את מה שכתוב בשדות הבאים:
- NETWORK_NAME: שם לרשת.
- FIREWALL_NAME: שם לכלל של חומת האש ברשת.
יוצרים רשת בהתאמה אישית עם MTU של 8,896:
gcloud compute networks create ${NETWORK_NAME} \ --mtu=8896 \ --project=${PROJECT_ID} \ --subnet-mode=auto \ --bgp-routing-mode=regional
יוצרים כלל של חומת אש שמאפשר תעבורת נתונים מסוג TCP, ICMP ו-UDP ברשת:
gcloud compute firewall-rules create ${NETWORK_FW_NAME} \ --network=${NETWORK_NAME} \ --allow tcp,icmp,udp \ --project=${PROJECT_ID}
מגדירים משתנה סביבה לארגומנטים של אשכול XPK כדי להשתמש ברשת שיצרתם:
export CLUSTER_ARGUMENTS="--network=${NETWORK_NAME} --subnetwork=${NETWORK_NAME}"
יוצרים את אשכול ה-XPK. הפקודה הבאה מקצה קיבולת על פי דרישה:
xpk cluster create --cluster=${CLUSTER_NAME} \ --cluster-cpu-machine-type=e2-standard-8 \ --num-slices=${NUM_SLICES} \ --tpu-type=${ACCELERATOR_TYPE} \ --zone=${ZONE} \ --project=${PROJECT_ID} \ --on-demand \ --custom-cluster-arguments="${CLUSTER_ARGUMENTS}"
כדי להשתמש בקיבולת שמורה, מחליפים את
--on-demandב---reservation=RESERVATION_NAME. כדי להשתמש במכונות וירטואליות מסוג TPU Spot, מחליפים את--on-demandב---spot.
רשת ברירת המחדל
אם אתם לא צריכים רשת עם MTU גבוה, אתם יכולים ליצור אשכול שמשתמש ברשת ברירת המחדל של VPC. הפקודה הבאה מקצה קיבולת על פי דרישה:
xpk cluster create --cluster=${CLUSTER_NAME} \ --cluster-cpu-machine-type=e2-standard-8 \ --num-slices=${NUM_SLICES} \ --tpu-type=${ACCELERATOR_TYPE} \ --zone=${ZONE} \ --project=${PROJECT_ID} \ --on-demand
כדי להשתמש בקיבולת שמורה, מחליפים את --on-demand ב---reservation=RESERVATION_NAME. כדי להשתמש במכונות וירטואליות מסוג TPU Spot, מחליפים את --on-demand ב---spot.
יצירת אשכול עם תמיכה ב-multi-NIC באמצעות XPK
בעומסי עבודה של ריבוי-פרוסות (Multislice) או בעומסי עבודה אחרים שדורשים רוחב פס גבוה ברשת, כמו הטמעת נתונים, אתם יכולים להשתמש ב-multi-NIC כדי לשפר את הביצועים. כשמשתמשים ב-multi-NIC, לכל TPU VM מוקצים ממשקי רשת נוספים, שכל אחד מהם מחובר לרשת VPC ייחודית, וכך משפרים את קצב העברת הנתונים הכולל ברשת. ברוב עומסי העבודה בפרוסה אחת, כרטיס רשת אחד מספק ביצועים מספיקים עם פחות הגדרות אישיות.
בקטעים הבאים מוסבר איך ליצור אשכול GKE עם תמיכה ב-multi-NIC באמצעות XPK.
התקנת XPK והגדרת משתני סביבה
התקנת XPK. פועלים לפי ההוראות במאגר של XPK ב-GitHub.
מגדירים משתני סביבה לאשכול ולרשת הראשית:
export CLUSTER_NAME=XPK_CLUSTER_NAME export REGION=REGION export ZONE=us-east1-d export PROJECT_ID=PROJECT_ID export ACCELERATOR_TYPE=ACCELERATOR_TYPE export NUM_SLICES=2 export NETWORK_NAME_1=${CLUSTER_NAME}-mtu9k-1-${ZONE} export SUBNET_NAME_1=${CLUSTER_NAME}-privatesubnet-1-${ZONE} export FIREWALL_RULE_NAME_1=${CLUSTER_NAME}-privatefirewall-1-${ZONE} export ROUTER_NAME_1=${CLUSTER_NAME}-network-1-${ZONE} export NAT_CONFIG_1=${CLUSTER_NAME}-natconfig-1-${ZONE} export NETWORK_NAME_2=${CLUSTER_NAME}-mtu9k-2-${ZONE} export SUBNET_NAME_2=${CLUSTER_NAME}-privatesubnet-2-${ZONE} export FIREWALL_RULE_NAME_2=${CLUSTER_NAME}-privatefirewall-2-${ZONE} export ROUTER_NAME_2=${CLUSTER_NAME}-network-2-${ZONE} export NAT_CONFIG_2=${CLUSTER_NAME}-natconfig-2-${ZONE}
מגדירים את משתני הסביבה הבאים:
-
CLUSTER_NAME: שם לאשכול. -
REGION: האזור שבו ייווצר אשכול ה-TPU. -
ZONE: האזור שבו ייווצר אשכול ה-TPU. מידע נוסף על אזורים נתמכים זמין במאמר אזורים ותת-אזורים. -
PROJECT_ID: מזהה הפרויקט ב- Google Cloud . -
ACCELERATOR_TYPE: סוג המאיץ מציין את הגרסה והגודל של ה-Cloud TPU שרוצים ליצור. לדוגמה,v6e-256. למידע נוסף על סוגי המאיצים שנתמכים בכל גרסת TPU, קראו את המאמר גרסאות TPU. -
NUM_SLICES: מספר פרוסות ה-TPU של האשכול. בכל פרוסה יש את מספר הצ'יפים שצוין ב-ACCELERATOR_TYPE. באשכול עם פרוסה אחת, מגדירים אתNUM_SLICESל-1. באשכול Multislice, מציינים את מספר הפרוסות בהתאם לדרישות של עומס העבודה בנוגע ליכולת ההתאמה לעומס. מספר הצ'יפים הכולל באשכול הוא מספר הצ'יפים ב-ACCELERATOR_TYPEכפולNUM_SLICES.
-
יצירת משאבי הרשת הראשיים
יוצרים את הרשת הראשית עם יחידת העברה מקסימלית (MTU) של 8,896:
gcloud compute networks create ${NETWORK_NAME_1} \ --mtu=8896 \ --bgp-routing-mode=regional \ --subnet-mode=custom \ --project=${PROJECT_ID}
שימוש ברשת בהתאמה אישית עם MTU של 8,896 מספק ביצועים טובים יותר. מידע נוסף זמין במאמר הגדרת MTU.
יוצרים את רשת המשנה הראשית:
gcloud compute networks subnets create ${SUBNET_NAME_1} \ --network=${NETWORK_NAME_1} \ --range=10.11.0.0/18 \ --region=${REGION} \ --project=${PROJECT_ID}
יוצרים כלל של חומת אש לרשת הראשית, שמאפשר תעבורת נתונים מסוג
tcp,icmpו-udpברשת הראשית:gcloud compute firewall-rules create ${FIREWALL_RULE_NAME_1} \ --network=${NETWORK_NAME_1} \ --allow tcp,icmp,udp \ --project=${PROJECT_ID}
יוצרים Cloud Router לרשת הראשית:
gcloud compute routers create ${ROUTER_NAME_1} \ --project=${PROJECT_ID} \ --network=${NETWORK_NAME_1} \ --region=${REGION}
מגדירים NAT לרשת הראשית. הפקודה הבאה מאפשרת לתעבורת הנתונים מהאשכול להגיע לאינטרנט:
gcloud compute routers nats create ${NAT_CONFIG_1} \ --router=${ROUTER_NAME_1} \ --region=${REGION} \ --auto-allocate-nat-external-ips \ --nat-all-subnet-ip-ranges \ --project=${PROJECT_ID} \ --enable-logging
יצירת משאבי הרשת המשנית
יוצרים את הרשת המשנית:
gcloud compute networks create ${NETWORK_NAME_2} --mtu=8896 \ --bgp-routing-mode=regional \ --subnet-mode=custom \ --project=${PROJECT_ID}יוצרים רשת משנה לרשת המשנית:
gcloud compute networks subnets create ${SUBNET_NAME_2} \ --network=${NETWORK_NAME_2} \ --range=10.10.0.0/18 \ --region=${REGION} \ --project=${PROJECT_ID}יוצרים כלל של חומת אש שמאפשר תעבורת נתונים ברשת החדשה:
gcloud compute firewall-rules create ${FIREWALL_RULE_NAME_2} \ --network=${NETWORK_NAME_2} \ --allow tcp,icmp,udp \ --source-ranges 10.10.0.0/18 \ --project=${PROJECT_ID}יוצרים Cloud Router לרשת המשנית:
gcloud compute routers create ${ROUTER_NAME_2} \ --project=${PROJECT_ID} \ --network=${NETWORK_NAME_2} \ --region=${REGION}יוצרים הגדרת NAT ל-Cloud Router:
gcloud compute routers nats create ${NAT_CONFIG_2} \ --router=${ROUTER_NAME_2} \ --region=${REGION} \ --auto-allocate-nat-external-ips \ --nat-all-subnet-ip-ranges \ --project=${PROJECT_ID} \ --enable-logging
יצירת האשכול
מגדירים משתנה סביבה לארגומנטים של האשכול ומאגר הצמתים, כדי להשתמש ברשתות וברשתות המשנה שיצרתם:
export CLUSTER_ARGUMENTS="--enable-dataplane-v2 --enable-ip-alias --enable-multi-networking --network=${NETWORK_NAME_1} --subnetwork=${SUBNET_NAME_1}" export NODE_POOL_ARGUMENTS="--additional-node-network network=${NETWORK_NAME_2},subnetwork=${SUBNET_NAME_2}"הארגומנטים האלה מגדירים את האשכול כך שישתמש בשתי הרשתות שיצרתם לתמיכה ב-multi-NIC.
יוצרים את האשכול. הפקודה הבאה מקצה קיבולת על פי דרישה:
xpk cluster create \ --cluster=${CLUSTER_NAME} \ --cluster-cpu-machine-type=e2-standard-8 \ --num-slices=${NUM_SLICES} \ --tpu-type=${ACCELERATOR_TYPE} \ --zone=${ZONE} \ --project=${PROJECT_ID} \ --on-demand \ --custom-cluster-arguments="${CLUSTER_ARGUMENTS}" \ --custom-nodepool-arguments="${NODE_POOL_ARGUMENTS}" \ --create-vertex-tensorboard
כדי להשתמש בקיבולת שמורה, מחליפים את
--on-demandב---reservation=RESERVATION_NAME. כדי להשתמש במכונות וירטואליות מסוג TPU Spot, מחליפים את--on-demandב---spot.
אימות ההגדרה של multi-NIC
אחרי שיוצרים אשכול עם תמיכה ב-multi-NIC, אפשר לוודא ששני כרטיסי ה-NIC נמצאים בשימוש על ידי יצירת עומס עבודה של XPK והוספת הדגל --command ifconfig.
כדי להציג את הפלט של הפקודה
ifconfigביומני המסוף שלGoogle Cloud , משתמשים בפקודה הבאה: צריך לציין את הדגל--base-docker-image maxtext_base_imageכדי להשתמש בקובץ האימג' הבסיסי של MaxText, כמו בדוגמה הבאה, או לציין את הדגל--docker-imageואת קובץ האימג' שבו רוצים להשתמש.xpk workload create \ --cluster ${CLUSTER_NAME} \ --base-docker-image maxtext_base_image \ --workload=${USER}-xpk-${ACCELERATOR_TYPE}-${NUM_SLICES} \ --tpu-type=${ACCELERATOR_TYPE} \ --num-slices=${NUM_SLICES} \ --on-demand \ --zone=${ZONE} \ --project=${PROJECT_ID} \ --command "ifconfig"
אם רוצים להפעיל יומני ניפוי באגים או להשתמש ב- Vertex AI TensorBoard, מוסיפים לפקודה את הארגומנטים האופציונליים הבאים:
--enable-debug-logs \ --use-vertex-tensorboard
מוודאים שגם ב-eth0 וגם ב-eth1 ה-MTU מוגדר ל-8,896. כדי לעשות את זה, בודקים את הפלט של עומס העבודה של XPK ביומני המסוף של Google Cloud .
הגדרת JAX או PyTorch
במקורות המידע הבאים מוסבר איך להגדיר את JAX או את PyTorch ב-TPU, בהתאם לשיטת ההקצאה והניהול שבה אתם משתמשים:
- טייס אוטומטי של GKE: הכן את אפליקציית ה-TPU שלך
- GKE Standard: הכנת עומסי העבודה
- GKE ו-XPK: קובץ README של XPK
- מארח יחיד של Cloud TPU באמצעות JAX: הרצת חישוב ב-VM של Cloud TPU באמצעות JAX
- Multi-host Cloud TPU באמצעות JAX: הפעלת קוד JAX בפרוסות TPU
- Cloud TPU באמצעות PyTorch: PyTorch ב-Cloud TPU
כדי להגדיר ולהריץ את XPK עם MaxText, קראו את המאמר הרצת MaxText בקנה מידה גדול באמצעות XPK .
שימוש ב-SkyPilot
אתם יכולים להשתמש ב-Cloud TPU v6e עם SkyPilot. SkyPilot הוא מסגרת בקוד פתוח שמפשטת את התהליך של הרצה, ניהול והתאמה לעומס של עומסי עבודה של AI. אתם יכולים להוסיף ל-SkyPilot מידע על מיקום ותמחור שקשור ל-v6e. מידע נוסף זמין בדוגמה ל-SkyPilot TPU v6e.
דוגמאות לאימון
בקטעים הבאים מופיעות דוגמאות לאימון מודלים של MaxText, MaxDiffusion ו-PyTorch ב-Cloud TPU v6e.
הדוגמאות האלה נבדקו עם גרסאות התוכנה הבאות:
- Python
3.10ואילך - גרסאות תוכנה ליליות:
- JAX
0.4.32.dev20240912לילי - Nightly LibTPU
0.1.dev20240912+nightly
- JAX
- גרסאות תוכנה יציבות:
- JAX + JAX Lib בגרסה 0.4.37
אימון של MaxText ו-MaxDiffusion ב-Cloud TPU v6e
בקטעים הבאים מוסבר על מחזור החיים של אימון המודלים MaxText ו-MaxDiffusion.
באופן כללי, השלבים העיקריים הם:
- יוצרים את קובץ האימג' הבסיסי של עומס העבודה.
- מריצים את עומס העבודה באמצעות XPK.
- יוצרים את פקודת האימון של עומס העבודה.
- פורסים את עומס העבודה.
- עוקבים אחרי עומס העבודה וצופים במדדים.
- אם אין צורך בעומס העבודה של XPK, מוחקים אותו.
- מוחקים את האשכול כשלא צריכים אותו יותר.
יצירת קובץ אימג' בסיסי
מתקינים את MaxText או MaxDiffusion ויוצרים את קובץ האימג' של Docker:
משכפלים את המאגר שבו רוצים להשתמש ועוברים לספרייה של המאגר:
MaxText:
git clone https://github.com/google/maxtext.git cd maxtext git checkout maxtext-v0.2.0MaxDiffusion:
git clone https://github.com/google/maxdiffusion.git && cd maxdiffusion && git checkout 4a8155ec0129512812b31930f0a91c6d5a141103מגדירים את Docker כך שישתמש ב-Google Cloud CLI:
gcloud auth configure-dockerיוצרים את קובץ האימג' של Docker באמצעות הפקודה הבאה או באמצעות קובץ אימג' של JAX AI. מידע נוסף על תמונות מ-AI של JAX זמין במאמר תמונות מ-AI של JAX.
MaxText:
bash dependencies/scripts/docker_build_dependency_image.sh MODE=stableMaxDiffusion:
bash .github/workflows/build_and_upload_images.sh CLOUD_IMAGE_NAME=maxdiffusion_jax_stable_stack MODE=jax_ai_image PROJECT=${PROJECT_ID} LOCAL_IMAGE_NAME=maxdiffusion_jax_stable_stack BASEIMAGE=us-docker.pkg.dev/cloud-tpu-images/jax-ai-image/tpu:latestמגדירים את מזהה הפרויקט בהגדרות האישיות הפעילות של ה-CLI של gcloud:
gcloud config set project ${PROJECT_ID}אם אתם מפעילים את עומס העבודה ממכונה שאין בה את קובץ האימג' שנוצר באופן מקומי, העלו את קובץ האימג'.
מגדירים את משתנה הסביבה
CLOUD_IMAGE_NAME:export CLOUD_IMAGE_NAME=${USER}_runnerמעלים את התמונה:
bash dependencies/scripts/docker_upload_runner.sh ${CLOUD_IMAGE_NAME}
הרצת עומס העבודה באמצעות XPK
אם אתם לא משתמשים בערכי ברירת המחדל שמוגדרים על ידי MaxText או MaxDiffusion, הגדירו את משתני הסביבה הבאים:
export BASE_OUTPUT_DIR=gs://YOUR_BUCKET export PER_DEVICE_BATCH_SIZE=2 export NUM_STEPS=30 export MAX_TARGET_LENGTH=8192
יוצרים את הסקריפט של המודל. הסקריפט הזה יועתק כפקודת אימון בשלב מאוחר יותר.
אל תפעילו עדיין את הסקריפט של המודל.
MaxText
MaxText הוא מודל LLM בקוד פתוח, בעל ביצועים גבוהים ורמת סקיילביליות גבוהה, שכתוב ב-Python וב-JAX טהורים ומטרגט יחידות Google Cloud TPU ו-GPU לאימון ולהסקה.
JAX_PLATFORMS=tpu,cpu \ ENABLE_PJRT_COMPATIBILITY=true \ TPU_SLICE_BUILDER_DUMP_CHIP_FORCE=true \ TPU_SLICE_BUILDER_DUMP_ICI=true && \ python3 -m maxtext.trainers.pre_train.train src/maxtext/configs/base.yml \ base_output_directory=${BASE_OUTPUT_DIR} \ dataset_type=synthetic \ per_device_batch_size=${PER_DEVICE_BATCH_SIZE} \ enable_checkpointing=false \ gcs_metrics=true \ profiler=xplane \ skip_first_n_steps_for_profiler=5 \ steps=${NUM_STEPS} # attention='dot_product'"Gemma2
Gemma היא משפחה של מודלי שפה גדולים (LLM) עם משקלים פתוחים שפותחו על ידי Google DeepMind, על בסיס המחקר והטכנולוגיה של Gemini.
python3 -m maxtext.trainers.pre_train.train src/maxtext/configs/base.yml \ model_name=gemma2-27b \ run_name=gemma2-27b-run \ base_output_directory=${BASE_OUTPUT_DIR} \ max_target_length=${MAX_TARGET_LENGTH} \ per_device_batch_size=${PER_DEVICE_BATCH_SIZE} \ steps=${NUM_STEPS} \ enable_checkpointing=false \ use_iota_embed=true \ gcs_metrics=true \ dataset_type=synthetic \ profiler=xplane \ attention=flashMixtral 8x7b
Mixtral הוא מודל AI מתקדם שפותח על ידי Mistral AI, ומשתמש בארכיטקטורה של שילוב מומחים (MoE) חסכוני (sparse).
python3 -m maxtext.trainers.pre_train.train src/maxtext/configs/base.yml \ base_output_directory=${BASE_OUTPUT_DIR} \ per_device_batch_size=${PER_DEVICE_BATCH_SIZE} \ model_name=mixtral-8x7b \ steps=${NUM_STEPS} \ max_target_length=${MAX_TARGET_LENGTH} \ tokenizer_path=assets/tokenizer.mistral-v1 \ attention=flash \ dtype=bfloat16 \ dataset_type=synthetic \ profiler=xplaneMaxDiffusion
MaxDiffusion הוא אוסף של הטמעות לדוגמה של מודלים שונים של דיפוזיה סמויה (latent diffusion) שכתובים ב-Python וב-JAX, ופועלים במכשירי XLA, כולל מעבדי Cloud TPU ו-GPU. Stable Diffusion הוא מודל סמוי ליצירת תמונות לפי טקסט, שיוצר תמונות פוטו-ריאליסטיות מכל קלט טקסט.
כדי להריץ את MaxDiffusion, צריך להתקין הסתעפות ספציפית של Git, כמו שמוצג בסקריפט האימון הבא.
git clone https://github.com/google/maxdiffusion.git && cd maxdiffusion && git checkout 4a8155ec0129512812b31930f0a91c6d5a141103 && pip install -r requirements.txt && pip install . && pip install huggingface_hub==0.30.2 && OUT_DIR=${BASE_OUTPUT_DIR} && python src/maxdiffusion/train_sdxl.py \ src/maxdiffusion/configs/base_xl.yml \ revision=refs/pr/95 \ activations_dtype=bfloat16 \ weights_dtype=bfloat16 \ resolution=1024 \ per_device_batch_size=1 \ output_dir=${OUT_DIR} \ jax_cache_dir=${OUT_DIR}/cache_dir/ \ max_train_steps=200 \ attention=flash \ run_name=sdxl-ddp-v6eמייצאים את המשתנים הבאים:
export CLUSTER_NAME=CLUSTER_NAME export ACCELERATOR_TYPE=ACCELERATOR_TYPE export NUM_SLICES=NUM_SLICES export YOUR_MODEL_SCRIPT=YOUR_MODEL_SCRIPT
תיאורים של משתני סביבה
-
CLUSTER_NAME: שם האשכול. -
ACCELERATOR_TYPE: סוג המאיץ מציין את הגרסה והגודל של ה-Cloud TPU שרוצים ליצור. למידע נוסף על סוגי המאיצים שנתמכים בכל גרסת TPU, ראו גרסאות TPU. -
NUM_SLICES: מספר פרוסות ה-TPU. -
YOUR_MODEL_SCRIPT: הסקריפט של המודל שצריך להריץ כפקודת אימון.
-
מריצים את המודל באמצעות הסקריפט שיצרתם בשלב הקודם. צריך לציין את הדגל
--base-docker-imageכדי להשתמש בתמונת הבסיס של MaxText, או לציין את הדגל--docker-imageואת התמונה שבה רוצים להשתמש.אפשר להוסיף את הדגלים האופציונליים הבאים:
- כדי להפעיל רישום ביומן של ניפוי באגים, צריך לכלול את הדגל
--enable-debug-logs. מידע נוסף זמין במאמר ניפוי באגים ב-JAX ב-MaxText. - כדי להעלות נתונים ל-Vertex AI TensorBoard, אתם יכולים ליצור Vertex AI Experiment ולכלול את הדגל
--use-vertex-tensorboard. מידע נוסף זמין במאמר מעקב אחרי JAX ב-MaxText באמצעות Vertex AI.
xpk workload create \ --cluster ${CLUSTER_NAME} \ {--base-docker-image maxtext_base_image | --docker-image gcr.io/${PROJECT_ID}/${CLOUD_IMAGE_NAME}:latest} \ --workload=${USER}-xpk-${ACCELERATOR_TYPE}-${NUM_SLICES} \ --tpu-type=${ACCELERATOR_TYPE} \ --num-slices=${NUM_SLICES} \ --on-demand \ --zone=${ZONE} \ --project=${PROJECT_ID} \ --command="${YOUR_MODEL_SCRIPT}"
הפלט כולל קישור למעקב אחרי עומס העבודה. פותחים את הקישור ולוחצים על הכרטיסייה Logs כדי לעקוב אחרי עומס העבודה בזמן אמת.
- כדי להפעיל רישום ביומן של ניפוי באגים, צריך לכלול את הדגל
ניפוי באגים ב-JAX ב-MaxText
כדי לאבחן למה האשכול או עומס העבודה לא פועלים, אפשר להשתמש בפקודות XPK נוספות:
- רשימת עומסי העבודה של XPK
- XPK inspector
- מפעילים רישום מפורט ביומני עומסי העבודה באמצעות הדגל
--enable-debug-logsכשיוצרים את עומס העבודה ב-XPK.
מעקב אחרי JAX ב-MaxText באמצעות Vertex AI
כדי להשתמש ב-TensorBoard, צריך להיות לכם Google Cloud חשבון משתמש עם התפקיד aiplatform.user. מריצים את הפקודה הבאה כדי להקצות את התפקיד הזה:
gcloud projects add-iam-policy-binding your-project-id \ --member='user:your-email' \ --role='roles/aiplatform.user'
צפייה בנתוני סקלר ופרופיל דרך TensorBoard המנוהל של Vertex AI.
מגדילים את הבקשות לניהול משאבים (CRUD) באזור שבו אתם משתמשים מ-600 ל-5,000. יכול להיות שזו לא תהיה בעיה בעומסי עבודה קטנים שמשתמשים בפחות מ-16 מכונות וירטואליות.
מתקינים יחסי תלות כמו
cloud-accelerator-diagnosticsל-Vertex AI:# xpk dependencies will install cloud-accelerator-diagnostics for Vertex AI cd ~/xpk pip install .
יוצרים את האשכול באמצעות הדגל
--create-vertex-tensorboard, כמו שמתואר במאמר יצירת Vertex AI TensorBoard. אפשר להריץ את הפקודה הזו גם על אשכולות קיימים.יוצרים את הניסוי ב-Vertex AI כשמריצים את עומס העבודה של XPK באמצעות הדגל
--use-vertex-tensorboardוהדגל האופציונלי--experiment-name. לרשימת השלבים המלאה, ראו יצירת ניסוי ב-Vertex AI להעלאת נתונים ל-Vertex AI TensorBoard.
היומנים כוללים קישור ל-Vertex AI TensorBoard, בדומה לקישור הבא:
View your TensorBoard at https://us-central1.tensorboard.googleusercontent.com/experiment/project_id+locations+us-central1+tensorboards+hash+experiments+name
אפשר גם למצוא את הקישור ל-Vertex AI TensorBoard במסוף Google Cloud . נכנסים לדף Vertex AI Experiments במסוף Google Cloud . בוחרים את האזור המתאים מהתפריט הנפתח.
ספריית TensorBoard נכתבת גם בקטגוריה של Cloud Storage שציינתם באמצעות ${BASE_OUTPUT_DIR}.
מחיקת עומס העבודה ב-XPK
משתמשים בפקודה xpk workload delete כדי למחוק עומס עבודה אחד או יותר על סמך הקידומת או הסטטוס של המשימה. הפקודה הזו יכולה להיות שימושית אם שלחתם עומסי עבודה של XPK שכבר לא צריך להריץ, או אם יש לכם משימות שנתקעו בתור.
מחיקת האשכול
משתמשים בפקודה xpk cluster delete כדי למחוק את האשכול:
xpk cluster delete --cluster ${CLUSTER_NAME} \ --zone=${ZONE} --project=${PROJECT_ID}
תוצאות של בדיקת ביצועים ב-MaxDiffusion
הרצנו את סקריפט האימון של MaxDiffusion ב-v6e-4, ב-v6e-16 ובשני v6e-16. בטבלה הבאה מוצגים קצבי העברת הנתונים שנמדדו.
| v6e-4 | v6e-16 | שני v6e-16 | |
|---|---|---|---|
| שלבי האימון | 0.069 | 0.073 | 0.13 |
| גודל אצווה גלובלי | 8 | 32 | 64 |
| תפוקה (דוגמאות לשנייה) | 115.9 | 438.4 | 492.3 |
אימון מודל באמצעות PyTorch ב-Cloud TPU
אתם יכולים להשתמש ב-TorchTPU ישירות כדי לאמן את המודל או להשתמש שוב בספריית העזר TorchTitan. כדי להתחיל לעבוד עם עומסי עבודה ב-v6e, קראו את המאמר תחילת העבודה עם TorchTPU ב-TPU VM ואת המתכונים של TorchTitan Trillium. מידע נוסף על סביבת PyTorch ב-Cloud TPU זמין במאמר PyTorch ב-Cloud TPU.