Halaman ini menunjukkan cara meminta dan men-deploy workload yang menggunakan akselerator Cloud TPU (TPU) di Google Kubernetes Engine (GKE).
Sebelum mengonfigurasi dan men-deploy workload TPU di GKE, Anda harus memahami konsep berikut:
Sebelum memulai
Sebelum memulai, pastikan Anda telah menjalankan tugas berikut:
- Aktifkan Google Kubernetes Engine API. Aktifkan Google Kubernetes Engine API
- Jika ingin menggunakan Google Cloud CLI untuk tugas ini,
instal lalu
initialize
gcloud CLI. Jika sebelumnya Anda telah menginstal gcloud CLI, dapatkan versi terbaru dengan menjalankan
gcloud components update
.
Ketersediaan TPU di GKE
Gunakan GKE untuk membuat dan mengelola node pool dengan TPU. Anda dapat menggunakan akselerator yang dibuat secara khusus ini untuk melakukan pelatihan, penyesuaian, dan inferensi model AI berskala besar.
Lihat daftar versi TPU yang didukung di GKE.
Merencanakan konfigurasi TPU
Rencanakan konfigurasi TPU berdasarkan model machine learning dan jumlah memori yang diperlukan. Berikut adalah langkah-langkah yang relevan saat merencanakan konfigurasi TPU:
Pastikan kuota yang cukup untuk on-demand atau Spot VM
Jika membuat kumpulan node TPU dengan on-demand atau VM Spot, Anda harus memiliki kuota TPU yang memadai di region yang ingin digunakan.Membuat kumpulan node TPU yang menggunakan reservasi TPU tidak memerlukan kuota TPU.1 Anda dapat melewati bagian ini untuk TPU yang telah dipesan.
Pembuatan kumpulan node on-demand atau Spot TPU di GKE memerlukan kuota Compute Engine API. Kuota Compute Engine API (compute.googleapis.com) tidak sama dengan kuota Cloud TPU API (tpu.googleapis.com), yang diperlukan saat membuat TPU dengan Cloud TPU API.
Untuk memeriksa batas dan penggunaan kuota Compute Engine API Anda saat ini untuk TPU, ikuti langkah-langkah berikut:
Buka halaman Kuota di Konsol Google Cloud:
Di kotak Filter
, lakukan hal berikut:Pilih properti Layanan, masukkan Compute Engine API, lalu tekan Enter.
Pilih properti Jenis, lalu pilih Kuota.
Pilih properti Name dan masukkan nama kuota berdasarkan versi TPU dan jenis mesin. Misalnya, jika Anda berencana untuk membuat node TPU v5e on demand yang jenis mesinnya diawali dengan
ct5lp-
, masukkanTPU v5 Lite PodSlice chips
.Versi TPU Jenis mesin dimulai dengan Nama kuota untuk instance on demand Nama kuota untuk instance Spot2 TPU v4 ct4p-
TPU v4 PodSlice chips
Preemptible TPU v4 PodSlice chips
TPU v5e ct5l-
TPU v5 Lite Device chips
Preemptible TPU v5 Lite Device chips
TPU v5e ct5lp-
TPU v5 Lite PodSlice chips
Preemptible TPU v5 Lite PodSlice chips
TPU v5p ct5p-
TPU v5p chips
Preemptible TPU v5p chips
Pilih properti Dimension (e.g. locations) dan masukkan
region:
diikuti dengan nama region tempat Anda berencana membuat TPU di GKE. Misalnya, masukkanregion:us-west4
jika Anda berencana untuk membuat node TPU di zonaus-west4-a
. Kuota TPU bersifat regional, sehingga semua zona dalam region yang sama menggunakan kuota TPU yang sama.
Jika tidak ada kuota yang cocok dengan filter yang Anda masukkan, berarti project belum diberi kuota yang ditentukan untuk region yang diinginkan, dan Anda harus meminta peningkatan kuota TPU.
-
Saat membuat kumpulan node TPU, gunakan flag
--reservation
dan--reservation-affinity=specific
untuk membuat instance yang dicadangkan. Reservasi TPU tersedia saat membeli komitmen. ↩ -
Saat membuat kumpulan node TPU, gunakan flag
--spot
untuk membuat instance Spot. ↩
Memastikan ketersediaan reservasi
Membuat kumpulan node TPU yang dicadangkan, yang berarti kumpulan node TPU yang menggunakan reservasi, tidak memerlukan kuota TPU. Namun, reservasi harus memiliki chip yang memadai atau tidak digunakan pada saat kumpulan node dibuat.
Untuk melihat reservasi yang ada dalam project, lihat daftar reservasi Anda.
Untuk melihat jumlah chip dalam reservasi TPU yang tersedia, lihat detail reservasi.
Membuat cluster
Buat cluster GKE dalam mode Standard di region dengan TPU yang tersedia. Sebaiknya gunakan cluster regional, yang memberikan panel kontrol Kubernetes dengan ketersediaan tinggi. Anda dapat menggunakan Google Cloud CLI atau Konsol Google Cloud.
gcloud container clusters create CLUSTER_NAME \
--location LOCATION \
--cluster-version VERSION
Ganti kode berikut:
CLUSTER_NAME
: nama cluster baru.LOCATION
: region dengan kapasitas TPU yang tersedia.VERSION
: versi GKE, yang harus mendukung jenis mesin yang ingin Anda gunakan. Perhatikan bahwa versi GKE default mungkin tidak tersedia untuk TPU target Anda. Untuk mempelajari versi GKE minimum yang tersedia menurut jenis mesin TPU, lihat Ketersediaan TPU di GKE
Membuat node pool
Slice TPU host tunggal
Anda dapat membuat node pool slice TPU host tunggal menggunakan Google Cloud CLI, Terraform, atau Konsol Google Cloud.
gcloud
gcloud container node-pools create POOL_NAME \
--location=LOCATION \
--cluster=CLUSTER_NAME \
--node-locations=NODE_ZONES \
--machine-type=MACHINE_TYPE \
[--num-nodes=NUM_NODES \]
[--spot \]
[--enable-autoscaling \]
[--reservation-affinity=specific \
--reservation=RESERVATION_NAME \]
[--total-min-nodes TOTAL_MIN_NODES \]
[--total-max-nodes TOTAL_MAX_NODES \]
[--location-policy=ANY]
Ganti kode berikut:
POOL_NAME
: Nama node pool baru.LOCATION
: Nama zona berdasarkan versi TPU yang ingin Anda gunakan:- Untuk TPU v4, gunakan
us-central2-b
. - Untuk jenis mesin TPU v5e yang dimulai dengan
ct5l-
, gunakanus-central1-a
ataueurope-west4-b
. - Untuk jenis mesin TPU v5e yang dimulai dengan
ct5lp-
, gunakanus-west1-c
,us-west4-a
,us-west4-b
,us-central1-a
,us-east1-c
,us-east5-b
, ataueurope-west4-a
. - Untuk TPU v5p, gunakan
us-east1-d
,us-east5-a
, atauus-east5-c
.
Untuk mempelajari lebih lanjut, lihat ketersediaan TPU di GKE.
- Untuk TPU v4, gunakan
CLUSTER_NAME
: Nama cluster.NODE_ZONE
: Daftar yang dipisahkan koma untuk satu atau beberapa zona tempat GKE membuat node pool.MACHINE_TYPE
: Jenis mesin yang akan digunakan untuk node. Untuk mengetahui informasi selengkapnya tentang jenis mesin yang kompatibel dengan TPU, gunakan tabel di Pemetaan konfigurasi TPU.
Secara opsional, Anda juga dapat menggunakan flag berikut:
NUM_NODES
: Jumlah node awal dalam node pool di setiap zona. Jika Anda menghapus flag ini, defaultnya adalah3
. Jika penskalaan otomatis diaktifkan untuk node pool menggunakan flag--enable-autoscaling
, sebaiknya tetapkanNUM_NODES
ke0
, karena autoscaler akan menyediakan node tambahan segera setelah workload membutuhkannya.RESERVATION_NAME
: Nama pemesanan yang digunakan GKE saat membuat node pool. Jika Anda menghapus tanda ini, GKE akan menggunakan TPU yang tersedia. Untuk mempelajari pemesanan TPU lebih lanjut, silakan melihat Pemesanan TPU.--enable-autoscaling
: Membuat node pool dengan penskalaan otomatis yang diaktifkan.TOTAL_MIN_NODES
: Jumlah minimum semua node dalam node pool. Hapus kolom ini kecuali jika penskalaan otomatis juga ditentukan.TOTAL_MAX_NODES
: Jumlah maksimum semua node dalam node pool. Hapus kolom ini kecuali jika penskalaan otomatis juga ditentukan.
--spot
: Menetapkan node pool agar menggunakan Spot VM untuk node di node pool. Nama ini tidak dapat diubah setelah pembuatan node pool.
Terraform
- Pastikan Anda menggunakan penyedia
google
versi 4.84.0 atau yang lebih baru. - Tambahkan blok berikut ke konfigurasi Terraform Anda:
resource "google_container_node_pool" "NODE_POOL_RESOURCE_NAME" {
provider = google
project = PROJECT_ID
cluster = CLUSTER_NAME
name = POOL_NAME
location = CLUSTER_LOCATION
node_locations = [NODE_ZONES]
initial_node_count = NUM_NODES
autoscaling {
total_min_node_count = TOTAL_MIN_NODES
total_max_node_count = TOTAL_MAX_NODES
location_policy = "ANY"
}
node_config {
machine_type = MACHINE_TYPE
reservation_affinity {
consume_reservation_type = "SPECIFIC_RESERVATION"
key = "compute.googleapis.com/reservation-name"
values = [RESERVATION_LABEL_VALUES]
}
spot = true
}
}
Ganti kode berikut:
NODE_POOL_RESOURCE_NAME
: Nama resource node pool di template Terraform.PROJECT_ID
: Project ID Anda.CLUSTER_NAME
: Nama cluster yang ada.POOL_NAME
: Nama node pool yang akan dibuat.CLUSTER_LOCATION
: Zona komputasi cluster. Tentukan region tempat versi TPU tersedia. Untuk mempelajari lebih lanjut, silakan membaca Memilih topologi dan versi TPU.NODE_ZONES
: Daftar yang dipisahkan koma untuk satu atau beberapa zona tempat GKE membuat node pool.NUM_NODES
: Jumlah awal node dalam node pool di setiap zona node pool. Jika dihapus, defaultnya adalah3
. Jika penskalaan otomatis diaktifkan untuk node pool menggunakan template penskalaan otomatis, sebaiknya Anda menyetelNUM_NODES
ke0
karena GKE menyediakan TPU node tambahan segera setelah workload Anda memintanya.MACHINE_TYPE
: Jenis mesin TPU yang akan digunakan. Untuk melihat jenis mesin yang kompatibel dengan TPU, gunakan tabel di Pemetaan konfigurasi TPU.
Secara opsional, Anda juga dapat menggunakan variabel berikut:
autoscaling
: Membuat node pool dengan penskalaan otomatis yang diaktifkan. Untuk slice TPU host tunggal, GKE melakukan penskalaan antara nilaiTOTAL_MIN_NODES
danTOTAL_MAX_NODES
.TOTAL_MIN_NODES
: Jumlah minimum semua node dalam node pool. Kolom ini bersifat opsional, kecuali jika penskalaan otomatis juga ditentukan.TOTAL_MAX_NODES
: Jumlah maksimum semua node dalam node pool. Kolom ini bersifat opsional, kecuali jika penskalaan otomatis juga ditentukan.
RESERVATION_NAME
: Jika Anda menggunakan pemesanan TPU, ini adalah daftar label resource pemesanan yang akan digunakan saat membuat node pool. Untuk mempelajari lebih lanjut cara mengisiRESERVATION_LABEL_VALUES
di kolomreservation_affinity
, silakan melihat Penyedia Terraform.spot
: Menetapkan node pool agar menggunakan Spot VM untuk TPU node. Nama ini tidak dapat diubah setelah pembuatan node pool. Untuk mengetahui informasi selengkapnya, silakan membaca Spot VM.
Konsol
Untuk membuat node pool dengan TPU:
Buka halaman Google Kubernetes Engine di konsol Google Cloud.
Di daftar cluster, klik nama cluster yang ingin diubah.
Klik add_box Add node pool.
Di bagian Node pool details, centang kotak Specify node locations.
Pilih zona berdasarkan versi TPU yang ingin Anda gunakan:
- Untuk TPU v4, gunakan
us-central2-b
. - Untuk jenis mesin TPU v5e yang dimulai dengan
ct5l-
, gunakanus-central1-a
ataueurope-west4-b
. - Untuk jenis mesin TPU v5e yang dimulai dengan
ct5lp-
, gunakanus-west1-c
,us-west4-a
,us-west4-b
,us-central1-a
,us-east1-c
,us-east5-b
, ataueurope-west4-a
. - Untuk TPU v5p, gunakan
us-east1-d
,us-east5-a
, atauus-east5-c
.
- Untuk TPU v4, gunakan
Dari panel navigasi, klik Node.
Di bagian Konfigurasi Mesin, pilih TPU.
Di menu drop-down Seri, pilih salah satu opsi berikut:
- CT4P: TPU v4
- CT5LP: TPU v5e
- CT5P: TPU v5p
Di menu drop-down Jenis mesin, pilih nama mesin yang akan digunakan untuk node. Gunakan tabel Pemetaan konfigurasi TPU untuk mempelajari cara menentukan jenis mesin dan topologi TPU yang membuat TPU node pool host tunggal.
Di menu drop-down Topologi TPU, pilih topologi fisik untuk slice TPU.
Dalam dialog Perubahan yang diperlukan, klik Buat perubahan.
Pastikan Jenis boot disk adalah Persistent disk standar atau Persistent disk SSD.
Secara opsional, pilih kotak centang Aktifkan node di Spot VM agar dapat menggunakan Spot VM untuk node di node pool.
Klik Create.
Slice TPU multi-host
Anda dapat membuat node pool slice TPU multi-host menggunakan Google Cloud CLI, Terraform, atau Konsol Google Cloud.
gcloud
gcloud container node-pools create POOL_NAME \
--location=LOCATION \
--cluster=CLUSTER_NAME \
--node-locations=NODE_ZONE \
--machine-type=MACHINE_TYPE \
--tpu-topology=TPU_TOPOLOGY \
--num-nodes=NUM_NODES \
[--spot \]
[--enable-autoscaling \
--max-nodes MAX_NODES]
[--reservation-affinity=specific \
--reservation=RESERVATION_NAME]
Ganti kode berikut:
POOL_NAME
: Nama node pool baru.LOCATION
: Nama zona berdasarkan versi TPU yang ingin Anda gunakan:- Untuk TPU v4, gunakan
us-central2-b
. - Jenis mesin TPU v5e yang dimulai dengan
ct5l-
tidak pernah berfungsi multi-host. - Untuk jenis mesin TPU v5e yang dimulai dengan
ct5lp-
, gunakanus-west1-c
,us-west4-a
,us-west4-b
,us-central1-a
,us-east1-c
,us-east5-b
, ataueurope-west4-a
. - Untuk jenis mesin TPU v5p yang dimulai dengan
ct5p-
, gunakanus-east1-d
,us-east5-a
, atauus-east5-c
.
Untuk mempelajari lebih lanjut, lihat ketersediaan TPU di GKE.
- Untuk TPU v4, gunakan
CLUSTER_NAME
: Nama cluster.NODE_ZONE
: Daftar yang dipisahkan koma untuk satu atau beberapa zona tempat GKE membuat node pool.MACHINE_TYPE
: Jenis mesin yang akan digunakan untuk node. Untuk mempelajari jenis mesin yang tersedia lebih lanjut, silakan membaca Pemetaan konfigurasi TPU.TPU_TOPOLOGY
: Topologi fisik untuk slice TPU. Format topologi bergantung pada versi TPU sebagai berikut:- TPU v4 atau v5p: Menentukan topologi dalam 3 tuple (
{A}x{B}x{C}
), misalnya4x4x4
. - TPU v5e: Menentukan topologi dalam 2 tuple (
{A}x{B}
), misalnya2x2
.
Untuk mempelajari lebih lanjut, lihat Topologi.
- TPU v4 atau v5p: Menentukan topologi dalam 3 tuple (
NUM_NODES
: Jumlah node di node pool. Nilai ini harus nol atau merupakan hasil dari nilai yang ditentukan dalamTPU_TOPOLOGY
({A}x{B}x{C}
) dibagi dengan jumlah chip di setiap VM. Untuk TPU v4 dan TPU v5e multi-host, jumlah chip di setiap VM adalah empat. Oleh karena itu, jikaTPU_TOPOLOGY
Anda adalah2x4x4
(TPU v4 dengan empat chip di setiap VM),NUM_NODES
adalah 32/4 yang sama dengan 8.
Secara opsional, Anda juga dapat menggunakan flag berikut:
RESERVATION_NAME
: Nama pemesanan yang digunakan GKE saat membuat node pool. Jika flag ini dihapus, GKE akan menggunakan TPU node pool yang tersedia. Untuk mempelajari pemesanan TPU lebih lanjut, silakan melihat Pemesanan TPU.--spot
: Menetapkan node pool agar menggunakan Spot VM untuk TPU node. Nama ini tidak dapat diubah setelah pembuatan node pool. Untuk mengetahui informasi selengkapnya, silakan membaca Spot VM.--enable-autoscaling
: Membuat node pool dengan penskalaan otomatis yang diaktifkan. Saat GKE menskalakan node pool slice TPU multi-host, GKE secara atomik akan meningkatkan skala node pool dari nol hingga ukuran maksimum.MAX_NODES
: Ukuran maksimum node pool. Tanda--max-nodes
diperlukan jika--enable-autoscaling
diberikan dan harus sama dengan hasil dari nilai yang ditentukan dalamTPU_TOPOLOGY
({A}x{B}x{C}
) dibagi dengan jumlah chip di setiap VM.
Terraform
- Pastikan Anda menggunakan penyedia
google
versi 4.84.0 atau yang lebih baru. Tambahkan blok berikut ke konfigurasi Terraform Anda:
resource "google_container_node_pool" "NODE_POOL_RESOURCE_NAME" { provider = google project = PROJECT_ID cluster = CLUSTER_NAME name = POOL_NAME location = CLUSTER_LOCATION node_locations = [NODE_ZONES] initial_node_count = NUM_NODES autoscaling { max_node_count = MAX_NODES location_policy = "ANY" } node_config { machine_type = MACHINE_TYPE reservation_affinity { consume_reservation_type = "SPECIFIC_RESERVATION" key = "compute.googleapis.com/reservation-name" values = [RESERVATION_LABEL_VALUES] } spot = true } placement_policy { type = "COMPACT" tpu_topology = TPU_TOPOLOGY } }
Ganti kode berikut:
NODE_POOL_RESOURCE_NAME
: Nama resource node pool di template Terraform.PROJECT_ID
: Project ID Anda.CLUSTER_NAME
: Nama cluster yang ada tempat node pool akan ditambahkan.POOL_NAME
: Nama node pool yang akan dibuat.CLUSTER_LOCATION
: Menghitung lokasi untuk cluster. Sebaiknya Anda memiliki cluster regional untuk keandalan panel kontrol Kubernetes yang lebih tinggi. Anda juga dapat menggunakan cluster zona. Untuk mempelajari lebih lanjut, silakan membaca Memilih topologi dan versi TPU.NODE_ZONES
: Daftar yang dipisahkan koma untuk satu atau beberapa zona tempat GKE membuat node pool.NUM_NODES
: Jumlah node dalam node pool. Nilainya harus nol atau hasil kali jumlah TPU chip yang dibagi empat, karena dalam slice TPU multi-host, setiap TPU node memiliki 4 chip. Misalnya, jikaTPU_TOPOLOGY
adalah4x8
, maka ada 32 chip, yang berarti harus ada 8NUM_NODES
. Untuk mempelajari lebih lanjut topologi TPU, gunakan tabel di bagian Pemetaan konfigurasi TPU.TPU_TOPOLOGY
: Ini menunjukkan topologi fisik yang diinginkan untuk slice TPU. Format topologi bergantung pada versi TPU yang Anda gunakan:- Untuk TPU v4: Tentukan topologi dalam 3 tuple (
{A}x{B}x{C}
), misalnya4x4x4
. - Untuk TPU v5e: Tentukan topologi dalam 2 tuple (
{A}x{B}
), misalnya2x2
.
- Untuk TPU v4: Tentukan topologi dalam 3 tuple (
Secara opsional, Anda juga dapat menggunakan variabel berikut:
RESERVATION_NAME
: Jika Anda menggunakan pemesanan TPU, ini adalah daftar label resource pemesanan yang akan digunakan saat membuat node pool. Untuk mempelajari cara mengisiRESERVATION_LABEL_VALUES
di kolomreservation_affinity
lebih lanjut, silakan melihat Penyedia Terraform.autoscaling
: Membuat node pool dengan penskalaan otomatis yang diaktifkan. Saat GKE menskalakan node pool slice TPU multi-host, GKE secara atomik akan meningkatkan skala node pool dari nol hingga ukuran maksimum.MAX_NODES
: Ini adalah ukuran maksimum node pool. Ini harus sama dengan hasil dari nilai yang ditentukan dalamTPU_TOPOLOGY
({A}x{B}x{C}
) dibagi dengan jumlah chip di setiap VM.
spot
: Memungkinkan node pool menggunakan Spot VM untuk TPU node. Nama ini tidak dapat diubah setelah pembuatan node pool. Untuk mengetahui informasi selengkapnya, silakan melihat Spot VM.
Konsol
Untuk membuat node pool dengan TPU:
Buka halaman Google Kubernetes Engine di konsol Google Cloud.
Di daftar cluster, klik nama cluster yang ingin diubah.
Klik add_box Add node pool.
Di bagian Node pool details, centang kotak Specify node locations.
Pilih zona berdasarkan versi TPU yang ingin Anda gunakan:
- Untuk TPU v4, gunakan
us-central2-b
. - Jenis mesin TPU v5e yang dimulai dengan
ct5l-
tidak pernah berfungsi multi-host. - Untuk jenis mesin TPU v5e yang dimulai dengan
ct5lp-
, gunakanus-west1-c
,us-west4-a
,us-west4-b
,us-central1-a
,us-east1-c
,us-east5-b
, ataueurope-west4-a
. - Untuk jenis mesin TPU v5p yang dimulai dengan
ct5p-
, gunakanus-east1-d
,us-east5-a
, atauus-east5-c
.
- Untuk TPU v4, gunakan
Dari panel navigasi, klik Node.
Di bagian Konfigurasi Mesin, pilih TPU.
Di menu drop-down Seri, pilih salah satu opsi berikut:
- CT4P: Untuk TPU v4.
- CT5LP: Untuk TPU v5e.
Di menu drop-down Jenis mesin, pilih nama mesin yang akan digunakan untuk node. Gunakan tabel Pemetaan konfigurasi TPU untuk mempelajari cara menentukan jenis mesin dan topologi TPU yang membuat TPU node pool multi-host.
Di menu drop-down Topologi TPU, pilih topologi fisik untuk slice TPU.
Dalam dialog Perubahan yang diperlukan, klik Buat perubahan.
Pastikan Jenis boot disk adalah Persistent disk standar atau Persistent disk SSD.
Secara opsional, pilih kotak centang Aktifkan node di Spot VM agar dapat menggunakan Spot VM untuk node di node pool.
Klik Create.
Status penyediaan
Jika GKE tidak dapat membuat kumpulan node TPU slice karena kapasitas TPU yang tersedia tidak memadai, GKE akan menampilkan pesan error yang menunjukkan bahwa TPU node tidak dapat dibuat karena kurangnya kapasitas.
Jika Anda membuat kumpulan node slice TPU host tunggal, pesan error akan terlihat seperti ini:
2 nodes cannot be created due to lack of capacity. The missing nodes will be
created asynchronously once capacity is available. You can either wait for the
nodes to be up, or delete the node pool and try re-creating it again later.
Jika Anda membuat kumpulan node slice TPU multi-host, pesan error akan terlihat seperti ini:
The nodes (managed by ...) cannot be created now due to lack of capacity. They
will be created asynchronously once capacity is available. You can either wait
for the nodes to be up, or delete the node pool and try re-creating it again
later.
Permintaan penyediaan TPU Anda dapat berada dalam antrean untuk waktu yang lama dan akan tetap dalam status "Penyediaan" saat berada dalam antrean.
Setelah kapasitas tersedia, GKE akan membuat node yang tersisa yang belum dibuat.
Jika Anda membutuhkan kapasitas lebih cepat, pertimbangkan untuk mencoba Spot VM, meskipun perlu diketahui bahwa Spot VM menggunakan kuota yang berbeda dari instance on-demand.
Anda dapat menghapus permintaan TPU yang ada dalam antrean dengan menghapus kumpulan node slice TPU.
Menjalankan workload Anda pada TPU node
Persiapan workload
Workload TPU memiliki persyaratan persiapan berikut.
- Framework seperti JAX, PyTorch, dan TensorFlow mengakses VM TPU menggunakan library bersama
libtpu
.libtpu
mencakup compiler XLA, software runtime TPU, dan driver TPU. Setiap rilis PyTorch dan JAX memerlukan versilibtpu.so
tertentu. Untuk menggunakan TPU di GKE, pastikan Anda menggunakan versi berikut:Jenis TPU Versi libtpu.so
TPU v5e
tpu-v5-lite-podslice
tpu-v5-lite-device
- Versi jax[tpu] yang direkomendasikan: v0.4.9 atau yang lebih baru
- Versi torchxla[tpuvm] yang direkomendasikan: v2.1.0 atau yang lebih baru
TPU v5p - Versi jax[tpu] yang direkomendasikan: 0.4.19 atau yang lebih baru.
- Versi torchxla[tpuvm] yang direkomendasikan: disarankan untuk menggunakan build versi malam pada 23 Oktober 2023.
TPU v4
tpu-v4-podslice
- jax[tpu]: v0.4.4 atau yang lebih baru
- torchxla[tpuvm]: v2.0.0 atau yang lebih baru
- Tetapkan variabel lingkungan berikut untuk penampung yang meminta resource TPU:
TPU_WORKER_ID
: Bilangan bulat unik untuk setiap Pod. ID ini menunjukkan worker-id unik di slice TPU. Nilai yang didukung untuk kolom ini berkisar dari nol hingga jumlah Pod dikurangi satu.TPU_WORKER_HOSTNAMES
: Daftar yang dipisahkan koma dari nama host VM TPU atau alamat IP yang perlu berkomunikasi satu sama lain dalam slice. Harus ada nama host atau alamat IP untuk setiap VM TPU dalam slice. Daftar alamat IP atau nama host diurutkan dan nol diindeks olehTPU_WORKER_ID
.Dalam manifes beban kerja, tambahkan pemilih node Kubernetes untuk memastikan bahwa GKE menjadwalkan beban kerja TPU Anda pada jenis mesin TPU dan topologi TPU yang Anda tentukan:
nodeSelector: cloud.google.com/gke-tpu-accelerator: TPU_ACCELERATOR cloud.google.com/gke-tpu-topology: TPU_TOPOLOGY
Ganti kode berikut:
TPU_ACCELERATOR
: Nama akselerator TPU:- Untuk TPU v4, gunakan
tpu-v4-podslice
- Untuk jenis mesin TPU v5e yang dimulai dengan
ct5l-
, gunakantpu-v5-lite-device
- Untuk jenis mesin TPU v5e yang dimulai dengan
ct5lp-
, gunakantpu-v5-lite-podslice
- Untuk TPU v5p, gunakan
tpu-v5p-slice
- Untuk TPU v4, gunakan
TPU_TOPOLOGY
: Topologi fisik untuk slice TPU. Format topologi bergantung pada versi TPU sebagai berikut:- TPU v4: Menentukan topologi dalam 3 tuple (
{A}x{B}x{C}
), misalnya4x4x4
. - TPU v5e: Menentukan topologi dalam 2 tuple (
{A}x{B}
), misalnya2x2
. - TPU v5p: Menentukan topologi dalam 3 tuple (
{A}x{B}x{C}
), misalnya4x4x4
.
- TPU v4: Menentukan topologi dalam 3 tuple (
GKE otomatis memasukkan variabel lingkungan ini menggunakan webhook yang berubah saat Tugas dibuat dengan
Saat men-deploy resource multi-host TPU dengan Kuberay, GKE menyediakan webhook yang dapat di-deploy sebagai bagian dari template Terraform untuk menjalankan Ray di GKE. Petunjuk untuk menjalankan Ray di GKE dengan TPU dapat ditemukan di Panduan Pengguna TPU. Webhook yang berubah akan memasukkan variabel lingkungan ini ke dalam cluster Ray yang meminta properticompletionMode: Indexed
,subdomain
,parallelism > 1
, dan meminta propertigoogle.com/tpu
. GKE menambahkan Layanan headless sehingga data DNS ditambahkan untuk Pod yang mendukung Layanan.google.com/tpu
dan pemilih nodecloud.google.com/gke-tpu-topology
multi-host.
Setelah menyelesaikan persiapan beban kerja, Anda dapat menjalankan Tugas yang menggunakan TPU.
Bagian berikut menunjukkan contoh cara menjalankan Tugas yang melakukan komputasi sederhana dengan TPU.
Contoh 1: Menjalankan workload yang menampilkan jumlah TPU chip yang tersedia di TPU node pool
Workload berikut menampilkan jumlah chip TPU di semua node dalam slice TPU multi-host. Untuk membuat slice multi-host, beban kerja memiliki parameter berikut:
- Versi TPU: TPU v4
- Topologi: 2x2x4
Pemilihan versi dan topologi ini menghasilkan slice multi-host.
- Simpan manifes berikut sebagai
available-chips-multihost.yaml
:apiVersion: v1 kind: Service metadata: name: headless-svc spec: clusterIP: None selector: job-name: tpu-available-chips --- apiVersion: batch/v1 kind: Job metadata: name: tpu-available-chips spec: backoffLimit: 0 completions: 4 parallelism: 4 completionMode: Indexed template: spec: subdomain: headless-svc restartPolicy: Never nodeSelector: cloud.google.com/gke-tpu-accelerator: tpu-v4-podslice cloud.google.com/gke-tpu-topology: 2x2x4 containers: - name: tpu-job image: python:3.10 ports: - containerPort: 8471 # Default port using which TPU VMs communicate - containerPort: 8431 # Port to export TPU runtime metrics, if supported. securityContext: privileged: true command: - bash - -c - | pip install 'jax[tpu]' -f https://storage.googleapis.com/jax-releases/libtpu_releases.html python -c 'import jax; print("TPU cores:", jax.device_count())' resources: requests: cpu: 10 memory: 500Gi google.com/tpu: 4 limits: cpu: 10 memory: 500Gi google.com/tpu: 4
- Deploy manifes:
kubectl create -f available-chips-multihost.yaml
GKE menjalankan slice TPU v4 dengan empat VM TPU (slice TPU multi-host). Slice ini memiliki 16 chip yang saling terhubung.
- Pastikan Tugas membuat empat Pod:
kubectl get pods
Outputnya mirip dengan yang berikut ini:
NAME READY STATUS RESTARTS AGE tpu-job-podslice-0-5cd8r 0/1 Completed 0 97s tpu-job-podslice-1-lqqxt 0/1 Completed 0 97s tpu-job-podslice-2-f6kwh 0/1 Completed 0 97s tpu-job-podslice-3-m8b5c 0/1 Completed 0 97s
- Dapatkan log salah satu Pod:
kubectl logs POD_NAME
Ganti
POD_NAME
dengan nama salah satu Pod yang dibuat. Contoh,tpu-job-podslice-0-5cd8r
.Outputnya mirip dengan hal berikut ini:
TPU cores: 16
Contoh 2: menjalankan workload yang menampilkan jumlah TPU chip yang tersedia di VM TPU
Beban kerja berikut adalah Pod statis yang menampilkan jumlah chip TPU yang terpasang ke node tertentu. Untuk membuat node host tunggal, beban kerja memiliki parameter berikut:
- Versi TPU: TPU v5e
- Topologi: 2x4
Pilihan versi dan topologi ini menghasilkan irisan host tunggal.
- Simpan manifes berikut sebagai
available-chips-singlehost.yaml
:apiVersion: v1 kind: Pod metadata: name: tpu-job-jax-v5 spec: restartPolicy: Never nodeSelector: cloud.google.com/gke-tpu-accelerator: tpu-v5-lite-podslice cloud.google.com/gke-tpu-topology: 2x4 containers: - name: tpu-job image: python:3.10 ports: - containerPort: 8431 # Port to export TPU runtime metrics, if supported. securityContext: privileged: true command: - bash - -c - | pip install 'jax[tpu]' -f https://storage.googleapis.com/jax-releases/libtpu_releases.html python -c 'import jax; print("Total TPU chips:", jax.device_count())' resources: requests: google.com/tpu: 8 limits: google.com/tpu: 8
- Deploy manifes:
kubectl create -f available-chips-singlehost.yaml
GKE menyediakan node dengan delapan irisan TPU host tunggal yang menggunakan TPU v5e. Setiap VM TPU memiliki delapan chip (slice TPU host tunggal).
- Dapatkan log Pod:
kubectl logs tpu-job-jax-v5
Outputnya mirip dengan hal berikut ini:
Total TPU chips: 8
Mengupgrade node pool menggunakan akselerator (GPU dan TPU)
GKE otomatis mengupgrade Cluster standar, termasuk node pool. Anda juga dapat mengupgrade kumpulan node secara manual jika ingin node Anda pada versi yang lebih baru lebih cepat. Untuk mengontrol cara kerja upgrade untuk cluster Anda, gunakan saluran rilis, periode pemeliharaan dan pengecualian, dan urutan peluncuran.
Anda juga dapat mengonfigurasi strategi upgrade node untuk kumpulan node, seperti upgrade surge atau upgrade biru-hijau. Dengan mengonfigurasi strategi ini, Anda dapat memastikan bahwa node pool diupgrade dengan cara yang mencapai keseimbangan optimal antara kecepatan dan gangguan bagi lingkungan Anda. Untuk kumpulan node slice TPU multi-host, daripada menggunakan strategi upgrade node yang telah dikonfigurasi, GKE membuat ulang seluruh kumpulan node secara atomik dalam satu langkah. Untuk mempelajari lebih lanjut, lihat definisi atomicity dalam Terminologi terkait TPU di GKE.
Penggunaan strategi upgrade node akan memerlukan GKE untuk menyediakan resource tambahan untuk sementara, bergantung pada konfigurasinya. Jika Google Cloud memiliki kapasitas terbatas untuk resource node pool—misalnya, Anda melihat error ketersediaan resource saat mencoba membuat lebih banyak node dengan GPU atau TPU—lihat Mengupgrade di lingkungan dengan resource terbatas.
Pembersihan
Agar tidak menimbulkan biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam panduan ini, pertimbangkan untuk menghapus TPU node pool yang tidak lagi memiliki workload terjadwal. Jika workload yang berjalan harus dihentikan secara terkontrol, gunakan kubectl drain
untuk membersihkan workload sebelum Anda menghapus node.
Hapus TPU node pool:
gcloud container node-pools delete POOL_NAME \ --location=LOCATION \ --cluster=CLUSTER_NAME
Ganti kode berikut:
POOL_NAME
: Nama node pool.CLUSTER_NAME
: Nama cluster.LOCATION
: Lokasi komputasi cluster.
Konfigurasi tambahan
Bagian berikut menjelaskan konfigurasi tambahan yang dapat Anda terapkan pada workload TPU.
Multi-slice
Anda dapat menggabungkan slice yang lebih kecil dalam Multi-slice untuk menangani workload pelatihan yang lebih besar. Untuk mengetahui informasi selengkapnya, silakan melihat TPU multi-slice di GKE.
Memigrasikan pemesanan TPU
Jika sudah memiliki pemesanan TPU, Anda harus memigrasikan pemesanan TPU terlebih dahulu ke sistem pemesanan berbasis Compute Engine yang baru. Anda juga dapat membuat sistem pemesanan berbasis Compute Engine yang tidak memerlukan migrasi. Untuk mempelajari cara memigrasikan pemesanan TPU, silakan melihat pemesanan TPU.
Logging
Log yang dikeluarkan oleh container yang berjalan di node GKE, termasuk VM TPU, dikumpulkan oleh agen logging GKE, dikirim ke Logging, dan terlihat di Logging.
Menggunakan penyediaan otomatis node GKE
Anda dapat mengonfigurasi GKE untuk membuat dan menghapus node pool secara otomatis guna memenuhi permintaan resource dari workload TPU Anda. Untuk mengetahui informasi selengkapnya, silakan melihat Mengonfigurasi Cloud TPU.
Perbaikan otomatis TPU node
Jika TPU node dalam node pool slice TPU multi-host tidak responsif, seluruh node pool akan dibuat ulang. Kondisi yang menyebabkan TPU node tidak responsif mencakup berikut ini:
- Semua TPU node dengan conditions node umum.
- Semua TPU node dengan jumlah TPU yang tidak dapat dialokasikan yang lebih besar dari nol.
- Semua instance VM TPU yang diakhiri (karena preemption) atau dihentikan.
- Pemeliharaan node: Jika ada TPU node (VM) dalam node pool slice TPU multi-host menjadi tidak aktif karena pemeliharaan host, GKE akan membuat ulang seluruh slice TPU.
Anda dapat melihat status perbaikan (termasuk alasan kegagalan) di histori operasi. Jika kegagalan disebabkan oleh kuota yang tidak mencukupi, hubungi perwakilan akun Google Cloud Anda untuk meningkatkan kuota yang sesuai.
Konfigurasi penghentian halus node TPU
Di cluster GKE dengan bidang kontrol yang menjalankan 1.29.1-gke.1425000 atau yang lebih baru, node TPU mendukung sinyal SIGTERM
yang memberi tahu node tentang penonaktifan dalam waktu dekat. Notifikasi penonaktifan yang akan segera dapat dikonfigurasi hingga lima menit di TPU node.
Anda dapat mengonfigurasi GKE untuk menghentikan workload ML dengan lancar dalam jangka waktu notifikasi ini. Selama penghentian tuntas, beban kerja Anda dapat
melakukan proses pembersihan, seperti menyimpan data beban kerja untuk mengurangi kehilangan data.
Untuk mendapatkan waktu notifikasi maksimum, dalam manifes Pod, tetapkan
kolom spec.terminationGracePeriodSeconds
ke 300
detik (lima menit) sebagai
berikut:
spec:
terminationGracePeriodSeconds: 300
GKE berusaha sebaik mungkin untuk menghentikan Pod ini dengan baik dan menjalankan tindakan penghentian yang Anda tentukan, misalnya, menyimpan status pelatihan.
Menjalankan container tanpa mode hak istimewa
Jika TPU node Anda menjalankan versi yang lebih lama dari 1.28, silakan membaca bagian berikut:
Container yang berjalan pada VM TPU memerlukan akses ke batas yang lebih tinggi untuk memori terkunci
sehingga driver dapat berkomunikasi dengan TPU chip melalui akses memori
langsung (DMA). Untuk mengaktifkan opsi ini, Anda harus mengonfigurasi
ulimit
yang lebih tinggi. Jika Anda ingin
mengurangi cakupan izin di container, selesaikan langkah-langkah berikut:
Edit
securityContext
untuk menyertakan kolom berikut:securityContext: capabilities: add: ["SYS_RESOURCE"]
Tingkatkan
ulimit
dengan menjalankan perintah berikut di dalam container sebelum menyiapkan workload Anda untuk menggunakan TPU resource:ulimit -l 68719476736
Catatan: Untuk TPU v5e, menjalankan container tanpa mode hak istimewa tersedia dalam cluster di versi 1.27.4-gke.900 dan yang lebih baru.
Kemampuan observasi dan metrik
Dasbor
Di halaman Cluster Kubernetes di Google Cloud Console, tab Observability menampilkan metrik kemampuan observasi TPU. Untuk informasi selengkapnya, lihat metrik kemampuan observasi GKE.
Dasbor TPU hanya diisi jika Anda mengaktifkan metrik sistem di cluster GKE.
Metrik runtime
Pada GKE versi 1.27.4-gke.900 atau yang lebih baru, workload TPU yang menggunakan JAX versi 0.4.14 atau yang lebih baru dan menentukan containerPort: 8431
akan mengekspor metrik pemakaian TPU sebagai metrik sistem GKE.
Metrik berikut tersedia di Cloud Monitoring untuk memantau performa runtime workload TPU Anda:
- Siklus tugas: Persentase waktu dalam periode pengambilan sampel terakhir (60 detik) saat TensorCore secara aktif memproses TPU chip. Persentase yang lebih besar berarti pemakaian TPU yang lebih baik.
- Memori yang digunakan: Jumlah memori akselerator yang dialokasikan dalam byte. Sampelnya dibuat setiap 60 detik.
- Total memori: Total memori akselerator dalam byte. Dibuat sampelnya setiap 60 detik.
Metrik ini terletak di skema node Kubernetes (k8s_node
) dan container Kubernetes (k8s_container
).
Container Kubernetes:
kubernetes.io/container/accelerator/duty_cycle
kubernetes.io/container/accelerator/memory_used
kubernetes.io/container/accelerator/memory_total
Node Kubernetes:
kubernetes.io/node/accelerator/duty_cycle
kubernetes.io/node/accelerator/memory_used
kubernetes.io/node/accelerator/memory_total
Metrik host
Pada GKE versi 1.28.1-gke.1066000 atau yang lebih baru, VM TPU mengekspor metrik pemakaian TPU sebagai metrik sistem GKE. Metrik berikut tersedia di Cloud Monitoring untuk memantau performa host TPU Anda:
- Pemakaian TensorCore: Persentase TensorCore yang saat ini dipakai. Nilai TensorCore sama dengan jumlah unit perkalian matriks (MXU) ditambah unit vektor. Nilai pemakaian TensorCore adalah pembagian dari operasi TensorCore yang dilakukan selama periode sampel terakhir (60 detik) dengan jumlah operasi TensorCore yang didukung selama periode yang sama. Nilai yang lebih besar berarti pemanfaatan yang lebih baik.
- Pemakaian bandwidth memori: Persentase saat ini dari bandwidth memori akselerator yang sedang digunakan. Dihitung dengan membagi bandwidth memori yang digunakan selama periode sampel (60 dtk) dengan bandwidth maksimum yang didukung selama periode sampel yang sama.
Metrik ini terletak di skema node Kubernetes (k8s_node
) dan container Kubernetes (k8s_container
).
Container Kubernetes:
kubernetes.io/container/accelerator/tensorcore_utilization
kubernetes.io/container/accelerator/memory_bandwidth_utilization
Node Kubernetes:
kubernetes.io/container/node/tensorcore_utilization
kubernetes.io/container/node/memory_bandwidth_utilization
Untuk mengetahui informasi selengkapnya, lihat metrik Kubernetes dan metrik sistem GKE.
Masalah umum
- Autoscaler cluster mungkin salah menghitung kapasitas untuk TPU node baru sebelum node tersebut melaporkan TPU yang tersedia. Autoscaler cluster kemudian dapat melakukan peningkatan skala tambahan dan akibatnya membuat lebih banyak node daripada yang diperlukan. Autoscaler cluster akan memperkecil skala node tambahan, jika tidak diperlukan, setelah operasi pengecilan skala reguler.
- Autoscaler cluster membatalkan peningkatan skala TPU node pool yang masih dalam status menunggu selama lebih dari 15 menit. Autoscaler Cluster akan mencoba kembali operasi peningkatan skala tersebut nanti. Perilaku ini dapat mengurangi ketersediaan TPU bagi pelanggan yang tidak menggunakan pemesanan.
- Workload non-TPU yang memiliki toleransi terhadap taint TPU dapat mencegah pengecilan skala node pool jika workload tersebut sedang dibuat ulang selama proses pengosongan TPU node pool.
Langkah selanjutnya
- Menayangkan Model Bahasa Besar dengan Saxml di TPU
- Pelajari cara menyiapkan Ray di GKE dengan TPU lebih lanjut
- Bangun machine learning berskala besar di Cloud TPU dengan GKE
- Menayangkan Model Bahasa Besar dengan KubeRay di TPU
- Memecahkan masalah TPU di GKE