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 kali.
Anda juga dapat menjalankan workload ini di cluster Standar jika 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.
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Make sure that billing is enabled for your Google Cloud project.
-
Aktifkan API GKE and Cloud Storage.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Make sure that billing is enabled for your Google Cloud project.
-
Aktifkan API GKE and Cloud Storage.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Di konsol Google Cloud, aktifkan Cloud Shell.
Di bagian bawah Google Cloud Console, Cloud Shell sesi akan terbuka dan menampilkan perintah command line. Cloud Shell adalah lingkungan shell dengan Google Cloud CLI yang sudah terinstal, dan dengan nilai yang sudah ditetapkan untuk project Anda saat ini. Diperlukan waktu beberapa detik untuk melakukan inisialisasi sesi.
Gandakan 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
Di konsol Google Cloud, buka halaman Create an Autopilot cluster:
Di kolom Name, masukkan
gke-gpu-cluster
.Dalam daftar Region, pilih
us-central1
.Klik Create.
Membuat bucket Cloud Storage
Di konsol Google Cloud, buka halaman Create a bucket:
Pada kolom Name your bucket, masukkan nama berikut:
PROJECT_ID-gke-gpu-bucket
PROJECT_ID
dengan ID project Google Cloud AndaKlik Lanjutkan.
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 Akses publik akan dicegah pastikan bahwa kotak centang Enforce public access prevention on this bucket sudah dicentang, lalu klik Konfirmasi.
Mengonfigurasi cluster Anda untuk mengakses bucket menggunakan Workload Identity Federation for GKE
Agar cluster Anda dapat mengakses bucket Cloud Storage, lakukan langkah berikut:
- Buat Akun Layanan Kubernetes di cluster Anda.
- Buat kebijakan izin IAM yang memungkinkan ServiceAccount mengakses bucket.
Buat Akun Layanan Kubernetes di cluster Anda
Di Cloud Shell, lakukan hal berikut:
Hubungkan ke cluster Anda:
gcloud container clusters get-credentials gke-gpu-cluster \ --location=us-central1
Membuat namespace Kubernetes:
kubectl create namespace gke-gpu-namespace
Buat Akun Layanan Kubernetes dalam namespace:
kubectl create serviceaccount gpu-k8s-sa --namespace=gke-gpu-namespace
Membuat kebijakan izin IAM di bucket
Berikan peran Storage Object Admin (roles/storage.objectAdmin
) di bucket
ke Akun Layanan Kubernetes:
gcloud storage buckets add-iam-policy-binding gs://PROJECT_ID \
--member=principal://iam.googleapis.com/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.
Verifikasi bahwa Pod dapat mengakses bucket Cloud Storage
Di Cloud Shell, buat variabel lingkungan berikut:
export K8S_SA_NAME=gpu-k8s-sa export BUCKET_NAME=PROJECT_ID-gke-gpu-bucket
PROJECT_ID
dengan ID project Google Cloud AndaBuat Pod yang memiliki penampung 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_NAME
dan$BUCKET_NAME
dengan nilai yang sesuai.Buat file sampel di bucket:
touch sample-file gsutil cp sample-file gs://PROJECT_ID-gke-gpu-bucket
Tunggu hingga Pod Anda siap:
kubectl wait --for=condition=Ready pod/test-tensorflow-pod -n=gke-gpu-namespace --timeout=180s
Setelah Pod sudah siap, output-nya adalah sebagai berikut:
pod/test-tensorflow-pod condition met
Jika waktu tunggu perintah habis, GKE mungkin masih membuat node baru untuk menjalankan Pod. Jalankan kembali perintah dan tunggu Pod siap.
Buka shell di penampung TensorFlow:
kubectl -n gke-gpu-namespace exec --stdin --tty test-tensorflow-pod --container tensorflow -- /bin/bash
Coba baca file sampel yang Anda buat:
ls /data
Output 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:
exit
Hapus contoh Pod:
kubectl delete -f src/gke-config/standard-tensorflow-bash.yaml \ --namespace=gke-gpu-namespace
Latih dan prediksi menggunakan set data MNIST
Di bagian ini, Anda akan menjalankan workload pelatihan pada set data contoh MNIST
.
Salin data contoh ke bucket Cloud Storage:
gsutil -m cp -R src/tensorflow-mnist-example gs://PROJECT_ID-gke-gpu-bucket/
Buat variabel lingkungan berikut:
export K8S_SA_NAME=gpu-k8s-sa export BUCKET_NAME=PROJECT_ID-gke-gpu-bucket
Tinjau Tugas pelatihan:
Deploy Tugas pelatihan:
envsubst < src/gke-config/standard-tf-mnist-train.yaml | kubectl -n gke-gpu-namespace apply -f -
Perintah ini mengganti variabel lingkungan yang Anda buat ke dalam referensi yang sesuai dalam manifes. Anda juga dapat membuka manifes di editor teks serta mengganti
$K8S_SA_NAME
dan$BUCKET_NAME
dengan nilai yang sesuai.Tunggu hingga Tugas memiliki status
Completed
:kubectl wait -n gke-gpu-namespace --for=condition=Complete job/mnist-training-job --timeout=180s
Jika Tugas sudah siap, output-nya akan mirip dengan berikut ini:
job.batch/mnist-training-job condition met
Jika waktu tunggu perintah habis, GKE mungkin masih membuat node baru untuk menjalankan Pod. Jalankan kembali perintah dan tunggu Tugas siap.
Periksa log dari container TensorFlow:
kubectl logs -f jobs/mnist-training-job -c tensorflow -n gke-gpu-namespace
Output 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 saved
Hapus workload pelatihan:
kubectl -n gke-gpu-namespace delete -f src/gke-config/standard-tf-mnist-train.yaml
Men-deploy workload inferensi
Di bagian ini, Anda akan men-deploy workload inferensi yang mengambil set data sampel sebagai input dan menampilkan prediksi.
Salin image untuk prediksi ke bucket:
gsutil -m cp -R data/mnist_predict gs://PROJECT_ID-gke-gpu-bucket/
Tinjau workload inferensi:
Deploy workload inferensi:
envsubst < src/gke-config/standard-tf-mnist-batch-predict.yaml | kubectl -n gke-gpu-namespace apply -f -
Perintah ini mengganti variabel lingkungan yang Anda buat ke dalam referensi yang sesuai dalam manifes. Anda juga dapat membuka manifes di editor teks serta mengganti
$K8S_SA_NAME
dan$BUCKET_NAME
dengan nilai yang sesuai.Tunggu hingga Tugas memiliki status
Completed
:kubectl wait -n gke-gpu-namespace --for=condition=Complete job/mnist-batch-prediction-job --timeout=180s
Outputnya mirip dengan hal berikut ini:
job.batch/mnist-batch-prediction-job condition met
Periksa log dari container TensorFlow:
kubectl logs -f jobs/mnist-batch-prediction-job -c tensorflow -n gke-gpu-namespace
Outputnya adalah prediksi untuk setiap image 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.
Pembersihan
Agar tidak menimbulkan biaya pada akun Google Cloud Anda untuk resource yang dibuat dalam panduan ini, lakukan salah satu langkah berikut:
- Pertahankan cluster GKE: Hapus resource Kubernetes di cluster dan resource Google Cloud
- Mempertahankan project Google Cloud: Hapus cluster GKE dan resource Google Cloud
- Menghapus project
Menghapus resource Kubernetes dalam cluster dan resource Google Cloud
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-namespace
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 Akun Layanan.
Pilih project Anda.
Pilih kotak centang untuk
gke-gpu-sa@PROJECT_ID.iam.gserviceaccount.com
.Klik
Delete.Untuk mengonfirmasi penghapusan, klik Hapus.
Menghapus cluster GKE dan resource Google Cloud
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 Akun Layanan.
Pilih project Anda.
Pilih kotak centang untuk
gke-gpu-sa@PROJECT_ID.iam.gserviceaccount.com
.Klik
Delete.Untuk mengonfirmasi penghapusan, klik Hapus.
Menghapus project
- Di konsol Google Cloud, buka halaman Manage resource.
- Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
- Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.