בדף הזה מוסבר איך להריץ משימת אימון במופע של קונטיינרים של למידה עמוקה (Deep Learning), ולהריץ את קובץ האימג' של הקונטיינר הזה באשכול Google Kubernetes Engine.
לפני שמתחילים
לפני שמתחילים, חשוב לוודא שביצעתם את השלבים הבאים:
משלימים את שלבי ההגדרה בקטע 'לפני שמתחילים' במאמר תחילת העבודה עם קונטיינר מקומי של למידה עמוקה.
מוודאים שהחיוב מופעל בפרויקט Google Cloud .
מפעילים את ממשקי ה-API של Google Kubernetes Engine, Compute Engine ו-Artifact Registry.
פותחים את כלי שורת הפקודה.
אפשר לפעול לפי המדריך הזה באמצעות Cloud Shell או באמצעות כלים של שורת הפקודה באופן מקומי. ב-Cloud Shell מותקנים מראש כלי שורת הפקודה gcloud, docker ו-kubectl שבהם נעשה שימוש במדריך הזה. אם אתם משתמשים ב-Cloud Shell, אתם לא צריכים להתקין את כלי שורת הפקודה האלה בתחנת העבודה שלכם.
Cloud Shell
כדי להשתמש ב-Cloud Shell, צריך לבצע את השלבים הבאים.
עוברים אל Google Cloud המסוף.
לוחצים על הלחצן Activate Cloud Shell (הפעלת Cloud Shell) בחלק העליון של חלון המסוף.

בחלק התחתון של המסוף ייפתח סשן של Cloud Shell בתוך מסגרת חדשה, ותופיע הודעה של שורת הפקודה.

שורת פקודה מקומית
כדי להשתמש בשורת הפקודה המקומית, פועלים לפי השלבים הבאים.
באמצעות ה-CLI של gcloud, מתקינים את כלי שורת הפקודה Kubernetes.
kubectlמשמש לתקשורת עם Kubernetes, שהיא מערכת תזמור האשכולות של אשכולות קונטיינרים ללמידה עמוקה (Deep Learning):gcloud components install kubectlבמסגרת השלבים הראשונים, התקנתם את Google Cloud CLI ואת Docker.
יצירת אשכול GKE
מריצים את הפקודה הבאה כדי ליצור אשכול עם שני צמתים ב-GKE בשם pytorch-training-cluster:
gcloud container clusters create pytorch-training-cluster \
--num-nodes=2 \
--zone=us-west1-b \
--accelerator="type=nvidia-tesla-p100,count=1" \
--machine-type="n1-highmem-2" \
--scopes="gke-default,storage-rw"
מידע נוסף על ההגדרות האלה זמין במאמר בנושא יצירת אשכולות להפעלת קונטיינרים.
יכול להיות שיחלפו כמה דקות עד שהאשכול ייווצר.
לחלופין, במקום ליצור אשכול, אפשר להשתמש באשכול קיים בפרויקט Google Cloud . אם עושים את זה, יכול להיות שיהיה צורך להריץ את הפקודה הבאה כדי לוודא שלכלי kubectl של שורת הפקודה יש את פרטי הכניסה המתאימים לגישה לאשכול:
gcloud container clusters get-credentials YOUR_EXISTING_CLUSTER
לאחר מכן, מתקינים את הדרייברים של מכשיר ה-GPU של NVIDIA.
יצירת קובץ Dockerfile
יש הרבה דרכים ליצור קובץ אימג' של קונטיינר.
בשלבים הבאים נסביר איך ליצור קובץ כזה כדי להריץ סקריפט Python בשם trainer.py.
כדי לראות רשימה של תמונות קונטיינרים זמינות:
gcloud container images list \
--repository="us-docker.pkg.dev/deeplearning-platform-release/gcr.io"
כדאי לעבור אל בחירת מאגר תגים כדי לבחור את מאגר התגים הרצוי.
בדוגמה הבאה מוסבר איך למקם סקריפט Python בשם trainer.py בסוג מסוים של קונטיינר ללמידה עמוקה של PyTorch.
כדי ליצור את קובץ ה-Dockerfile, כותבים את הפקודות הבאות בקובץ בשם Dockerfile. בשלב הזה אנחנו מניחים שיש לכם קוד לאימון מודל למידת מכונה בספרייה בשם model-training-code, ושמודול ה-Python הראשי בספרייה הזו נקרא trainer.py. בתרחיש הזה, הקונטיינר יוסר כשהעבודה תסתיים, ולכן צריך להגדיר את סקריפט האימון כך שהפלט יהיה ב-Cloud Storage (ראו דוגמה לסקריפט שמוציא פלט ב-Cloud Storage) או באחסון מתמיד.
FROM us-docker.pkg.dev/deeplearning-platform-release/gcr.io/pytorch-gpu
COPY model-training-code /train
CMD ["python", "/train/trainer.py"]
יצירה והעלאה של קובץ אימג' של קונטיינר
כדי ליצור ולהעלות את קובץ האימג' של קונטיינר ל-Artifact Registry, משתמשים בפקודות הבאות:
export PROJECT_ID=$(gcloud config list project --format "value(core.project)")
export IMAGE_REPO_NAME=pytorch_custom_container
export IMAGE_TAG=$(date +%Y%m%d_%H%M%S)
export IMAGE_URI=us-docker.pkg.dev/$PROJECT_ID/$IMAGE_REPO_NAME:$IMAGE_TAG
docker build -f Dockerfile -t $IMAGE_URI ./
docker push $IMAGE_URI
פריסת האפליקציה
יוצרים קובץ בשם pod.yaml עם התוכן הבא, ומחליפים את IMAGE_URI ב-URI של האימג'.
apiVersion: v1
kind: Pod
metadata:
name: gke-training-pod
spec:
containers:
- name: my-custom-container
image: IMAGE_URI
resources:
limits:
nvidia.com/gpu: 1
משתמשים בכלי שורת הפקודה kubectl כדי להריץ את הפקודה הבאה ולפרוס את האפליקציה:
kubectl apply -f ./pod.yaml
כדי לעקוב אחרי הסטטוס של ה-Pod, מריצים את הפקודה הבאה:
kubectl describe pod gke-training-pod