הרצת עומסי עבודה של TPU בקונטיינר של Docker
מאגרי Docker מאפשרים להגדיר אפליקציות בקלות רבה יותר, על ידי שילוב הקוד וכל יחסי התלות הנדרשים בחבילה אחת שניתן להפיץ. אתם יכולים להריץ קונטיינרים של Docker בתוך מכונות וירטואליות של TPU כדי לפשט את ההגדרה והשיתוף של אפליקציות Cloud TPU. במאמר הזה מוסבר איך להגדיר קונטיינר של Docker לכל framework של ML שנתמכת ב-Cloud TPU.
אימון מודל PyTorch בקונטיינר של Docker
במאמר PyTorch ב-Cloud TPU מתוארות ספריות PyTorch ל-TPU, ויש בו קישורים למסמכי תיעוד לקבלת חבילות Python וקובצי אימג' של Docker. אתם יכולים להשתמש ישירות ב-TorchTPU (ראו תחילת העבודה ב-GKE לקובץ האימג' של הקונטיינר בגרסה שזמינה לכולם) או להשתמש בספריית העזר TorchTitan כדי ליצור ולהריץ עומסי עבודה של אימון בקונטיינרים.
אימון מודל JAX בקונטיינר של Docker
לפני שמריצים את הפקודות הבאות, צריך ליצור את משתני הסביבה הבאים:
export PROJECT_ID=your-project-id export TPU_NAME=your-tpu-name export ZONE=us-west4-a export ACCELERATOR_TYPE=v5litepod-8 export RUNTIME_VERSION=v2-alpha-tpuv5-lite
תיאורים של משתני סביבה
-
PROJECT_ID: מזהה הפרויקט ב- Google Cloud . משתמשים בפרויקט קיים או יוצרים פרויקט חדש. -
TPU_NAME: השם של ה-TPU. -
ZONE: האזור שבו יוצרים את ה-TPU VM. מידע נוסף על אזורים נתמכים זמין במאמר אזורים ותחומים של TPU. -
ACCELERATOR_TYPE: סוג המאיץ מציין את הגרסה והגודל של ה-Cloud TPU שרוצים ליצור. למידע נוסף על סוגי המאיצים שנתמכים בכל גרסת TPU, ראו גרסאות TPU. -
RUNTIME_VERSION: גרסת התוכנה של Cloud TPU.
מכשיר TPU
יצירת ה-TPU VM
gcloud compute tpus tpu-vm create $TPU_NAME \ --zone=$ZONE \ --accelerator-type=$ACCELERATOR_TYPE \ --version=$RUNTIME_VERSIONהתחברות ל-TPU VM באמצעות SSH
gcloud compute tpus tpu-vm ssh $TPU_NAME --zone=$ZONEהפעלת הדימון של Docker ב-TPU VM
sudo systemctl start dockerהפעלת קונטיינר Docker
sudo docker run --net=host -ti --rm --name your-container-name \ --privileged us-central1-docker.pkg.dev/tpu-pytorch-releases/docker/xla:r2.6.0_3.10_tpuvm_cxx11 \ bashהתקנת JAX
pip install jax[tpu]התקנת FLAX
pip install --upgrade clu git clone https://github.com/google/flax.git pip install --user -e flaxמתקינים את החבילות
tensorflowו-tensorflow-datasetspip install tensorflow pip install tensorflow-datasetsהרצת סקריפט האימון של FLAX MNIST
cd flax/examples/mnist python3 main.py --workdir=/tmp/mnist \ --config=configs/default.py \ --config.learning_rate=0.05 \ --config.num_epochs=5
כשהסקריפט לאימון מסתיים, מנקים את המשאבים.
- מקלידים
exitכדי לצאת מהמאגר של Docker. - מקלידים
exitכדי לצאת מה-TPU VM. מחיקת ה-TPU VM
gcloud compute tpus tpu-vm delete $TPU_NAME --zone=$ZONE
פרוסת TPU
כשמריצים קוד JAX בפרוסת TPU, צריך להריץ את קוד ה-JAX בכל ה-TPU workers בו-זמנית. אחת מהדרכים לעשות זאת היא להשתמש בפקודה gcloud compute tpus tpu-vm ssh עם הדגלים --worker=all ו---command. בשלבים הבאים מוסבר איך ליצור קובץ אימג' של Docker כדי להקל על ההגדרה של כל TPU worker.
יוצרים קובץ בשם
Dockerfileבספרייה הנוכחית ומדביקים את הטקסט הבא:FROM python:3.10 RUN pip install jax[tpu] RUN pip install --upgrade clu RUN git clone https://github.com/google/flax.git RUN pip install --user -e flax RUN pip install tensorflow RUN pip install tensorflow-datasets WORKDIR ./flax/examples/mnistהכנת Artifact Registry
gcloud artifacts repositories create your-repo \ --repository-format=docker \ --location=europe-west4 --description="Docker repository" \ --project=$PROJECT_ID gcloud artifacts repositories list \ --project=$PROJECT_ID gcloud auth configure-docker europe-west4-docker.pkg.devיצירת קובץ האימג' של Docker
docker build -t your-image-name .מוסיפים תג לקובץ האימג' של Docker לפני שמעבירים אותו בדחיפה ל-Artifact Registry. מידע נוסף על העבודה עם Artifact Registry זמין במאמר עבודה עם קובצי אימג' של קונטיינרים.
docker tag your-image-name europe-west4-docker.pkg.dev/$PROJECT_ID/your-repo/your-image-name:your-tagהעברת קובץ האימג' של Docker ל-Artifact Registry
docker push europe-west4-docker.pkg.dev/$PROJECT_ID/your-repo/your-image-name:your-tagיצירת TPU VM
gcloud compute tpus tpu-vm create $TPU_NAME \ --zone=$ZONE \ --accelerator-type=$ACCELERATOR_TYPE \ --version=$RUNTIME_VERSIONמשיכת קובץ האימג' של Docker מ-Artifact Registry בכל ה-TPU workers
gcloud compute tpus tpu-vm ssh $TPU_NAME --worker=all \ --zone=$ZONE \ --command='sudo usermod -a -G docker ${USER}'gcloud compute tpus tpu-vm ssh $TPU_NAME --worker=all \ --zone=$ZONE \ --command="gcloud auth configure-docker europe-west4-docker.pkg.dev --quiet"gcloud compute tpus tpu-vm ssh $TPU_NAME --worker=all \ --zone=$ZONE \ --command="docker pull europe-west4-docker.pkg.dev/$PROJECT_ID/your-repo/your-image-name:your-tag"הרצת הקונטיינר בכל ה-TPU workers
gcloud compute tpus tpu-vm ssh $TPU_NAME --worker=all \ --zone=$ZONE \ --command="docker run -ti -d --privileged --net=host --name your-container-name europe-west4-docker.pkg.dev/$PROJECT_ID/your-repo/your-image-name:your-tag bash"הרצת סקריפט האימון בכל ה-TPU workers
gcloud compute tpus tpu-vm ssh $TPU_NAME --worker=all \ --zone=$ZONE \ --command="docker exec --privileged your-container-name python3 main.py --workdir=/tmp/mnist \ --config=configs/default.py \ --config.learning_rate=0.05 \ --config.num_epochs=5"
כשהסקריפט לאימון מסתיים, מנקים את המשאבים.
סגירת הקונטיינר בכל ה-workers
gcloud compute tpus tpu-vm ssh $TPU_NAME --worker=all \ --zone=$ZONE \ --command="docker kill your-container-name"מחיקת ה-TPU VM
gcloud compute tpus tpu-vm delete $TPU_NAME \ --zone=$ZONE