רקע
עומס עבודה באצווה הוא תהליך שבדרך כלל מתוכנן כך שיהיה לו נקודת התחלה ונקודת סיום. כדאי לשקול שימוש בעומסי עבודה של אצווה ב-GKE אם הארכיטקטורה שלכם כוללת קליטה, עיבוד ופלט של נתונים במקום שימוש בנתונים גולמיים. בתחומים כמו למידת מכונה, בינה מלאכותית (AI) ומחשוב עתיר ביצועים (HPC), יש סוגים שונים של עומסי עבודה באצווה, כמו אימון מודלים אופליין, חיזוי באצווה, ניתוח נתונים, סימולציה של מערכות פיזיות ועיבוד וידאו.
אם תתכננו עומסי עבודה (workloads) של אצוות בתוך קונטיינרים, תוכלו ליהנות מהיתרונות הבאים של GKE:
- תקן פתוח, קהילה רחבה ושירות מנוהל.
- יעילות בעלויות שנובעת מתיאום יעיל של עומסי עבודה ותשתית וממשאבי מחשוב ייעודיים.
- בידוד וניידות של יצירת קונטיינרים, שמאפשרים להשתמש בענן כקיבולת עודפת תוך שמירה על אבטחת מידע.
- זמינות של קיבולת זמנית, ואחריה הקטנה מהירה של אשכולות GKE.
מטרות
המדריך הזה מיועד למהנדסי למידת מכונה או למדעני נתונים שרוצים ללמוד איך להריץ עומסי עבודה של למידת מכונה באצווה ב-GKE, בארכיטקטורה הבאה שהיא חסכונית וניתנת להרחבה:
במדריך הזה מוסבר איך:
עלויות
במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:
כדי להעריך את ההוצאות בהתאם לתחזית השימוש שלכם, אתם יכולים להיעזר במחשבון העלויות.
לחצו על תראו לי איך כדי לקרוא הסבר מפורט על המשימה ישירות במסוף Google Cloud :
לפני שמתחילים
- נכנסים לחשבון 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 Compute Engine, GKE, and Filestore APIs.
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 Compute Engine, GKE, and Filestore APIs.
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.-
במסוף Google Cloud , מפעילים את Cloud Shell.
בחלק התחתון של Google Cloud המסוף יתחיל סשן של Cloud Shell ותופיע הודעה של שורת הפקודה. Cloud Shell היא סביבת מעטפת שבה ה-CLI של Google Cloud מותקן ומוגדרים ערכים לפרויקט הקיים. הסשן יופעל תוך כמה שניות.
הכנת הסביבה
משכפלים את המאגר לדוגמה שבו השתמשנו במדריך הזה:
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples cd kubernetes-engine-samples/batch/aiml-workloadsיוצרים אשכול GKE Autopilot:
gcloud container clusters create-auto batch-aiml \ --location=us-central1השלב הזה יכול להימשך עד 5 דקות.
הגדרת אחסון של מערך נתונים באמצעות Network File System (NFS)
עומס העבודה של למידת המכונה דורש פתרון אחסון למערכי הנתונים ולקובצי הפלט. בקטע הזה יוצרים מופע של Filestore ומעניקים גישה למופע באמצעות PersistentVolume ו-PersistentVolumeClaim.
מידע נוסף זמין במאמרים איך מתכננים אסטרטגיית אחסון אופטימלית ואיך ניגשים למופעי Filestore מאשכולות GKE.
יצירת מופע Filestore
יוצרים מכונת Filestore:
gcloud filestore instances create batch-aiml-filestore \ --zone=us-central1-b \ --tier=BASIC_HDD \ --file-share=name="NFSVol",capacity=1TB \ --network=name="default"הפקודה הזו מציינת את האפשרויות הבאות:
tier: רמת השירות של מופע Filestore. בדוגמה הזו נעשה שימוש ברמה הבסיסית. מידע על האפשרויות האחרות זמין במאמר מסלולי שירות.
network=name: השם של רשת הענן הווירטואלי הפרטי (VPC) של מכונת Filestore. אשכול GKE צריך להיות באותה רשת VPC כמו מכונת Filestore.
capacity: הגודל הרצוי של אמצעי האחסון. מציינים את ערך האחסון באחת מהיחידות הנתמכות שמתוארות במאמר בנושא כמויות משאבים.
מוודאים שמופע Filestore נפרס:
gcloud filestore instances list \ --project=PROJECT_ID \ --zone=us-central1-bמחליפים את
PROJECT_IDבמזהה הפרויקט ב- Google Cloud.הפלט אמור להיראות כך:
INSTANCE_NAME: batch-aiml-filestore LOCATION: us-central1-b TIER: BASIC_HDD CAPACITY_GB: 1024 FILE_SHARE_NAME: NFSVol IP_ADDRESS: 203.0.113.54 STATE: READY CREATE_TIME: 2022-03-15T18:23:51שימו לב לערך בשדה
IP_ADDRESSכדי להשתמש בו בקטע הבא.
יצירת נפח אחסון מתמיד
מפרט של PersistentVolume ב-Kubernetes מאפשר לאשכול GKE להתחבר למופע Filestore.
מעדכנים את הקובץ
kubernetes-manifests/persistent-volume.yamlעם כתובת ה-IP של מופע Filestore:sed -i "\ s/<FILESTORE_IP_ADDRESS>/IP_ADDRESS/g" \ kubernetes-manifests/persistent-volume.yamlמחליפים את
IP_ADDRESSבכתובת ה-IP שרשמתם כשיצרתם את מכונת Filestore בקטע הקודם.פריסת נפח האחסון המתמיד:
kubectl apply -f kubernetes-manifests/persistent-volume.yaml
יצירת בקשה לנפח אחסון מתמיד
PersistentVolumeClaim ב-Kubernetes מאפשר לקבוצות Pod ולמשימות ב-Kubernetes לגשת למשאבי האחסון של PersistentVolume.
פורסים את PersistentVolumeClaim:
kubectl apply -f kubernetes-manifests/persistent-volume-claim.yaml
שימוש ב-PersistentVolumeClaim
אחרי שמגדירים את PersistentVolume ואת PersistentVolumeClaim באשכול GKE, אפשר להגדיר את שרת Redis ואת משימות האצווה כך שישתמשו ב-PersistentVolumeClaim. הוא מופיע כנפח אחסון שאפשר לטעון.
בודקים את הקבצים kubernetes-manifests/redis-pod.yaml ו-kubernetes-manifests/workload.yaml.
הגדרות המניפסט דומות להגדרות הבאות:
spec:
…
containers:
- name: workload
image: "us-central1-docker.pkg.dev/gke-batch-aiml/batch-aiml-docker-repo/workload"
volumeMounts:
- mountPath: /mnt/fileserver
name: workload-pvc
volumes:
- name: workload-pvc
persistentVolumeClaim:
claimName: fileserver-claim
readOnly: false
במניפסט הזה:
-
spec.volumesמציין את PersistentVolumeClaim לשימוש. -
spec.containers.volumeMountsמציין את נתיב הקובץ המקומי שדרכו ה-Pod יכול לגשת לשיתוף הקבצים של Filestore.
הגדרת תור משימות של Redis
עומס העבודה מעבד נתונים באצוות כדי לאמן באופן איטרטיבי מודל לזיהוי הונאות. כדי לנהל את קבוצות הנתונים שעוברות כרגע עיבוד או שנמצאות עדיין בתור, צריך לפרוס את שרת Redis באשכול GKE.
במדריך הזה, מתחילים מכונה אחת של Redis. כדי לפרוס את Redis בצורה שניתנת להרחבה ועם יתירות, אפשר לעיין במאמר יצירת אפליקציית אינטרנט מרובת שכבות באמצעות Redis ו-PHP.
פורסים את המפרט של שרת Redis.
kubectl apply -f kubernetes-manifests/redis-pod.yamlמוודאים שה-Pod פועל:
kubectl get podsהפלט אמור להיראות כך:
NAME READY STATUS RESTARTS AGE redis-leader 1/1 Running 0 118sיכול להיות שיחלפו עד שתי דקות עד שה-Pod יתחיל לפעול.
מעבירים את הקבצים שמכילים את מערכי הנתונים לאימון ולבדיקה לנפח NFS.
sh scripts/transfer-datasets.shהסקריפט הזה מעתיק את הקבצים ממאגר קוד לדוגמה לספרייה
/mnt/fileserver/datasets/ב-Podredis-leader.מאכלסים את התור של Redis.
sh scripts/queue-jobs.shהסקריפט הזה מעביר את נתיבי הקבצים של מערכי הנתונים לאימון לרשימה בשם
datasetsבמסד הנתונים של Redis. עומס העבודה ישתמש בתור הזה כדי לאתר את מערך הנתונים הבא לעיבוד.פורסים את השירות כדי ששרת Redis יהיה ניתן לגילוי באשכול GKE.
kubectl apply -f ./kubernetes-manifests/redis-service.yaml
הפעלת עומס העבודה של האצווה
בשלב הזה, הכנתם את אשכול GKE, את תור העבודות של Redis ואת שיתוף הקבצים. עכשיו אפשר להריץ את עומס העבודה באצווה.
בקטע הזה משתמשים בקובץ אימג' של קונטיינר של עומס עבודה לדוגמה כדי לאמן מודל לזיהוי הונאות באמצעות אצוות של נתוני עסקאות פיננסיות. תהליך האימון יכול להיות מסוכם באופן הבא:
לקוח Redis תובע בעלות על משימות (נתיבי קבצים למערכי נתונים) בתור של Redis, ומסיר אותן מהתור כשהן מסתיימות.
מחלקת ניהול אימון מודלים,
FraudDetectionModelTrainer, טוענת אצווה חדשה של נתונים, ואופציונלית, מצב שמור של מודל למידת מכונה. מערך הנתונים משמש לשיפור המודל (תהליך שנקרא אימון"התנעה חמה").המצב החדש של המודל ודוח עם פרטי האצווה וציוני הביצועים נשמרים בנפח Filestore NFS, שאפשר לגשת אליו באשכול GKE באמצעות PersistentVolumeClaim.
מידע נוסף זמין בקוד המקור.
הגדרת העבודה
קובץ המניפסט הבא מתאר את משימת Kubernetes עבור תמונת עומס העבודה של האצווה. ב-Kubernetes, בקר משימות יוצר פוד אחד או יותר ועוזר לוודא שהם מבצעים משימה ספציפית בהצלחה.
פריסת עומס העבודה
פריסת המשימה:
kubectl apply -f ./kubernetes-manifests/workload.yamlבודקים אם הסטטוס של
workload-XXXPod הואCompleted:watch kubectl get podsהתהליך עשוי להימשך כמה שניות. אפשר לחזור לשורת הפקודה בלחיצה על
Ctrl+C.הפלט אמור להיראות כך:
NAME READY STATUS RESTARTS AGE redis-leader 1/1 Running 0 16m workload-4p55d 0/1 Completed 0 83sבודקים את היומנים מהמשימה
workload:kubectl logs job/workloadהפלט אמור להיראות כך:
Worker with sessionID: b50f9459-ce7f-4da8-9f84-0ab5c3233a72 Initial queue state: empty=False Processing dataset: datasets/training/2018-04-04.pkl Processing dataset: datasets/training/2018-04-03.pkl Processing dataset: datasets/training/2018-04-02.pkl Processing dataset: datasets/training/2018-04-01.pkl Queue empty, exitingקבצי
.pklהם סריאליזציות של מערכי נתונים שמכילים קבוצה של עסקאות בכרטיסי אשראי, שמסומנות כעסקאות תקינות או כתרמיות. העבודהworkloadחוזרת על עצמה בקבצים האלה, פורקת את מערכי הנתונים ומשתמשת בהם כדי לאמן את מודל למידת המכונה, לפני שהיא מסירה אותם מתור Redis. עומס העבודה ממשיך לעבד את הנתונים באצוות, עד שהתור של Redis מתרוקן, ואז הוא יוצא בהצלחה.
עיון בנפח NFS
במהלך הפעולה, עומס העבודה יוצר קבצים בנפח ה-NFS המצורף, שאפשר לגשת אליהם בכל האשכול באמצעות משימות אצווה אחרות או אפליקציות אונליין.
מפרטים את הקבצים שנוצרו על ידי עומס העבודה:
kubectl exec --stdin --tty redis-leader -- /bin/sh -c "ls -1 /mnt/fileserver/output"הפלט צריך להיות:
model_cpt_2018-04-01.pkl model_cpt_2018-04-02.pkl model_cpt_2018-04-03.pkl model_cpt_2018-04-04.pkl report.txtנקודות ביקורת למודל שאומן (שמות קבצים כמו
model_cpt_XXX.pkl) ודוח על ביצועי המודל (report.txt) נוצרו בספרייה/mnt/fileserver/outputבנפח האחסון של NFS.בודקים את דוח הביצועים של המודל:
kubectl exec --stdin --tty redis-leader -- /bin/sh -c "cat /mnt/fileserver/output/report.txt"קטע מהפלט:
Report generated on: 2022-02-09 14:19:42.303619 Training dataset: 2018-04-04.pkl Model checkpoint: model_cpt_2018-04-04.pkl --- Accuracy on training data: 0.9981112277019937 Accuracy on testing data: 0.9977204434773599הקובץ מכיל רשומות עם פרטים על זמן האימון, מערך הנתונים שבו נעשה שימוש, רמת הדיוק שהושגה ושם הקובץ של נקודת הבדיקה של המודל שמשויכת לאימון.
מידע נוסף על נפחי אחסון של NFS זמין במדריכים של Filestore.
הסרת המשאבים
כדי להימנע מחיובים בחשבון Google Cloud בגלל השימוש במשאבים שנעשה במסגרת המדריך הזה, אפשר למחוק את הפרויקט שמכיל את המשאבים, או להשאיר את הפרויקט ולמחוק את המשאבים בנפרד.
הסרת משאבים בודדים
כדי להסיר את המשאבים הבודדים שנוצרו במדריך הזה, מריצים את הפקודות הבאות.
מחיקת האשכול:
gcloud container clusters delete batch-aiml \ --location=us-central1מוחקים את מופע Filestore:
gcloud filestore instances delete batch-aiml-filestore \ --zone=us-central1-b
מחיקת הפרויקט
- במסוף Google Cloud , נכנסים לדף Manage resources.
- ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
- כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.
המאמרים הבאים
אפשר לעיין בפרטים נוספים על Persistent Volumes.
איך משתמשים במכונות וירטואליות מסוג Spot כדי להריץ עומסי עבודה עמידים בכשלים
אפשר לעיין במדריכים נוספים בנושא Kubernetes Engine.
כדאי להעמיק את הקריאה ולהכיר דוגמאות לארכיטקטורות, תרשימים ושיטות מומלצות בנושאי Google Cloud. כל אלה זמינים במרכז הארכיטקטורה של Cloud.