אימון בקונטיינר באמצעות Google Kubernetes Engine

בדף הזה מוסבר איך להריץ משימת אימון במופע של קונטיינרים של למידה עמוקה (Deep Learning), ולהריץ את קובץ האימג' של הקונטיינר הזה באשכול Google Kubernetes Engine.

לפני שמתחילים

לפני שמתחילים, חשוב לוודא שביצעתם את השלבים הבאים:

  1. משלימים את שלבי ההגדרה בקטע 'לפני שמתחילים' במאמר תחילת העבודה עם קונטיינר מקומי של למידה עמוקה.

  2. מוודאים שהחיוב מופעל בפרויקט Google Cloud .

    איך מפעילים את החיוב

  3. מפעילים את ממשקי ה-API של Google Kubernetes Engine,‏ Compute Engine ו-Artifact Registry.

    הפעלת ממשקי ה-API

פותחים את כלי שורת הפקודה.

אפשר לפעול לפי המדריך הזה באמצעות Cloud Shell או באמצעות כלים של שורת הפקודה באופן מקומי. ב-Cloud Shell מותקנים מראש כלי שורת הפקודה gcloud, docker ו-kubectl שבהם נעשה שימוש במדריך הזה. אם אתם משתמשים ב-Cloud Shell, אתם לא צריכים להתקין את כלי שורת הפקודה האלה בתחנת העבודה שלכם.

Cloud Shell

כדי להשתמש ב-Cloud Shell, צריך לבצע את השלבים הבאים.

  1. עוברים אל Google Cloud המסוף.

  2. לוחצים על הלחצן Activate Cloud Shell (הפעלת Cloud Shell) בחלק העליון של חלון המסוף.

    קונסולת Google Cloud Platform

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

    סשן Cloud Shell

שורת פקודה מקומית

כדי להשתמש בשורת הפקודה המקומית, פועלים לפי השלבים הבאים.

  1. באמצעות ה-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