הרצת עומסי עבודה של TPU בקונטיינר של Docker
קונטיינרים של Docker מקלים על הגדרת האפליקציות כי הם משלבים את הקוד ואת כל התלויות הנדרשות בחבילה אחת שניתנת להפצה. אתם יכולים להריץ קונטיינרים של Docker במכונות וירטואליות של TPU כדי לפשט את ההגדרה והשיתוף של אפליקציות Cloud TPU. במאמר הזה מוסבר איך להגדיר קונטיינר Docker לכל מסגרת ML שנתמכת על ידי Cloud TPU.
אימון מודל PyTorch בקונטיינר ב-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
יצירת מכונת וירטואלית של Cloud TPU
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מוודאים שלמשתמש Google Cloud הוקצה התפקיד Artifact Registry Reader. מידע נוסף זמין במאמר הקצאת תפקידים ב-Artifact Registry.
הפעלת קונטיינר ב-TPU VM באמצעות קובץ אימג' של PyTorch/XLA nightly
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הגדרת זמן הריצה של TPU
יש שתי אפשרויות לזמן ריצה של PyTorch/XLA: PJRT ו-XRT. מומלץ להשתמש ב-PJRT, אלא אם יש לכם סיבה להשתמש ב-XRT. מידע נוסף על ההגדרות השונות של זמן הריצה זמין במסמכי התיעוד של זמן הריצה של PJRT.
PJRT
export PJRT_DEVICE=TPUXRT
export XRT_TPU_CONFIG="localservice;0;localhost:51011"שכפול המאגר של PyTorch XLA
git clone --recursive https://github.com/pytorch/xla.gitTrain ResNet50
python3 xla/test/test_train_mp_imagenet.py \ --fake_data \ --model=resnet50 \ --num_epochs=1
כשסקריפט ההדרכה מסתיים, מפנים את המשאבים.
- מקלידים
exitכדי לצאת ממאגר Docker. - מקלידים
exitכדי לצאת מ-TPU VM מחיקת ה-TPU VM
gcloud compute tpus tpu-vm delete $TPU_NAME --zone=$ZONE
TPU slice
כשמריצים קוד PyTorch בפרוסת TPU, צריך להריץ את הקוד בכל העובדים של ה-TPU בו-זמנית. אחת הדרכים לעשות זאת היא באמצעות הפקודה gcloud compute tpus tpu-vm ssh עם הדגלים --worker=all ו---command. בתהליך הבא מוסבר איך ליצור תמונת Docker כדי להקל על ההגדרה של כל עובד TPU.
יצירת TPU VM
gcloud compute tpus tpu-vm create $TPU_NAME \ --zone=$ZONE \ --accelerator-type=$ACCELERATOR_TYPE \ --version=$RUNTIME_VERSIONהוספת המשתמש הנוכחי לקבוצת Docker
gcloud compute tpus tpu-vm ssh $TPU_NAME \ --zone=$ZONE \ --worker=all \ --command='sudo usermod -a -G docker $USER'שכפול המאגר של PyTorch XLA
gcloud compute tpus tpu-vm ssh $TPU_NAME --worker=all \ --zone=$ZONE \ --command="git clone --recursive https://github.com/pytorch/xla.git"הרצת סקריפט האימון בקונטיינר בכל עובדי ה-TPU
gcloud compute tpus tpu-vm ssh $TPU_NAME --worker=all \ --zone=$ZONE \ --command="docker run --rm --privileged --net=host -v ~/xla:/xla -e PJRT_DEVICE=TPU us-central1-docker.pkg.dev/tpu-pytorch-releases/docker/xla:r2.6.0_3.10_tpuvm_cxx11 python /xla/test/test_train_mp_imagenet.py --fake_data --model=resnet50 --num_epochs=1"דגלים של פקודות Docker:
-
--rmמסיר את הקונטיינר אחרי שהתהליך שלו מסתיים. -
--privilegedחושף את מכשיר ה-TPU למאגר התגים. -
--net=hostמאגד את כל היציאות של הקונטיינר למכונת ה-TPU הווירטואלית כדי לאפשר תקשורת בין המארחים ב-pod. -
-eמגדיר משתני סביבה.
-
כשסקריפט ההדרכה מסתיים, מפנים את המשאבים.
מוחקים את ה-TPU VM באמצעות הפקודה הבאה:
gcloud compute tpus tpu-vm delete $TPU_NAME \
--zone=$ZONE
אימון מודל 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 וירטואלית
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 slice
כשמריצים קוד JAX על פרוסת TPU, צריך להריץ את קוד JAX על כל העובדים של TPU בו-זמנית. אחת הדרכים לעשות זאת היא באמצעות הפקודה gcloud compute tpus tpu-vm ssh עם הדגלים --worker=all ו---command. בקטע הבא מוסבר איך ליצור קובץ אימג' של Docker כדי להקל על ההגדרה של כל עובד TPU.
יוצרים קובץ בשם
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
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
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"
כשסקריפט ההדרכה מסתיים, מפנים את המשאבים.
השבתת הקונטיינר בכל העובדים
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