Halaman ini menunjukkan cara mengizinkan beberapa workload mendapatkan akses berbagi waktu GPU ke akselerator hardware GPU NVIDIA® tunggal di Google Kubernetes Engine (GKE) Anda node. Untuk mempelajari lebih lanjut tentang cara kerja pembagian waktu GPU, serta keterbatasan dan tentang kapan Anda harus menggunakan berbagi waktu GPU, lihat Pembagian waktu GPU di GKE.
Ringkasan
Berbagi waktu GPU adalah fitur GKE yang memungkinkan beberapa container berbagi satu GPU fisik yang dilekatkan ke node. Dengan menggunakan berbagi waktu GPU di GKE, Anda dapat menggunakan GPU yang terpasang secara lebih efisien dan menghemat biaya pengoperasian.
Siapa sasaran pengguna panduan ini
Petunjuk dalam panduan ini berlaku untuk Anda jika Anda adalah salah satu dari berikut ini:
- Administrator platform: Membuat dan mengelola cluster GKE, merencanakan persyaratan infrastruktur dan resource, serta memantau performa cluster.
- Developer aplikasi: Mendesain dan men-deploy workload di cluster GKE. Jika Anda menginginkan petunjuk untuk meminta Pembagian waktu GPU, lihat Deploy workload yang menggunakan pembagian waktu GPU.
Persyaratan
- Versi GKE: Anda dapat mengaktifkan pembagian waktu GPU di Cluster GKE Standard berjalan GKE versi 1.23.7-gke.1400 dan yang lebih baru. Anda dapat menggunakan GPU berbagi waktu dengan GKE Autopilot yang menjalankan GKE versi 1.29.3-gke.1093000 dan yang lebih baru.
- Jenis GPU: Anda dapat mengaktifkan pembagian waktu GPU di semua model GPU NVIDIA.
Sebelum memulai
Sebelum memulai, pastikan Anda telah menjalankan tugas berikut:
- Aktifkan Google Kubernetes Engine API. Mengaktifkan Google Kubernetes Engine API
- Jika ingin menggunakan Google Cloud CLI untuk tugas ini,
instal lalu
lakukan inisialisasi
gcloud CLI. Jika sebelumnya Anda telah menginstal gcloud CLI, dapatkan versi terbaru dengan menjalankan
gcloud components update
.
- Pastikan Anda memiliki Kuota model GPU NVIDIA. Jika Anda memerlukan lebih banyak kuota, lihat Meminta penambahan kuota.
- Rencanakan kapasitas GPU Anda berdasarkan kebutuhan resource workload dan kapasitas GPU yang mendasarinya.
- Meninjau batasan berbagi waktu GPU.
Mengaktifkan pembagian waktu GPU di cluster GKE dan node pool
Sebagai administrator platform, Anda harus mengaktifkan pembagian waktu GPU di GKE Cluster standar sebelum developer dapat men-deploy workload untuk menggunakan GPU. Untuk mengaktifkan Pembagian waktu GPU, Anda harus melakukan hal berikut:
- Aktifkan pembagian waktu GPU di cluster GKE.
- Instal driver perangkat GPU NVIDIA (jika diperlukan).
- Verifikasi resource GPU yang tersedia di node Anda.
Cluster Autopilot yang menjalankan versi 1.29.3-gke.1093000 dan kemudian mengaktifkan GPU berbagi waktu secara default. Berbagi waktu dengan Autopilot dikonfigurasi dalam spesifikasi workload. Untuk mempelajari lebih lanjut, lihat Men-deploy workload yang menggunakan GPU bersama waktu bagian.
Mengaktifkan pembagian waktu GPU di cluster GKE Standard
Anda dapat mengaktifkan pembagian waktu GPU saat membuat GKE Cluster standar. Node pool default di cluster telah mengaktifkan fitur tersebut. Anda masih harus mengaktifkan pembagian waktu GPU saat membuat kumpulan node dalam cluster tersebut.
gcloud container clusters create CLUSTER_NAME \
--region=COMPUTE_REGION \
--cluster-version=CLUSTER_VERSION \
--machine-type=MACHINE_TYPE \
--accelerator=type=GPU_TYPE,count=GPU_QUANTITY,gpu-sharing-strategy=time-sharing,max-shared-clients-per-gpu=CLIENTS_PER_GPU,gpu-driver-version=DRIVER_VERSION
Ganti kode berikut:
CLUSTER_NAME
: nama cluster baru.COMPUTE_REGION
: region Compute Engine untuk cluster baru Anda. Untuk cluster zona, tentukan--zone=COMPUTE_ZONE
.CLUSTER_VERSION
: versi GKE untuk bidang kontrol dan node cluster. Gunakan GKE versi 1.23.7-gke.1400 atau yang lebih baru. Atau, tentukan saluran rilis dengan versi GKE tersebut menggunakan flag--release-channel=RELEASE_CHANNEL
.MACHINE_TYPE
: Jenis mesin Compute Engine untuk node Anda. Sebaiknya Anda memilih Jenis mesin yang dioptimalkan untuk akselerator.GPU_TYPE
: jenis GPU, yang harus berupa Platform GPU NVIDIA sepertinvidia-tesla-v100
.GPU_QUANTITY
: jumlah GPU fisik yang akan dipasang ke setiap node di node pool default.CLIENTS_PER_GPU
: jumlah maksimum container yang dapat membagikan setiap GPU fisik.DRIVER_VERSION
: versi driver NVIDIA yang akan diinstal. Dapat berupa salah satu dari hal berikut:default
: Menginstal versi driver default untuk versi GKE Anda.latest
: Instal versi driver terbaru yang tersedia untuk versi GKE Anda. Hanya tersedia untuk node yang menggunakan Container-Optimized OS.disabled
: Melewati penginstalan driver otomatis. Anda harus menginstal driver secara manual setelah membuat node pool. Jika Anda menghilangkangpu-driver-version
, ini adalah opsi defaultnya.
Mengaktifkan pembagian waktu GPU pada node pool GKE
Anda dapat mengaktifkan pembagian waktu GPU saat membuat kumpulan node baru secara manual di cluster GKE.
gcloud container node-pools create NODEPOOL_NAME \
--cluster=CLUSTER_NAME \
--machine-type=MACHINE_TYPE \
--region=COMPUTE_REGION \
--accelerator=type=GPU_TYPE,count=GPU_QUANTITY,gpu-sharing-strategy=time-sharing,max-shared-clients-per-gpu=CLIENTS_PER_GPU,gpu-driver-version=DRIVER_VERSION
Ganti kode berikut:
NODEPOOL_NAME
: nama node pool baru Anda.CLUSTER_NAME
: nama cluster Anda yang harus menjalankan GKE versi 1.23.7-gke.1400 atau yang lebih baru.COMPUTE_REGION
: region Compute Engine Anda. Untuk cluster zona, tentukan--zone=COMPUTE_ZONE
.MACHINE_TYPE
: Jenis mesin Compute Engine untuk node Anda. Sebaiknya Anda memilih Jenis mesin yang dioptimalkan untuk akselerator.GPU_TYPE
: jenis GPU, yang harus berupa Platform GPU NVIDIA sepertinvidia-tesla-v100
.GPU_QUANTITY
: jumlah GPU fisik yang akan dipasang ke setiap node di node pool.CLIENTS_PER_GPU
: jumlah maksimum container yang dapat membagikan setiap GPU fisik.DRIVER_VERSION
: versi driver NVIDIA yang akan diinstal. Dapat berupa salah satu dari hal berikut:default
: Menginstal versi driver default untuk versi GKE Anda.latest
: Instal versi driver terbaru yang tersedia untuk versi GKE Anda. Hanya tersedia untuk node yang menggunakan Container-Optimized OS.disabled
: Melewati penginstalan driver otomatis. Anda harus menginstal driver secara manual setelah membuat node pool. Jika Anda menghilangkangpu-driver-version
, ini adalah opsi defaultnya.
Menginstal driver perangkat GPU NVIDIA
Sebelum melanjutkan, hubungkan ke cluster Anda dengan menjalankan perintah berikut:
gcloud container clusters get-credentials CLUSTER_NAME
Jika Anda memilih untuk menonaktifkan instalasi {i>driver<i} otomatis saat membuat cluster, atau jika Anda menggunakan versi GKE yang lebih lama dari 1.27.2-gke.1200, Anda harus secara manual menginstal driver NVIDIA yang kompatibel untuk mengelola pembagian pembagian waktu GPU dari GPU fisik. Untuk menginstal driver, Anda men-deploy DaemonSet penginstalan GKE yang menyiapkan driver.
Untuk mendapatkan petunjuk, lihat Menginstal driver perangkat GPU NVIDIA.
Jika berencana menggunakan penyediaan otomatis node di cluster, Anda juga harus mengonfigurasi penyediaan otomatis node dengan cakupan yang memungkinkan GKE untuk menginstal driver perangkat GPU untuk Anda. Untuk mendapatkan petunjuk, lihat Menggunakan penyediaan otomatis node dengan GPU.
Memverifikasi resource GPU yang tersedia di node Anda
Untuk memverifikasi bahwa jumlah GPU yang terlihat di node Anda cocok dengan nomor yang ditentukan saat Anda mengaktifkan pembagian waktu GPU, jelaskan node Anda:
kubectl describe nodes NODE_NAME
Outputnya mirip dengan hal berikut ini:
...
Capacity:
...
nvidia.com/gpu: 3
Allocatable:
...
nvidia.com/gpu: 3
Dalam contoh output ini, jumlah resource GPU di node adalah 3
karena
nilai yang ditentukan untuk max-shared-clients-per-gpu
adalah 3
dan
count
GPU fisik yang akan dipasang di node adalah 1
. Contoh lainnya, jika
count
GPU fisik adalah 2
, output akan menampilkan 6
resource GPU
yang dapat dialokasikan, masing-masing tiga pada setiap GPU fisik.
Men-deploy workload yang menggunakan pembagian waktu GPU
Sebagai operator aplikasi yang men-deploy workload GPU, Anda dapat memilih
Pembagian waktu GPU diaktifkan dengan menentukan label node yang sesuai dalam
nodeSelector
di manifes Anda. Saat merencanakan permintaan Anda, tinjau
batas permintaan
untuk memastikan GKE tidak menolak deployment Anda.
Untuk men-deploy workload agar dapat menggunakan pembagian waktu GPU, selesaikan langkah-langkah berikut:
Tambahkan
nodeSelector
ke manifes workload Anda untuk label berikut:cloud.google.com/gke-gpu-sharing-strategy: time-sharing
: memilih node yang menggunakan pembagian waktu GPU.cloud.google.com/gke-max-shared-clients-per-gpu: "CLIENTS_PER_GPU"
: memilih node yang memungkinkan sejumlah container tertentu berbagi GPU dasar.
Tambahkan permintaan resource GPU
nvidia.com/gpu=1
ke spesifikasi container Anda, dispec.containers.resources.limits
.
Misalnya, langkah berikut menunjukkan cara men-deploy tiga Pod ke Kumpulan node pembagian waktu GPU. GKE mengalokasikan setiap container ke GPU fisik yang sama. Container mencetak UUID GPU yang dipasang container tersebut.
- Simpan manifes berikut sebagai
gpu-timeshare.yaml
:
Autopilot
apiVersion: apps/v1 kind: Deployment metadata: name: cuda-simple spec: replicas: 3 selector: matchLabels: app: cuda-simple template: metadata: labels: app: cuda-simple spec: nodeSelector: cloud.google.com/gke-accelerator: "GPU_TYPE" cloud.google.com/gke-gpu-sharing-strategy: "time-sharing" cloud.google.com/gke-max-shared-clients-per-gpu: "CLIENTS_PER_GPU" cloud.google.com/gke-accelerator-count: "GPU_COUNT" containers: - name: cuda-simple image: nvidia/cuda:11.0.3-base-ubi7 command: - bash - -c - | /usr/local/nvidia/bin/nvidia-smi -L; sleep 300 resources: limits: nvidia.com/gpu: 1
Ganti kode berikut:
GPU_TYPE
: jenis GPU.CLIENTS_PER_GPU
: jumlah workload yang akan menggunakan GPU ini. Untuk contoh ini, gunakan3
.GPU_COUNT
: jumlah GPU fisik yang akan dipasang ke node. Untuk contoh ini, gunakan1
.
Standard
apiVersion: apps/v1 kind: Deployment metadata: name: cuda-simple spec: replicas: 3 selector: matchLabels: app: cuda-simple template: metadata: labels: app: cuda-simple spec: nodeSelector: cloud.google.com/gke-gpu-sharing-strategy: "SHARING_STRATEGY" cloud.google.com/gke-max-shared-clients-per-gpu: "CLIENTS_PER_GPU" containers: - name: cuda-simple image: nvidia/cuda:11.0.3-base-ubi7 command: - bash - -c - | /usr/local/nvidia/bin/nvidia-smi -L; sleep 300 resources: limits: nvidia.com/gpu: 1
Ganti kode berikut:
SHARING_STRATEGY
dengan "berbagi waktu" untuk meminta pembagian waktu untuk GPU Anda.CLIENTS_PER_GPU
: jumlah workload yang akan menggunakan GPU ini. Untuk contoh ini, gunakan3
.
Terapkan manifes:
kubectl apply -f gpu-timeshare.yaml
Pastikan semua Pod berjalan:
kubectl get pods -l=app=cuda-simple
Periksa log setiap Pod untuk melihat UUID GPU:
kubectl logs POD_NAME
Outputnya mirip dengan yang berikut ini:
GPU 0: Tesla V100-SXM2-16GB (UUID: GPU-0771302b-eb3a-6756-7a23-0adcae8efd47)
Jika node Anda memiliki satu GPU fisik yang dipasang, periksa log Pod lain di node yang sama untuk memastikan bahwa UUID GPU-nya sama:
kubectl logs POD2_NAME
Outputnya mirip dengan hal berikut ini:
GPU 0: Tesla V100-SXM2-16GB (UUID: GPU-0771302b-eb3a-6756-7a23-0adcae8efd47)
Menggunakan pembagian waktu GPU dengan GPU multi-instance
Sebagai administrator platform, Anda mungkin ingin menggabungkan beberapa fitur GPU GKE. Pembagian waktu GPU berfungsi dengan GPU multi-instance, yang membuat partisi satu GPU fisik menjadi hingga tujuh irisan. Partisi ini terpisah satu sama lain. Anda dapat mengonfigurasi pembagian waktu GPU untuk setiap GPU multi-instance partisi.
Misalnya, jika Anda menetapkan gpu-partition-size
ke 1g.5gb
, GPU dasar
akan dibagi menjadi tujuh partisi. Jika Anda juga menetapkan max-shared-clients-per-gpu
ke 3
,
setiap partisi akan mendukung hingga tiga kontainer, dengan total hingga 21 perangkat berbagi waktu GPU yang tersedia untuk dialokasikan dalam GPU fisik tersebut. Untuk mempelajari cara gpu-partition-size
mengonversi ke partisi yang sebenarnya, lihat Partisi GPU multi-instance.
Untuk membuat cluster GPU multi-instance dengan pembagian waktu GPU yang diaktifkan, jalankan perintah berikut:
Autopilot
Dengan Autopilot, pembagian waktu GPU dan GPU multi-instance dapat digunakan bersama-sama menggunakan kedua set pemilih {i>node<i}.
apiVersion: apps/v1
kind: Deployment
metadata:
name: cuda-simple
spec:
replicas: 7
selector:
matchLabels:
app: cuda-simple
template:
metadata:
labels:
app: cuda-simple
spec:
nodeSelector:
cloud.google.com/gke-gpu-partition-size: 1g.5gb
cloud.google.com/gke-gpu-sharing-strategy: time-sharing
cloud.google.com/gke-max-shared-clients-per-gpu: "3"
cloud.google.com/gke-accelerator: nvidia-tesla-a100
cloud.google.com/gke-accelerator-count: "1"
containers:
- name: cuda-simple
image: nvidia/cuda:11.0.3-base-ubi7
command:
- bash
- -c
- |
/usr/local/nvidia/bin/nvidia-smi -L; sleep 300
resources:
limits:
nvidia.com/gpu: 1
Standard
Dengan Standard, Anda perlu membuat cluster multi-instance GPU berdasarkan waktu dengan menjalankan perintah berikut:
gcloud container node-pools create NODEPOOL_NAME \
--cluster=CLUSTER_NAME \
--machine-type=MACHINE_TYPE \
--region=COMPUTE_REGION \
--accelerator=type=nvidia-tesla-a100,count=GPU_QUANTITY,gpu-partition-size=PARTITION_SIZE,gpu-sharing-strategy=time-sharing,max-shared-clients-per-gpu=CLIENTS_PER_GPU,gpu-driver-version=DRIVER_VERSION
Ganti PARTITION_SIZE
dengan
ukuran partisi GPU multi-instance
yang Anda inginkan, seperti 1g.5gb
.
Batasan
- Melalui pembagian waktu GPU, GKE memberlakukan alamat isolasi ruang, isolasi performa, dan isolasi error antara container yang menggunakan GPU fisik yang sama. Namun, batas memori tidak diterapkan tentang GPU. Untuk menghindari masalah kehabisan memori (OOM), tetapkan Batas memori GPU dalam workload Anda. Untuk menghindari masalah keamanan, hanya deploy workload yang berada di batas kepercayaan yang sama dengan pembagian waktu GPU.
- Untuk mencegah perilaku tak terduga selama alokasi kapasitas, GKE mungkin menolak permintaan berbagi waktu GPU tertentu. Untuk mengetahui detailnya, lihat Permintaan GPU untuk pembagian waktu GPU.
- Jumlah maksimum container yang dapat menggunakan pembagian waktu dalam satu GPU fisik adalah 48. Saat merencanakan konfigurasi pembagian waktu GPU, pertimbangkan kebutuhan workload Anda dan kapasitas GPU fisik yang mendasarinya untuk mengoptimalkan kinerja dan responsivitas.
Langkah selanjutnya
- Pelajari lebih lanjut strategi berbagi GPU yang tersedia di GKE.
- Pelajari GPU lebih lanjut
- Pelajari lebih lanjut cara Menjalankan GPU multi-instance.
- Untuk mengetahui informasi selengkapnya tentang preemption komputasi untuk GPU NVIDIA, lihat Panduan Penyesuaian NVIDIA Pascal.