Menjalankan aplikasi Cloud TPU di GKE
Panduan ini menjelaskan cara:
- Siapkan konfigurasi Cloud TPU sebagai persiapan untuk menjalankannya di Google Kubernetes Engine
- Membuat cluster GKE dengan dukungan Cloud TPU
- Menggunakan TensorBoard untuk memvisualisasikan metrik Cloud TPU dan menganalisis performa
- Membangun dan memasukkan model Anda ke dalam container di Docker
Untuk mengetahui informasi selengkapnya tentang arsitektur VM TPU, lihat Arsitektur Sistem. Panduan ini hanya dapat digunakan dengan arsitektur TPU Nodes.
Manfaat menjalankan aplikasi Cloud TPU di GKE
Aplikasi pelatihan Cloud TPU dapat dikonfigurasi untuk dijalankan di container GKE di dalam Pod GKE. Jika tersedia, Anda akan melihat manfaat berikut:
Peningkatan penyiapan dan pengelolaan alur kerja: GKE mengelola siklus proses TPU. Setelah inisialisasi dan pelatihan Cloud TPU disiapkan dengan GKE, workload Anda dapat diulang dan dikelola oleh GKE, termasuk pemulihan kegagalan tugas.
Biaya yang dioptimalkan: Anda hanya membayar TPU saat Tugas aktif. GKE membuat dan menghapus TPU secara otomatis sesuai dengan persyaratan resource Pod.
Penggunaan fleksibel: Perubahan kecil pada spesifikasi Pod Anda untuk meminta akselerator hardware yang berbeda (CPU, GPU, atau TPU):
kind: Pod metadata: name: example-tpu annotations: # The Cloud TPUs that will be created for this Job will support # TensorFlow 2.12.1. This version MUST match the # TensorFlow version that your model is built on. tf-version.cloud-tpus.google.com: "2.12.1" spec: containers: - name: example-container resources: limits: cloud-tpus.google.com/v2: 8 # See the line above for TPU, or below for CPU / GPU. # cpu: 2 # nvidia.com/gpu: 1
Skalabilitas: GKE menyediakan API (Job dan Deployment) yang dapat menskalakan hingga ratusan Pod GKE dan Node TPU.
Toleransi error: Job API GKE, beserta mekanisme checkpoint TensorFlow, menyediakan semantik run-to-completion. Tugas pelatihan Anda akan otomatis dijalankan kembali dengan status terbaru yang dibaca dari checkpoint jika terjadi kegagalan pada instance VM atau node Cloud TPU.
Persyaratan dan batasan konfigurasi Cloud TPU dan GKE
Perhatikan hal berikut saat menentukan konfigurasi GKE Anda:
- Cloud TPU tidak didukung di kumpulan node Windows Server.
- Anda harus membuat cluster GKE dan node pool di zona tempat Cloud TPU tersedia. Anda juga harus membuat bucket Cloud Storage untuk menyimpan data dan model pelatihan di region yang sama dengan cluster GKE Anda. Lihat dokumen jenis dan zona untuk mengetahui daftar zona yang tersedia.
- Anda harus menggunakan alamat IP yang sesuai dengan RFC 1918 untuk cluster GKE Anda. Untuk mengetahui informasi selengkapnya, lihat Jaringan GKE.
- Setiap container dapat meminta maksimal satu Cloud TPU, tetapi beberapa container dalam Pod dapat meminta masing-masing Cloud TPU.
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.
-
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 berikut di Konsol Google Cloud:
Saat menggunakan Cloud TPU dengan GKE, project Anda menggunakan komponen Google Cloud yang dapat ditagih. Lihat harga Cloud TPU dan harga GKE untuk memperkirakan biaya Anda, lalu ikuti petunjuk untuk mengosongkan resource setelah selesai menggunakannya.
Membuat cluster baru dengan dukungan Cloud TPU
Gunakan petunjuk berikut untuk menyiapkan lingkungan Anda dan membuat cluster GKE dengan dukungan Cloud TPU menggunakan gcloud CLI:
Instal komponen
gcloud
, yang Anda perlukan untuk menjalankan GKE dengan Cloud TPU:$ gcloud components install kubectl
Konfigurasikan
gcloud
dengan ID project Google Cloud Anda:$ gcloud config set project project-name
Ganti
project-name
dengan nama project Google Cloud Anda.Saat pertama kali menjalankan perintah ini di VM Cloud Shell baru, halaman
Authorize Cloud Shell
akan ditampilkan. KlikAuthorize
di bagian bawah halaman untuk mengizinkangcloud
melakukan panggilan Google Cloud API dengan kredensial Anda.Konfigurasikan
gcloud
dengan zona tempat Anda berencana menggunakan resource Cloud TPU. Contoh ini menggunakanus-central1-b
, tetapi Anda dapat menggunakan TPU di zona apa pun yang didukung.$ gcloud config set compute/zone us-central1-b
Gunakan perintah
gcloud container clusters create
untuk membuat cluster di GKE dengan dukungan Cloud TPU.$ gcloud container clusters create cluster-name \ --release-channel=stable \ --scopes=cloud-platform \ --enable-ip-alias \ --enable-tpu
Deskripsi flag perintah
- saluran-rilis
- Saluran rilis menyediakan cara untuk mengelola upgrade otomatis bagi cluster Anda. Saat membuat cluster baru, Anda dapat memilih saluran rilisnya. Cluster Anda hanya akan diupgrade ke versi yang ditawarkan di saluran tersebut.
- cakupan
- Memastikan semua node dalam cluster memiliki akses ke bucket Cloud Storage Anda. Cluster dan bucket penyimpanan harus berada dalam project yang sama agar dapat berfungsi. Perlu diperhatikan bahwa Pod Kubernetes secara default mewarisi cakupan node tempat Pod Kubernetes di-deploy.
Oleh karena itu,
scopes=cloud-platform
akan memberikan cakupancloud-platform
ke semua Pod Kubernetes yang berjalan di cluster. Jika Anda ingin membatasi akses per Pod, lihat panduan GKE untuk melakukan autentikasi dengan Akun Layanan. - enable-ip-alias
- Menunjukkan bahwa cluster menggunakan rentang IP alias. Tindakan ini diperlukan untuk menggunakan Cloud TPU di GKE.
- enable-tpu
- Menunjukkan bahwa cluster harus mendukung Cloud TPU.
- tpu-ipv4-cidr (opsional, tidak ditentukan di atas)
- Menunjukkan rentang CIDR yang akan digunakan untuk Cloud TPU. Tentukan
IP_RANGE
dalam bentukIP/20
, seperti10.100.0.0/20
. Jika Anda tidak menentukan flag ini, rentang CIDR ukuran/20
akan dialokasikan dan ditetapkan secara otomatis.
Setelah cluster dibuat, Anda akan melihat pesan berikut:
NAME LOCATION MASTER_VERSION MASTER_IP MACHINE_TYPE NODE_VERSION NUM_NODES STATUS cluster-name us-central1-b 1.16.15-gke.4901 34.71.245.25 n1-standard-1 1.16.15-gke.4901 3 RUNNING
Meminta Cloud TPU di spesifikasi Pod Kubernetes
Dalam spesifikasi Pod Kubernetes Anda:
Anda harus mem-build model di container menggunakan versi TensorFlow yang sama. Lihat versi yang didukung.
Tentukan resource Cloud TPU di bagian
limits
pada kolomresource
di spesifikasi container.Perlu diperhatikan bahwa unit resource Cloud TPU adalah jumlah core Cloud TPU. Tabel berikut mencantumkan contoh permintaan resource yang valid. Lihat jenis dan zona TPU untuk mengetahui daftar lengkap resource TPU yang valid.
Jika resource yang ingin digunakan adalah Pod Cloud TPU, minta kuota karena kuota default untuk Pod Cloud TPU adalah nol.
Permintaan Resource Jenis Cloud TPU cloud-tpus.google.com/v2: 8 Perangkat Cloud TPU v2 (8 core) cloud-tpus.google.com/preemptible-v2: 8 Perangkat Preemptible Cloud TPU v2 (8 core) cloud-tpus.google.com/v3: 8 Perangkat Cloud TPU v3 (8 core) cloud-tpus.google.com/preemptible-v3: 8 Perangkat Cloud TPU v3 yang dapat dihentikan (8 core) cloud-tpus.google.com/v2: 32 Pod Cloud TPU v2-32 (32 core) cloud-tpus.google.com/v3: 32 Pod Cloud TPU v3-32 (32 core) Untuk mengetahui informasi selengkapnya mengenai cara menentukan resource dan batas dalam spesifikasi Pod, lihat dokumentasi Kubernetes.
Contoh spesifikasi Pod berikut meminta satu Preemptible Cloud TPU v2-8 TPU dengan TensorFlow 2.12.0.
Masa aktif node Cloud TPU terikat dengan Pod Kubernetes yang memintanya. Cloud TPU dibuat sesuai permintaan ketika Pod Kubernetes dijadwalkan, dan didaur ulang saat Pod Kubernetes dihapus.
apiVersion: v1
kind: Pod
metadata:
name: gke-tpu-pod
annotations:
# The Cloud TPUs that will be created for this Job will support
# TensorFlow 2.12.1. This version MUST match the
# TensorFlow version that your model is built on.
tf-version.cloud-tpus.google.com: "2.12.1"
spec:
restartPolicy: Never
containers:
- name: gke-tpu-container
# The official TensorFlow 2.12.1 image.
# https://hub.docker.com/r/tensorflow/tensorflow
image: tensorflow/tensorflow:2.12.1
command:
- python
- -c
- |
import tensorflow as tf
print("Tensorflow version " + tf.__version__)
tpu = tf.distribute.cluster_resolver.TPUClusterResolver('$(KUBE_GOOGLE_CLOUD_TPU_ENDPOINTS)')
print('Running on TPU ', tpu.cluster_spec().as_dict()['worker'])
tf.config.experimental_connect_to_cluster(tpu)
tf.tpu.experimental.initialize_tpu_system(tpu)
strategy = tf.distribute.TPUStrategy(tpu)
@tf.function
def add_fn(x,y):
z = x + y
return z
x = tf.constant(1.)
y = tf.constant(1.)
z = strategy.run(add_fn, args=(x,y))
print(z)
resources:
limits:
# Request a single Preemptible v2-8 Cloud TPU device to train the model.
cloud-tpus.google.com/preemptible-v2: 8
Membuat Tugas
Ikuti langkah-langkah berikut untuk membuat Tugas di cluster GKE, dan untuk menginstal kubectl
Dengan menggunakan editor teks, buat spesifikasi Pod,
example-job.yaml
, lalu salin dan tempel di spesifikasi Pod yang ditampilkan sebelumnya.Jalankan Tugas:
$ kubectl create -f example-job.yaml
pod "gke-tpu-pod" created
Perintah ini membuat tugas yang menjadwalkan Pod secara otomatis.
Pastikan Pod GKE telah dijadwalkan dan node Cloud TPU telah disediakan. Pod GKE yang meminta node Cloud TPU dapat tertunda selama 5 menit sebelum berjalan. Anda akan melihat output yang serupa dengan berikut ini hingga Pod GKE dijadwalkan.
$ kubectl get pods -w NAME READY STATUS RESTARTS AGE gke-tpu-pod 0/1 Pending 0 1m
Setelah sekitar 5 menit, Anda akan melihat sesuatu seperti ini:
NAME READY STATUS RESTARTS AGE gke-tpu-pod 0/1 Pending 0 21s gke-tpu-pod 0/1 Pending 0 2m18s gke-tpu-pod 0/1 Pending 0 2m18s gke-tpu-pod 0/1 ContainerCreating 0 2m18s gke-tpu-pod 1/1 Running 0 2m48s gke-tpu-pod 0/1 Completed 0 3m8s
Anda harus menggunakan Ctrl-C untuk keluar dari perintah 'kubectl get'.
Anda dapat mencetak informasi log dan mengambil informasi yang lebih mendetail tentang setiap Pod GKE menggunakan perintah
kubectl
berikut. Misalnya, untuk melihat output log Pod GKE Anda, gunakan:$ kubectl logs gke-tpu-pod
Anda akan melihat output yang mirip dengan berikut ini:
2021-09-24 18:55:25.400699: I tensorflow/core/platform/cpu_feature_guard.cc:142] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations: AVX2 FMA To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags. 2021-09-24 18:55:25.405947: I tensorflow/core/distributed_runtime/rpc/grpc_channel.cc:272] Initialize GrpcChannelCache for job worker -> {0 -> 10.0.16.2:8470} 2021-09-24 18:55:25.406058: I tensorflow/core/distributed_runtime/rpc/grpc_channel.cc:272] Initialize GrpcChannelCache for job localhost -> {0 -> localhost:32769} 2021-09-24 18:55:28.091729: I tensorflow/core/distributed_runtime/rpc/grpc_channel.cc:272] Initialize GrpcChannelCache for job worker -> {0 -> 10.0.16.2:8470} 2021-09-24 18:55:28.091896: I tensorflow/core/distributed_runtime/rpc/grpc_channel.cc:272] Initialize GrpcChannelCache for job localhost -> {0 -> localhost:32769} 2021-09-24 18:55:28.092579: I tensorflow/core/distributed_runtime/rpc/grpc_server_lib.cc:427] Started server with target: grpc://localhost:32769 Tensorflow version 2.12.1 Running on TPU ['10.0.16.2:8470'] PerReplica:{ 0: tf.Tensor(2.0, shape=(), dtype=float32), 1: tf.Tensor(2.0, shape=(), dtype=float32), 2: tf.Tensor(2.0, shape=(), dtype=float32), 3: tf.Tensor(2.0, shape=(), dtype=float32), 4: tf.Tensor(2.0, shape=(), dtype=float32), 5: tf.Tensor(2.0, shape=(), dtype=float32), 6: tf.Tensor(2.0, shape=(), dtype=float32), 7: tf.Tensor(2.0, shape=(), dtype=float32) }
Untuk melihat deskripsi lengkap Pod GKE, gunakan:
$ kubectl describe pod gke-tpu-pod
Lihat Introspeksi dan Proses Debug Aplikasi untuk detail selengkapnya.
Membangun dan memasukkan model Anda ke dalam container di image Docker
Baca mem-build dan memasukkan model Anda ke dalam container untuk mengetahui detail tentang proses ini.
Mengaktifkan dukungan Cloud TPU di cluster yang ada
Untuk mengaktifkan dukungan Cloud TPU di cluster GKE yang ada, lakukan langkah-langkah berikut di Google Cloud CLI:
Aktifkan dukungan Cloud TPU:
gcloud beta container clusters update cluster-name --enable-tpu
Ganti cluster-name dengan nama cluster Anda.
Update entri kubeconfig:
gcloud container clusters get-credentials cluster-name
Menetapkan rentang CIDR kustom
Secara default, GKE mengalokasikan blok CIDR dengan ukuran /20
untuk TPU yang disediakan oleh cluster. Anda dapat menentukan rentang CIDR kustom untuk Cloud TPU dengan menjalankan perintah berikut:
gcloud beta container clusters update cluster-name \ --enable-tpu \ --tpu-ipv4-cidr 10.100.0.0/20
Ganti kode berikut:
- cluster-name: nama cluster yang ada.
- 10.100.0.0/20: rentang CIDR kustom Anda.
Menggunakan rentang CIDR yang ada dengan VPC Bersama
Ikuti panduan tentang TPU di cluster GKE menggunakan VPC Bersama untuk memverifikasi konfigurasi yang benar untuk VPC Bersama Anda.
Menonaktifkan Cloud TPU di cluster
Untuk menonaktifkan dukungan Cloud TPU di cluster GKE yang ada, lakukan langkah-langkah berikut di Google Cloud CLI:
Pastikan tidak ada workload Anda yang menggunakan Cloud TPU:
$ kubectl get tpu
Nonaktifkan dukungan Cloud TPU di cluster Anda:
$ gcloud beta container clusters update cluster-name --no-enable-tpu
Ganti cluster-name dengan nama cluster Anda.
Untuk cluster zona, operasi ini memerlukan waktu sekitar 5 menit, dan untuk cluster regional, operasi ini memerlukan waktu sekitar 15 menit, bergantung pada region cluster.
Setelah operasi selesai tanpa error, Anda dapat memverifikasi bahwa TPU yang disediakan oleh cluster telah dihapus:
$ gcloud compute tpus list
Nama-nama TPU yang dibuat oleh Cloud TPU memiliki format berikut:
$ gke-cluster-name-cluster-id-tpu-tpu-id
Ganti kode berikut:
- cluster-name: nama cluster yang ada.
- cluster-id: ID cluster yang ada.
- tpu-id: ID Cloud TPU.
Jika TPU muncul, Anda dapat menghapusnya secara manual dengan menjalankan:
$ gcloud compute tpus delete gke-cluster-name-cluster-id-tpu-tpu-id
Pembersihan
Setelah selesai menggunakan Cloud TPU di GKE, bersihkan resource agar tidak menimbulkan biaya tambahan pada akun Penagihan Cloud Anda.
Jalankan perintah berikut untuk menghapus cluster GKE, dengan mengganti
cluster-name
dengan nama cluster, danproject-name
dengan nama project Google Cloud Anda:$ gcloud container clusters delete cluster-name \ --project=project-name --zone=us-central1-b
Setelah selesai memeriksa data, gunakan perintah
gsutil
untuk menghapus bucket Cloud Storage yang Anda buat. Gantibucket-name
dengan nama bucket Cloud Storage Anda:$ gsutil rm -r gs://bucket-name