Melatih model dengan GPU pada mode GKE Standar
Tutorial panduan memulai ini menunjukkan cara men-deploy model pelatihan dengan GPU di Google Kubernetes Engine (GKE) dan menyimpan prediksi di Cloud Storage. Tutorial ini menggunakan model TensorFlow dan cluster GKE Standard. Anda juga dapat menjalankan workload ini di cluster Autopilot dengan langkah penyiapan yang lebih sedikit. Untuk mengetahui petunjuknya, lihat Melatih model dengan GPU pada mode GKE Autopilot.
Dokumen ini ditujukan bagi administrator GKE yang sudah memiliki cluster Standar dan ingin menjalankan workload GPU untuk pertama kalinya.
Sebelum memulai
-
In the Trusted Cloud console, on the project selector page, select or create a Trusted Cloud project.
-
Verify that billing is enabled for your Trusted Cloud project.
-
Enable the Kubernetes Engine and Cloud Storage APIs.
-
In the Trusted Cloud console, activate Cloud Shell.
At the bottom of the Trusted 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.
Buat cluster Standar yang menggunakan Workload Identity Federation untuk GKE dan instal driver Cloud Storage FUSE:
gcloud container clusters create gke-gpu-cluster \ --addons GcsFuseCsiDriver \ --location=us-central1 \ --num-nodes=1 \ --workload-pool=PROJECT_ID.svc.id.goog
Ganti
PROJECT_ID
dengan project ID Trusted Cloud Anda.Pembuatan cluster mungkin memerlukan waktu beberapa menit.
Buat node pool GPU:
gcloud container node-pools create gke-gpu-pool-1 \ --accelerator=type=nvidia-tesla-t4,count=1,gpu-driver-version=default \ --machine-type=n1-standard-16 --num-nodes=1 \ --location=us-central1 \ --cluster=gke-gpu-cluster
Di konsol Trusted Cloud , buka halaman Create a bucket:
Pada kolom Name your bucket, masukkan nama berikut:
PROJECT_ID-gke-gpu-bucket
Klik 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.
- Buat akun layanan Trusted Cloud .
- Buat Akun Layanan Kubernetes di cluster Anda.
- Ikat Akun Layanan Kubernetes ke akun layanan Trusted Cloud .
Di konsol Trusted Cloud , buka halaman Create service account:
Di kolom Service account ID, masukkan
gke-ai-sa
.Klik Buat dan lanjutkan.
Di daftar Role, pilih peran Cloud Storage > Storage Insights Collector Service.
Klik
Add another role.Dalam daftar Select a role, pilih peran Cloud Storage > Storage Object Admin.
Klik Lanjutkan lalu klik Selesai.
Membuat namespace Kubernetes:
kubectl create namespace gke-ai-namespace
Buat Akun Layanan Kubernetes dalam namespace:
kubectl create serviceaccount gpu-k8s-sa --namespace=gke-ai-namespace
Tambahkan binding IAM ke akun layanan Trusted Cloud :
gcloud iam service-accounts add-iam-policy-binding gke-ai-sa@PROJECT_ID.s3ns-system.iam.gserviceaccount.com \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:PROJECT_ID.svc.id.goog[gke-ai-namespace/gpu-k8s-sa]"
Flag
--member
memberikan identitas lengkap Akun Layanan Kubernetes di Trusted Cloud.Anotasikan Akun Layanan Kubernetes:
kubectl annotate serviceaccount gpu-k8s-sa \ --namespace gke-ai-namespace \ iam.gke.io/gcp-service-account=gke-ai-sa@PROJECT_ID.s3ns-system.iam.gserviceaccount.com
Di Cloud Shell, buat variabel lingkungan berikut:
export K8S_SA_NAME=gpu-k8s-sa export BUCKET_NAME=PROJECT_ID-gke-gpu-bucket
Ganti
PROJECT_ID
dengan project ID Trusted Cloud Anda.Membuat Pod yang memiliki container TensorFlow:
envsubst < src/gke-config/standard-tensorflow-bash.yaml | kubectl --namespace=gke-ai-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.Buat file sampel di bucket:
touch sample-file gcloud storage 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-ai-namespace --timeout=180s
Setelah Pod sudah siap, output-nya adalah sebagai berikut:
pod/test-tensorflow-pod condition met
Buka shell di container Tensorflow:
kubectl -n gke-ai-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-ai-namespace
Salin data contoh ke bucket Cloud Storage:
gcloud storage cp src/tensorflow-mnist-example gs://PROJECT_ID-gke-gpu-bucket/ --recursive
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-ai-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-ai-namespace --for=condition=Complete job/mnist-training-job --timeout=180s
Outputnya mirip dengan hal berikut ini:
job.batch/mnist-training-job condition met
Periksa log dari container Tensorflow:
kubectl logs -f jobs/mnist-training-job -c tensorflow -n gke-ai-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-ai-namespace delete -f src/gke-config/standard-tf-mnist-train.yaml
Salin image untuk prediksi ke bucket:
gcloud storage cp data/mnist_predict gs://PROJECT_ID-gke-gpu-bucket/ --recursive
Tinjau workload inferensi:
Deploy workload inferensi:
envsubst < src/gke-config/standard-tf-mnist-batch-predict.yaml | kubectl -n gke-ai-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-ai-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-ai-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.
- Pertahankan cluster GKE: Hapus resource Kubernetes di cluster dan resource Trusted Cloud
- Mempertahankan project Trusted Cloud : Hapus cluster GKE dan resource Trusted Cloud
- Menghapus project
Hapus namespace Kubernetes dan workload yang Anda deploy:
kubectl -n gke-ai-namespace delete -f src/gke-config/standard-tf-mnist-batch-predict.yaml kubectl delete namespace gke-ai-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 Trusted Cloud akun layanan:
Buka halaman Akun Layanan.
Pilih project Anda.
Pilih kotak centang untuk
gke-ai-sa@PROJECT_ID.s3ns-system.iam.gserviceaccount.com
.Klik
Delete.Untuk mengonfirmasi penghapusan, klik Hapus.
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 Trusted Cloud akun layanan:
Buka halaman Akun Layanan.
Pilih project Anda.
Pilih kotak centang untuk
gke-ai-sa@PROJECT_ID.s3ns-system.iam.gserviceaccount.com
.Klik
Delete.Untuk mengonfirmasi penghapusan, klik Hapus.
- In the Trusted 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.
Gandakan repositori sampel
Jalankan perintah berikut di Cloud Shell:
git clone https://github.com/GoogleCloudPlatform/ai-on-gke/ ai-on-gke
cd ai-on-gke/tutorials-and-examples/gpu-examples/training-single-gpu
Membuat cluster mode Standar dan node pool GPU
Gunakan Cloud Shell untuk melakukan hal berikut:
Membuat bucket Cloud Storage
Konfigurasi 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 Trusted Cloud
Membuat Akun Layanan Kubernetes di cluster Anda
Di Cloud Shell, lakukan hal berikut:
Ikat Akun Layanan Kubernetes ke akun layanan Trusted Cloud
Di Cloud Shell jalankan perintah berikut:
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 tidak menimbulkan biaya pada akun Trusted Cloud Anda untuk resource yang Anda buat dalam panduan ini, lakukan salah satu langkah berikut: