במדריך הזה נסביר איך לכוונן מודל גדול של שפה (LLM) באמצעות יחידות לעיבוד טנסורים (TPU) ב-Google Kubernetes Engine (GKE) עם JAX. באמצעות כוונון עדין אפשר להתאים מודל בסיס כמו Gemma 3 לדומיין או למשימה ספציפיים. התהליך הזה משפר את הדיוק של המודל על ידי עדכון הפרמטרים שלו באמצעות מערך נתונים מיוחד משלכם.
המדריך הזה הוא נקודת התחלה טובה אם אתם צריכים שליטה מפורטת, התאמה אישית, יכולת הרחבה, עמידות, ניידות וחסכוניות של Kubernetes מנוהל, כדי לכוונן את עומסי העבודה של AI/ML.
רקע
באמצעות שימוש ב-TPU ב-GKE עם Jax כדי לבצע כוונון עדין של LLM, אתם יכולים ליצור פתרון כוונון עדין חזק ומוכן לייצור עם כל היתרונות של Kubernetes מנוהל.
Gemma
Gemma היא סדרה של מודלים קלים ורב-מודאליים של AI גנרטיבי/ML שזמינים לשימוש חופשי ומופצים ברישיון קוד פתוח. מודלים ה-AI האלה זמינים להפעלה באפליקציות, בחומרה, במכשירים ניידים או בשירותים מתארחים. Gemma 3 מציג יכולות מולטימודאליות, והוא תומך בקלט של שפה ויזואלית ובתפוקות של טקסט. הוא יכול לטפל בחלונות הקשר של עד 128,000 טוקנים ותומך ביותר מ-140 שפות. בנוסף, מודל Gemma 3 מציע יכולות משופרות במתמטיקה, בחשיבה רציונלית ובצ'אט, כולל פלט מובנה וקריאה להפעלת פונקציות.
אתם יכולים להשתמש במודלים של Gemma ליצירת טקסט, או לכוונן אותם למשימות מיוחדות.
מידע נוסף זמין במסמכי התיעוד של Gemma.
TPUs
יחידות TPU הן מעגלים משולבים לאפליקציות ספציפיות (ASIC) שפותחו על ידי Google כדי להאיץ מודלים של למידת מכונה ו-AI שנבנים באמצעות frameworks כמו TensorFlow, PyTorch ו-JAX.
לפני שמשתמשים ב-TPU ב-GKE, מומלץ להשלים את תוכנית הלימודים הבאה:
- מידע על הזמינות של גרסאות TPU עדכניות מופיע בארכיטקטורת המערכת של Cloud TPU.
- מידע על TPU ב-GKE
JAX
JAX היא מסגרת ללמידת מכונה עם ביצועים גבוהים, שנועדה לשימוש עם TPU ו-GPU. JAX מספקת API ליצירה ולאימון של מודלים של למידת מכונה.
מידע נוסף זמין במאגר JAX.
מטרות
במדריך הזה מוסבר איך:
- יוצרים אשכול GKE במצב Autopilot או אשכול רגיל עם טופולוגיית TPU מומלצת, על סמך מאפייני המודל. במהלך המדריך הזה, תבצעו כוונון עדין במאגרי צמתים של מארח יחיד.
- מוסיפים נתונים לקטגוריה של Cloud Storage וטוענים אותה למאגר באמצעות Cloud Storage FUSE.
- פורסים את משימת הכוונון העדין של ה-LLM ב-GKE.
- עוקבים אחרי משימת הכוונון העדין ומציגים את היומנים.
לפני שמתחילים
- נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the required API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the required API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
צריך לוודא שיש לכם בפרויקט את התפקיד או התפקידים הבאים: roles/container.admin,roles/iam.serviceAccountAdmin,roles/storage.admin
בדיקת התפקידים
-
נכנסים לדף IAM במסוף Google Cloud .
כניסה לדף IAM - בוחרים את הפרויקט.
-
בעמודה Principal (חשבון המשתמש), מוצאים את כל השורות שבהן מופיע השם שלכם או של קבוצה שאתם נכללים בה. כדי לברר באילו קבוצות אתם נכללים, פנו לאדמין.
- בודקים את העמודה Role בכל השורות שבהן מצוין או מופיע השם שלכם, כדי לראות אם רשימת התפקידים כוללת את התפקידים הנדרשים.
מתן התפקידים
-
נכנסים לדף IAM במסוף Google Cloud .
כניסה לדף IAM - בוחרים את הפרויקט.
- לוחצים על Grant access.
-
בשדה New principals, מזינים את מזהה המשתמש. בדרך כלל מזהה המשתמש הוא כתובת האימייל של חשבון Google.
- לוחצים על Select a role ומחפשים את התפקיד.
- כדי לתת עוד תפקידים, לוחצים על Add another role ומוסיפים אותם.
- לוחצים על Save.
-
- מוודאים שיש לכם מספיק מכסת שימוש בשבבי TPU Trillium (v6e). במדריך הזה משתמשים בהגדרת מאגר צמתים שדורשת 16 שבבים ומופעים על פי דרישה.
- ודאו שיש לכם מאגר Docker. אם אין לכם מאגר, אתם צריכים ליצור מאגר רגיל ב-Artifact Registry.
הכנת הסביבה
במדריך הזה תשתמשו ב-Cloud Shell כדי לנהל משאבים שמתארחים ב- Google Cloud. ב-Cloud Shell מותקנת מראש התוכנה שדרושה למדריך הזה, כולל kubectl ו-Google Cloud CLI.
כדי להגדיר את הסביבה באמצעות Cloud Shell:
במסוף Google Cloud , מפעילים סשן של Cloud Shell ולוחצים על Activate Cloud Shell.
הפעולה הזו מפעילה סשן בחלונית התחתונה של מסוף Google Cloud .
מגדירים את משתני הסביבה שמוגדרים כברירת מחדל:
gcloud config set project PROJECT_ID gcloud config set billing/quota_project PROJECT_ID export PROJECT_ID=$(gcloud config get project) export CLUSTER_NAME=CLUSTER_NAME export REGION=CONTROL_PLANE_LOCATION export ZONE=ZONE export GCS_BUCKET_NAME=BUCKET_NAMEמחליפים את הערכים הבאים:
-
PROJECT_ID: מזהה הפרויקט ב- Google Cloud . -
CLUSTER_NAME: השם של אשכול GKE. -
CONTROL_PLANE_LOCATION: האזור ב-Compute Engine שבו נמצאים אשכול GKE וצומתי TPU. האזור צריך להכיל אזורים שבהם זמינים סוגי מכונות TPU Trillium (v6e).
ZONE: אזור בתוך אזורCONTROL_PLANE_LOCATIONשבחרתם, שבו זמינים סוגי מכונות TPU Trillium (v6e). כדי להציג את רשימת האזורים שבהם זמינים מכשירי TPU Trillium (v6e), מריצים את הפקודה הבאה:gcloud compute accelerator-types list --filter="name~ct6e" --format="value(zone)"
BUCKET_NAME: השם של הקטגוריה של Cloud Storage שמכילה את נתוני האימון.
-
משכפלים את המאגר לדוגמה:
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples.git cd kubernetes-engine-samplesעוברים לספריית העבודה:
cd ai-ml/llm-training-jax-tpu-gemma3
יצירה והגדרה של Google Cloud משאבים
בקטע הזה יוצרים ומגדירים Google Cloud משאבים.
יצירת אשכול GKE
אפשר לכוונן מודל שפה גדול (LLM) ב-TPU באשכול GKE במצב Autopilot או באשכול רגיל. מומלץ להשתמש באשכול Autopilot כדי ליהנות מחוויית Kubernetes מנוהלת באופן מלא. כדי לבחור את מצב הפעולה של GKE שהכי מתאים לעומסי העבודה שלכם, אפשר לעיין במאמר בחירת מצב פעולה של GKE.
טייס אוטומטי
יוצרים אשכול GKE Autopilot שמשתמש ב איחוד זהויות של עומסי עבודה ל-GKE ומופעל בו Cloud Storage FUSE.
gcloud container clusters create-auto ${CLUSTER_NAME} \
--location=${REGION}
יצירת האשכול עשויה להימשך כמה דקות.
רגילה
יוצרים אשכול GKE Standard אזורי שמשתמש באיחוד זהויות של עומסי עבודה ל-GKE ומופעל בו Cloud Storage FUSE.
gcloud container clusters create ${CLUSTER_NAME} \ --enable-ip-alias \ --addons GcsFuseCsiDriver \ --machine-type=n2-standard-4 \ --num-nodes=2 \ --workload-pool=${PROJECT_ID}.svc.id.goog \ --location=${REGION}יצירת האשכול עשויה להימשך כמה דקות.
יוצרים מאגר צמתים עם מארח יחיד:
gcloud container node-pools create jax-tpu-nodepool \ --cluster=${CLUSTER_NAME} \ --machine-type=ct6e-standard-1t \ --num-nodes=1 \ --location=${REGION} \ --node-locations=${ZONE} \ --workload-metadata=GKE_METADATA
GKE יוצר מאגר צמתים של TPU Trillium עם טופולוגיה 1x1 וצומת אחד. הדגל --workload-metadata=GKE_METADATA מגדיר את מאגר הצמתים לשימוש בשרת המטא-נתונים של GKE.
התקנת JobSet
מגדירים את
kubectlלתקשורת עם האשכול:gcloud container clusters get-credentials ${CLUSTER_NAME} --location=${REGION}מתקינים את הגרסה האחרונה שפורסמה של JobSet:
kubectl apply --server-side -f https://github.com/kubernetes-sigs/jobset/releases/download/JOBSET_VERSION/manifests.yamlמחליפים את
JOBSET_VERSIONבגרסה האחרונה של JobSet. לדוגמה,v0.11.0.מאמתים את ההתקנה של JobSet:
kubectl get pods -n jobset-systemהפלט אמור להיראות כך:
NAME READY STATUS RESTARTS AGE jobset-controller-manager-6c56668494-l4dhc 1/1 Running 0 4m45sיכול להיות שתצטרכו להוסיף עוד צמתים אם JobSet ממתין למשאבים.
הגדרת Cloud Storage FUSE
כדי לבצע התאמה עדינה של מודל שפה גדול, צריך לספק נתונים לאימון. במדריך הזה השתמשנו במערך הנתונים TinyStories מ-Hugging Face. קבוצת הנתונים הזו מכילה סיפורים קצרים שנוצרו באופן סינתטי על ידי GPT-3.5 ו-GPT-4, עם אוצר מילים מוגבל.
בקטע הזה מוסבר איך מגדירים את Cloud Storage FUSE לקריאת נתונים מקטגוריה של Cloud Storage.
מורידים את מערך הנתונים:
wget https://huggingface.co/datasets/roneneldan/TinyStories/resolve/main/TinyStories-train.txt?download=true -O TinyStories-train.txtמעלים את הנתונים לקטגוריה חדשה ב-Cloud Storage:
gcloud storage buckets create gs://${GCS_BUCKET_NAME} \ --location=${REGION} \ --enable-hierarchical-namespace \ --uniform-bucket-level-access gcloud storage cp TinyStories-train.txt gs://${GCS_BUCKET_NAME}כדי לאפשר לעומס העבודה לקרוא נתונים דרך Cloud Storage FUSE, צריך ליצור חשבון שירות של Kubernetes (KSA) ולהוסיף את ההרשאות הנדרשות. מריצים את הסקריפט
permissionsetup.sh:אחרי שמריצים את הסקריפט הזה, המשאבים הבאים מוגדרים בGoogle Cloud פרויקט ובאשכול GKE:
- נוצר חשבון שירות חדש ב-IAM בשם
gcs-fuse-saבפרויקט. - לחשבון השירות (GSA) שנוצר Google Cloud (
gcs-fuse-sa) מוקצה התפקידroles/storage.objectViewerבקטגוריה של Cloud Storage שצוינה על ידי${GCS_BUCKET_NAME}. ההרשאה הזו מאפשרת ל-GSA לקרוא אובייקטים מהקטגוריה. - במרחב השמות
defaultבאשכול GKE נוצר KSA חדש בשםjaxserviceaccount. - מדיניות ה-IAM של GSA מתעדכנת כדי להעניק את התפקיד
roles/iam.workloadIdentityUserל-KSA. ההרשאה הזו מאפשרת ל-KSA להתחזות ל-GSA. ה-KSA מתויג כדי לקשר אותו ל-GSA. ההערה הזו מציינת ל-GKE לאיזה חשבון שירות של Google (GSA) חשבון השירות של Kubernetes (KSA) צריך להתחזות באמצעות Workload Identity.
כל פוד שפועל במרחב השמות
defaultשל אשכול GKE ומשתמש בחשבון השירותjaxserviceaccountיוכל עכשיו לבצע אימות בתור חשבון שירות של Google (GSA) מספרgcs-fuse-sa. ל-Pods האלה תהיה גישת קריאה לאובייקטים שמאוחסנים בקטגוריהgs://${GCS_BUCKET_NAME}, וזה חיוני כדי שה-Job של הכוונון העדין יוכל לגשת למערך הנתונים באמצעות Cloud Storage FUSE.
- נוצר חשבון שירות חדש ב-IAM בשם
יצירת סקריפט לכוונון עדין
בקטע הזה נסביר על סקריפט ההדרכה שמבצע פעולת כוונון עדין במודל Gemma 3. הסקריפט הזה משתמש ב-Gemma3Tokenizer.
כדאי לעיין בסקריפט הבא של כוונון עדין:Gemma3LLMTrain.py
בסקריפט הזה, התנאים הבאים חלים:
Gemma3Tokenizerממיר נתוני טקסט לטוקנים שהמודל יכול לעבד.- הפונקציה
load_and_preprocess_dataקוראת את נתוני האימון מקובץ, מפצלת אותם לסיפורים נפרדים ומשתמשת ב-tokenizer כדי להמיר את הטקסט לרצפים מרופדים של טוקנים. - הפונקציה
generate_textמקבלת את המודל, את הפרמטרים שלו ואת ההנחיה ליצירת טקסט. - הפונקציה
train_stepמגדירה איטרציה אחת של אימון שכוללת העברה קדימה, חישוב הפסד (באמצעות אנטרופיה צולבת), חישוב גרדיאנט ועדכוני פרמטרים. - הפונקציה
train_modelמבצעת איטרציה במערך הנתונים למשך מספר מוגדר של תקופות, ובמהלכה היא קוראת לפונקציהtrain_stepלכל אצווה. - הפונקציה
run_trainingמתזמנת את כל התהליך של טעינת הנתונים, אתחול מודל Gemma 3 (Gemma3_270M) ואופטימיזציה, טעינת פרמטרים שאומנו מראש, הגדרת חלוקת נתונים לעיבוד מקביל, הפעלת יצירת טקסט לבדיקה, ביצוע לולאת האימון וביצוע יצירת טקסט סופית כדי להדגים את ההשפעה של כוונון עדין. - הסקריפט משתמש בספריית
argparseכדי לקבל ארגומנטים בשורת הפקודה עבור הפרמטריםmaxlen,batch_sizeו-datacount.
אחרי שבדקתם את סקריפט הכוונון העדין, אתם יכולים להוסיף אותו לקונטיינר כדי להריץ אותו ב-GKE.
העברה של סקריפט הכוונון העדין למאגר
לפני שמריצים את סקריפט הכוונון העדין באשכול GKE, צריך להוסיף אותו לקונטיינר. במדריך הזה נעשה שימוש בתמונה מ-AI של JAX כתמונת הבסיס.
פותחים את
Dockerfileבאותה ספרייה שבה נמצא הקובץGemma3LLMTrain.py:קובץ ה-Dockerfile הזה מתקין את הרכיבים התלויים הנדרשים ומעתיק את הקובץ
Gemma3LLMTrain.pyלקונטיינר.יוצרים את קובץ האימג' של Docker ומעבירים אותו בדחיפה למאגר אימג'ים:
export REPOSITORY=REPOSITORY_NAME export IMAGE_NAME="jax-gemma3-training" export IMAGE_TAG="latest" export DOCKERFILE_PATH="./Dockerfile" export IMAGE_URI="${REGION}-docker.pkg.dev/${PROJECT_ID}/${REPOSITORY}/${IMAGE_NAME}:${IMAGE_TAG}" docker build -t "${IMAGE_URI}" -f "${DOCKERFILE_PATH}" . gcloud auth configure-docker "${REGION}-docker.pkg.dev" -q docker push "${IMAGE_URI}"מחליפים את
REPOSITORY_NAMEבשם המאגר שלכם ב-Artifact Registry.מוסיפים קישורי תפקידים לחשבון השירות:
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format 'get(projectNumber)') gcloud artifacts repositories add-iam-policy-binding ${REPOSITORY} \ --project=${PROJECT_ID} \ --location=${REGION} \ --member="serviceAccount:${PROJECT_NUMBER}-compute@developer.gserviceaccount.com" \ --role="roles/artifactregistry.reader"
אחרי שהתמונה נמצאת במאגר, אפשר לפרוס את משימת הכוונון העדין באשכול GKE.
פריסת משימת הכוונון העדין של מודל LLM
בקטע הזה מוסבר איך לפרוס את משימת הכוונון העדין של מודל ה-LLM לאשכול GKE.
פותחים את קובץ המניפסט
training_singlehost.yaml:החלת המניפסט:
envsubst < training_singlehost.yaml | kubectl apply -f -
GKE יוצר Job שמפעיל Pod בצומת TPU Trillium (v6e). ה-Pod הזה מריץ את סקריפט הכוונון העדין של Python, שמקבל גישה לנתוני הכוונון העדין מקטגוריית Cloud Storage שצוינה, שנטענה בנתיב /data באמצעות Cloud Storage FUSE. הסקריפט מבצע כוונון עדין של מודל Gemma.
מעקב אחרי עבודת ההדרכה
בקטע הזה אפשר לעקוב אחרי ההתקדמות של פעולת הכוונון העדין והביצועים שלה.
איך בודקים את התקדמות הכוונון העדין
מציגים את רשימת ה-Pods:
# Find the Pods kubectl get podsעוקבים אחרי פלט היומן:
kubectl logs -f pods/POD_NAMEמחליפים את
POD_NAMEבשם ה-Pod.הפלט אמור להיראות כך:
Global device count: 1 Batch size: 128, Max length: 256, Data count: 96000 I1028 00:12:55.925999 1387 google_auth_provider.cc:181] Running on GCE, using service account ... Generating response for: Once upon a time, there was a girl named Amy. Response: Amy lived in a small house. The house was in a big field. Amy liked to play in the big field. She Start training model Loss after batch 0: 10.25 Loss after batch 10: 4.3125 . . . Loss after batch 740: 1.41406 Completed training model. Total time for training 294.6791355609894 seconds Generating response for: Once upon a time, there was a girl named Amy. Response: She loved to play with her toys. One day, Amy's mom told her that she had to go to the store toניתוח הפלט:
- הקו
Global device count: 1מציין את ליבות ה-TPU שהיו בשימוש. - המודל יוצר טקסט סביר לפני הרצת הכוונון העדין, כי הוא נטען מנקודת ביקורת שאומנה מראש.
- הפלט שנוצר אחרי כוונון עדין דומה יותר להתחלה של סיפור קצר, מה שמצביע על כך שהמודל לומד ממערך הנתונים החדש.
- כוונון עדין של המודל על מערך הנתונים המלא אמור להניב תוצאות מדויקות עוד יותר.
- הקו
התבוננות במדדים
כדי לראות את הביצועים של משימת הכוונון העדין, בודקים את מדדי ה-TPU וה-CPU. כדי לראות את מדדי יכולת הצפייה של האשכול, מבצעים את השלבים שמפורטים במאמר הצגת מדדי יכולת הצפייה של אשכול ועומס עבודה.
הגדרות חלופיות לכוונון עדין
בקטע הזה מתוארות הגדרות חלופיות לעומס העבודה של הכוונון העדין.
בחירת מודל
במדריך הזה נעשה שימוש במודל Gemma3_270M, שהוא מודל קטן שמתאים למאגר צמתים של TPU Trillium (v6e) במארח יחיד. כדי לבצע כוונון עדין של מודלים גדולים יותר שדורשים יותר זיכרון ומשאבי מחשוב, אפשר להשתמש בהגדרות של מאגרי צמתים מרובי-מארחים או מרובי-פרוסות.
רשימה מלאה של המודלים הזמינים מופיעה בתיעוד של Gemma.
הגדרות של מאגר צמתים
במדריך הזה השתמשנו במאגר צמתים עם מארח יחיד. אפשר גם ליצור מאגרי צמתים של פרוסות TPU עם כמה מארחים או מאגרי צמתים של כמה פרוסות, בהתאם לצרכים.
בכרטיסיות הבאות מוצגות הוראות ליצירת מאגרי צמתים עם כמה מארחים וכמה פרוסות:
כמה מארחים
ב-Cloud Shell, מריצים את הפקודה הבאה:
gcloud container node-pools create jax-tpu-multihost1 \ --cluster=${CLUSTER_NAME} \ --machine-type=ct6e-standard-4t \ --num-nodes=2 \ --tpu-topology=2x4 \ --location=${REGION} \ --node-locations=${ZONE}GKE יוצר מאגר צמתים של TPU Trillium עם טופולוגיה של
2x4ושני צמתים.פותחים את הגדרת המשרה
training_multihost_jobset.yaml:פורסים את משימת הכוונון העדין:
envsubst < training_multihost_jobset.yaml | kubectl apply -f -
Multislice
ב-Cloud Shell, מריצים את הפקודה הבאה:
gcloud container node-pools create jax-tpu-multihost1 \ --cluster=${CLUSTER_NAME} \ --machine-type=ct6e-standard-4t \ --num-nodes=2 \ --tpu-topology=2x4 \ --location=${REGION} \ --node-locations=${ZONE} gcloud container node-pools create jax-tpu-multihost2 \ --cluster=${CLUSTER_NAME} \ --machine-type=ct6e-standard-4t \ --num-nodes=2 \ --tpu-topology=2x4 \ --location=${REGION} \ --node-locations=${ZONE}GKE יוצר שני מאגרי צמתים של TPU Trillium. לכל מאגר צמתים יש
2x4טופולוגיה ושני צמתים.פותחים את הגדרת המשרה
training_multislice_jobset.yaml:פורסים את משימת הכוונון העדין:
envsubst < training_multislice_jobset.yaml | kubectl apply -f -
ניתוח ביצועים ואופטימיזציה
כדי לנתח את הביצועים של כוונון עדין של למידת מכונה ולבצע אופטימיזציה שלהם, אפשר להשתמש ב-XProf. XProf הוא חבילת כלים שיוצרת פרופילים של עומסי עבודה של ML שנבנו באמצעות JAX, TensorFlow או PyTorch/XLA, ובודקת אותם. הכלי XProf מציג עקבות של ביצוע, שימוש בזיכרון ונתונים אחרים, וכך מאפשר לכם לשפר את המודלים ואת הגדרות האימון כדי להשיג יעילות טובה יותר ואימון מהיר יותר.
כדי לנתח את הביצועים של עומס העבודה של הכוונון העדין באמצעות XProf, צריך לבצע את השלבים הבאים בקטע הזה:
- מתקינים את חבילת
xprof. משנים את סקריפט ההכשרה כדי להפעיל את שרת XProf. - משנים את מניפסט העבודה של Kubernetes כך שיכלול נקודת טעינה של נפח ליומני XProf.
- נותנים לחשבון השירות הרשאות לכתוב יומני XProf לקטגוריה של Cloud Storage.
- מריצים את XProf בתוך ה-Pod ומגדירים העברת יציאות כדי לגשת ללוח הבקרה של XProf.
התקנת חבילת XProf
עוברים לספרייה שמכילה את הדוגמאות של XProf:
cd ai-ml/llm-training-jax-tpu-gemma3/xprof-enabledיוצרים את קובץ האימג' של Docker ומעבירים אותו בדחיפה למאגר אימג'ים:
export REPOSITORY=REPOSITORY_NAME export IMAGE_NAME="jax-gemma3-training-xp" export IMAGE_TAG="latest" export DOCKERFILE_PATH="./Dockerfile" export IMAGE_URI="${REGION}-docker.pkg.dev/${PROJECT_ID}/${REPOSITORY}/${IMAGE_NAME}:${IMAGE_TAG}" docker build -t "${IMAGE_URI}" -f "${DOCKERFILE_PATH}" . gcloud auth configure-docker "${REGION}-docker.pkg.dev" -q docker push "${IMAGE_URI}"מחליפים את
REPOSITORY_NAMEבשם המאגר שלכם ב-Artifact Registry.מריצים את הסקריפט
Dockerfile:קובץ ה-Dockerfile הזה מתקין יחסי תלות של XProf.
מעתיקים את סקריפט הכוונון העדין אל הקונטיינר.
בקטע הזה, יוצרים ומחילים מניפסט של Kubernetes Job שכולל את נקודות הטעינה (mount) של נפח האחסון שנדרשות ליומני XProf.
פותחים את הגדרת המשרה
training_singlehost.yaml:החלת המניפסט:
envsubst < training_singlehost.yaml | kubectl apply -f -
מתן הרשאות לחשבון השירות לכתוב יומנים של XProf
כדי לאפשר לחשבון השירות לכתוב ולקרוא, מוסיפים את התפקיד
"roles/storage.objectUser":export GSA_NAME="GSA_NAME" # Same as used in initial setup # Automatically get the current project ID export PROJECT_ID=$(gcloud config get-value project) # Cloud Storage Bucket details export XPROF_GCS_BUCKET_NAME="XPROF_GCS_BUCKET_NAME" # Derived Variables export GSA_EMAIL="${GSA_NAME}@${PROJECT_ID}.iam.gserviceaccount.com" gcloud storage buckets add-iam-policy-binding "gs://${XPROF_GCS_BUCKET_NAME}" \ --member="serviceAccount:${GSA_EMAIL}" \ --role="roles/storage.objectUser" \ --project="${PROJECT_ID}"מחליפים את מה שכתוב בשדות הבאים:
-
GSA_NAME: השם של חשבון השירות של Google שרוצים להעניק לו את התפקיד. -
XPROF_GCS_BUCKET_NAME: שם הקטגוריה שרוצים להעניק לה את התפקיד.
-
מריצים את XProf בתוך ה-Pod:
kubectl exec POD_NAME -c training-container -it -- bash # exec into the container xprof --port 9001 --logdir /xprof # start xprofמחליפים את
POD_NAMEבשם ה-Pod.
גישה למרכז הבקרה של XProf
מגדירים העברה ליציאה אחרת לשרת XProf ב-Pod:
kubectl port-forward POD_NAME 9001:9001בסרגל הכתובות של הדפדפן, מזינים את הטקסט הבא:
http://localhost:9001/הכלי XProf Trace Viewer ייפתח.
בחלון TensorBoard, לוחצים על Capture profile (לכידת פרופיל).
בשדה Profile Service URL(s) or TPU name (כתובות URL של שירות פרופילים או שם TPU), מזינים
localhost:9002.כדי ללכוד פרטים נוספים, בקטע Host Trace (TraceMe) Level (רמת מעקב אחר המארח (TraceMe)), בוחרים באפשרות verbose (מפורט) ומפעילים את האפשרות Python trace logging (רישום מעקב של Python).
כדי להציג את לוח הבקרה, לוחצים על Capture (צילום).
TensorBoard מתעד את הפרופיל ומאפשר לכם לנתח את הביצועים של סקריפט האימון. בתרשים מוצג ציר הזמן של הביצועים עבור פרופילי הביצועים של TPU ו-CPU:
אפשרויות נוספות ליצירת פרופילים לניתוח הביצועים של עומס העבודה של האימון מפורטות במאמר בנושא יצירת פרופילים של חישובים במאמרי העזרה של JAX.
כוונון עדין בסביבות ייצור
במדריך הזה למדתם איך לבדוק אימון מבוסס JAX בסביבה מבוזרת. כדי לבצע כוונון עדין אופטימלי של מודלים גדולים של שפה בסביבת הייצור, צריך להשתמש בספרייה Maxtext. אם אתם רוצים להשתמש במודלים של דיפוזיה, אתם יכולים להשתמש בהטמעות של Maxdiffusion.
כדי למזער את אובדן ההתקדמות במהלך תקלה, מומלץ להגדיר יצירת נקודות ביקורת (checkpointing) של עומסי עבודה ארוכי טווח של אימון או כוונון עדין בסביבת ייצור. מידע נוסף על הגדרת נקודות ביקורת רב-שכבתיות זמין במאמר אימון מודלים של למידת מכונה בקנה מידה גדול ב-GKE באמצעות נקודות ביקורת רב-שכבתיות.
הסרת המשאבים
כדי להימנע מחיובים בחשבון Google Cloud בגלל השימוש במשאבים שנעשה במסגרת המדריך הזה, אפשר למחוק את הפרויקט שמכיל את המשאבים, או להשאיר את הפרויקט ולמחוק את המשאבים בנפרד.
מחיקת המשאבים הבודדים
כדי להימנע מחיובים בחשבון Google Cloud על המשאבים שבהם השתמשתם במדריך הזה, אתם יכולים למחוק את הפרויקט שמכיל את המשאבים, או להשאיר את הפרויקט ולמחוק את המשאבים הספציפיים באמצעות הפקודות הבאות:
מוחקים את המשאבים שיצרתם במדריך הזה:
gcloud container clusters delete ${CLUSTER_NAME} --location=${REGION} gcloud storage rm --recursive gs://${GCS_BUCKET_NAME} gcloud artifacts docker images delete ${IMAGE_URI} --delete-tagsאם אתם לא צריכים את הנתונים שנוצרו על ידי XProf, אתם יכולים להסיר את קטגוריית Cloud Storage שבה נעשה שימוש על ידי XProf:
gcloud storage rm --recursive gs://${XPROF_GCS_BUCKET_NAME}
המאמרים הבאים
- מידע נוסף על TPU ב-GKE
- אפשר לעיין במאגר JAX.