Melatih model dengan GPU pada mode Autopilot GKE
Panduan memulai ini menunjukkan cara men-deploy model pelatihan dengan GPU di Google Kubernetes Engine (GKE) dan menyimpan prediksi di Cloud Storage. Dokumen ini ditujukan bagi administrator GKE yang sudah memiliki cluster mode Autopilot dan ingin menjalankan workload GPU untuk pertama kalinya.
Anda juga dapat menjalankan workload ini di cluster Standard jika Anda membuat node pool GPU terpisah di cluster. Untuk mendapatkan petunjuk, lihat Melatih model dengan GPU pada mode GKE Standard.
Sebelum memulai
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
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 GKE and Cloud Storage 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. -
Install the Google Cloud CLI.
-
Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.
-
Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:
gcloud init -
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 GKE and Cloud Storage 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. -
Install the Google Cloud CLI.
-
Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.
-
Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:
gcloud init -
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Di konsol Google Cloud , buka halaman Create an Autopilot cluster:
Di kolom Name, masukkan
gke-gpu-cluster.Di daftar Region, pilih
us-central1.Klik Create.
Di konsol Google Cloud , buka halaman Create a bucket:
Di bagian Mulai, masukkan nama unik secara global untuk bucket Anda:
PROJECT_ID-gke-gpu-bucketGanti
PROJECT_IDdengan ID project Google Cloud Anda.Klik Continue.
Untuk Jenis lokasi, pilih Region.
Dalam daftar Region, pilih
us-central1 (Iowa)dan klik Lanjutkan.Pada bagian Pilih kelas penyimpanan untuk data Anda, klik Lanjutkan.
Di bagian Choose how to control access to objects, untuk Access control, pilih Uniform.
Klik Buat.
Pada dialog Public access will be prevented pastikan bahwa kotak centang Enforce public access prevention on this bucket sudah dicentang, lalu klik Confirm.
- Buat ServiceAccount Kubernetes di cluster Anda.
- Buat kebijakan izin IAM yang memungkinkan ServiceAccount mengakses bucket.
Buat koneksi ke cluster Anda:
gcloud container clusters get-credentials gke-gpu-cluster \ --location=us-central1Buat namespace Kubernetes:
kubectl create namespace gke-gpu-namespaceBuat ServiceAccount Kubernetes dalam namespace:
kubectl create serviceaccount gpu-k8s-sa --namespace=gke-gpu-namespaceDi Cloud Shell, buat variabel lingkungan berikut:
export K8S_SA_NAME=gpu-k8s-sa export BUCKET_NAME=PROJECT_ID-gke-gpu-bucketGanti
PROJECT_IDdengan ID project Google Cloud Anda.Buat Pod yang memiliki container TensorFlow:
envsubst < src/gke-config/standard-tensorflow-bash.yaml | kubectl --namespace=gke-gpu-namespace apply -f -Perintah ini menyisipkan variabel lingkungan yang Anda buat ke dalam referensi yang sesuai dalam manifes. Anda juga dapat membuka manifes di editor teks serta mengganti
$K8S_SA_NAMEdan$BUCKET_NAMEdengan nilai yang sesuai.Buat file sampel di bucket:
touch sample-file gcloud storage cp sample-file gs://PROJECT_ID-gke-gpu-bucketTunggu hingga Pod Anda siap:
kubectl wait --for=condition=Ready pod/test-tensorflow-pod -n=gke-gpu-namespace --timeout=180sSetelah Pod sudah siap, output-nya adalah sebagai berikut:
pod/test-tensorflow-pod condition metJika perintah kehabisan waktu, GKE mungkin masih membuat node baru untuk menjalankan Pod. Jalankan kembali perintah dan tunggu hingga Pod siap.
Buka shell di container TensorFlow:
kubectl -n gke-gpu-namespace exec --stdin --tty test-tensorflow-pod --container tensorflow -- /bin/bashCoba baca file sampel yang Anda buat:
ls /dataOutput menunjukkan file sampel.
Periksa log untuk mengidentifikasi GPU yang terpasang ke Pod:
python -c "import tensorflow as tf; print(tf.config.list_physical_devices('GPU'))"Output menunjukkan GPU yang terpasang ke Pod, mirip dengan berikut ini:
... PhysicalDevice(name='/physical_device:GPU:0',device_type='GPU')Keluar dari container:
exitHapus contoh Pod:
kubectl delete -f src/gke-config/standard-tensorflow-bash.yaml \ --namespace=gke-gpu-namespaceSalin data contoh ke bucket Cloud Storage:
gcloud storage cp src/tensorflow-mnist-example gs://PROJECT_ID-gke-gpu-bucket/ --recursiveBuat variabel lingkungan berikut:
export K8S_SA_NAME=gpu-k8s-sa export BUCKET_NAME=PROJECT_ID-gke-gpu-bucketTinjau Tugas pelatihan:
Deploy Tugas pelatihan:
envsubst < src/gke-config/standard-tf-mnist-train.yaml | kubectl -n gke-gpu-namespace apply -f -Perintah ini menyisipkan variabel lingkungan yang Anda buat ke dalam referensi yang sesuai dalam manifes. Anda juga dapat membuka manifes di editor teks serta mengganti
$K8S_SA_NAMEdan$BUCKET_NAMEdengan nilai yang sesuai.Tunggu hingga Tugas memiliki status
Completed:kubectl wait -n gke-gpu-namespace --for=condition=Complete job/mnist-training-job --timeout=180sJika Tugas sudah siap, output-nya akan mirip dengan berikut ini:
job.batch/mnist-training-job condition metJika perintah kehabisan waktu, GKE mungkin masih membuat node baru untuk menjalankan Pod. Jalankan kembali perintah dan tunggu hingga Tugas siap.
Periksa log dari container TensorFlow:
kubectl logs -f jobs/mnist-training-job -c tensorflow -n gke-gpu-namespaceOutput menunjukkan bahwa peristiwa berikut terjadi:
- Instal paket Python yang diperlukan
- Mendownload set data MNIST
- Melatih model menggunakan GPU
- Simpan model
- Mengevaluasi model
... Epoch 12/12 927/938 [============================>.] - ETA: 0s - loss: 0.0188 - accuracy: 0.9954 Learning rate for epoch 12 is 9.999999747378752e-06 938/938 [==============================] - 5s 6ms/step - loss: 0.0187 - accuracy: 0.9954 - lr: 1.0000e-05 157/157 [==============================] - 1s 4ms/step - loss: 0.0424 - accuracy: 0.9861 Eval loss: 0.04236088693141937, Eval accuracy: 0.9861000180244446 Training finished. Model savedHapus workload pelatihan:
kubectl -n gke-gpu-namespace delete -f src/gke-config/standard-tf-mnist-train.yamlSalin image untuk prediksi ke bucket:
gcloud storage cp data/mnist_predict gs://PROJECT_ID-gke-gpu-bucket/ --recursiveTinjau workload inferensi:
Deploy workload inferensi:
envsubst < src/gke-config/standard-tf-mnist-batch-predict.yaml | kubectl -n gke-gpu-namespace apply -f -Perintah ini menyisipkan variabel lingkungan yang Anda buat ke dalam referensi yang sesuai dalam manifes. Anda juga dapat membuka manifes di editor teks serta mengganti
$K8S_SA_NAMEdan$BUCKET_NAMEdengan nilai yang sesuai.Tunggu hingga Tugas memiliki status
Completed:kubectl wait -n gke-gpu-namespace --for=condition=Complete job/mnist-batch-prediction-job --timeout=180sOutputnya akan mirip dengan berikut ini:
job.batch/mnist-batch-prediction-job condition metPeriksa log dari container TensorFlow:
kubectl logs -f jobs/mnist-batch-prediction-job -c tensorflow -n gke-gpu-namespaceOutputnya adalah prediksi untuk setiap gambar dan keyakinan model pada prediksi tersebut, mirip dengan berikut ini:
Found 10 files belonging to 1 classes. 1/1 [==============================] - 2s 2s/step The image /data/mnist_predict/0.png is the number 0 with a 100.00 percent confidence. The image /data/mnist_predict/1.png is the number 1 with a 99.99 percent confidence. The image /data/mnist_predict/2.png is the number 2 with a 100.00 percent confidence. The image /data/mnist_predict/3.png is the number 3 with a 99.95 percent confidence. The image /data/mnist_predict/4.png is the number 4 with a 100.00 percent confidence. The image /data/mnist_predict/5.png is the number 5 with a 100.00 percent confidence. The image /data/mnist_predict/6.png is the number 6 with a 99.97 percent confidence. The image /data/mnist_predict/7.png is the number 7 with a 100.00 percent confidence. The image /data/mnist_predict/8.png is the number 8 with a 100.00 percent confidence. The image /data/mnist_predict/9.png is the number 9 with a 99.65 percent confidence.- Pertahankan cluster GKE: Hapus resource Kubernetes di cluster dan resource Google Cloud
- Pertahankan project Google Cloud : Hapus cluster GKE dan resource Google Cloud
- Hapus project
Hapus namespace Kubernetes dan workload yang Anda deploy:
kubectl -n gke-gpu-namespace delete -f src/gke-config/standard-tf-mnist-batch-predict.yaml kubectl delete namespace gke-gpu-namespaceHapus bucket Cloud Storage:
Buka halaman Bucket:
Pilih kotak centang untuk
PROJECT_ID-gke-gpu-bucket.Klik Delete.
Untuk mengonfirmasi penghapusan, ketik
DELETE, lalu klik Delete.
Hapus akun layanan Google Cloud :
Buka halaman Service accounts.
Pilih project Anda.
Pilih kotak centang untuk
gke-gpu-sa@PROJECT_ID.iam.gserviceaccount.com.Klik Delete.
Untuk mengonfirmasi penghapusan, klik Delete.
Hapus cluster GKE:
Buka halaman Cluster:
Pilih kotak centang untuk
gke-gpu-cluster.Klik Delete.
Untuk mengonfirmasi penghapusan, ketik
gke-gpu-cluster, lalu klik Delete.
Hapus bucket Cloud Storage:
Buka halaman Bucket:
Pilih kotak centang untuk
PROJECT_ID-gke-gpu-bucket.Klik Delete.
Untuk mengonfirmasi penghapusan, ketik
DELETE, lalu klik Delete.
Hapus akun layanan Google Cloud :
Buka halaman Service accounts.
Pilih project Anda.
Pilih kotak centang untuk
gke-gpu-sa@PROJECT_ID.iam.gserviceaccount.com.Klik Delete.
Untuk mengonfirmasi penghapusan, klik Hapus.
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Membuat clone repositori sampel
Jalankan perintah berikut di Cloud Shell:
git clone https://github.com/GoogleCloudPlatform/ai-on-gke && \
cd ai-on-gke/tutorials-and-examples/gpu-examples/training-single-gpu
Membuat cluster
Membuat bucket Cloud Storage
Mengonfigurasi cluster Anda untuk mengakses bucket menggunakan Workload Identity Federation for GKE
Agar cluster Anda dapat mengakses bucket Cloud Storage, lakukan langkah-langkah berikut:
Membuat ServiceAccount Kubernetes di cluster Anda
Di Cloud Shell, lakukan hal berikut:
Membuat kebijakan izin IAM di bucket
Berikan peran Storage Object Admin (roles/storage.objectAdmin) di bucket
ke ServiceAccount Kubernetes:
gcloud storage buckets add-iam-policy-binding gs://PROJECT_ID-gke-gpu-bucket \
--member=principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/gke-gpu-namespace/sa/gpu-k8s-sa \
--role=roles/storage.objectAdmin \
--condition=None
Ganti PROJECT_NUMBER dengan nomor project Google Cloud
Anda.
Memverifikasi bahwa Pod dapat mengakses bucket Cloud Storage
Latih dan prediksi menggunakan set data MNIST
Di bagian ini, Anda akan menjalankan workload pelatihan pada set data contoh MNIST.
Men-deploy workload inferensi
Di bagian ini, Anda akan men-deploy workload inferensi yang mengambil set data sampel sebagai input dan menampilkan prediksi.
Pembersihan
Agar akun Google Cloud Anda tidak dikenai biaya untuk resource yang Anda buat dalam panduan ini, lakukan salah satu langkah berikut: