Halaman ini menunjukkan cara mengizinkan beberapa workload mendapatkan akses berbagi waktu GPU ke satu akselerator hardware GPU NVIDIA® di node Google Kubernetes Engine (GKE) Anda. Untuk mempelajari lebih lanjut cara kerja berbagi waktu GPU, serta keterbatasan dan contoh kapan Anda harus menggunakan berbagi waktu GPU, lihat Berbagi waktu GPU di GKE.
Ringkasan
Berbagi waktu GPU adalah fitur GKE yang memungkinkan beberapa container berbagi satu GPU fisik yang terpasang pada sebuah 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 yang berikut:
- 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 ingin petunjuk untuk meminta berbagi waktu GPU, lihat Men-deploy workload yang menggunakan berbagi waktu GPU.
Persyaratan
- Versi GKE: Anda dapat mengaktifkan berbagi waktu GPU di cluster GKE Standard yang menjalankan GKE versi 1.23.7-gke.1400 dan yang lebih baru. Anda dapat menggunakan GPU berbagi waktu di cluster GKE Autopilot yang menjalankan GKE versi 1.29.3-gke.1093000 dan yang lebih baru.
- Jenis GPU: Anda dapat mengaktifkan berbagi waktu GPU di semua model GPU NVIDIA.
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
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 yang memadai. Jika Anda memerlukan lebih banyak kuota, lihat Meminta penambahan kuota.
- Rencanakan kapasitas GPU Anda berdasarkan kebutuhan resource workload dan kapasitas GPU dasar.
- Tinjau batasan berbagi waktu GPU.
Mengaktifkan berbagi waktu GPU di cluster GKE dan node pool
Sebagai administrator platform, Anda harus mengaktifkan berbagi waktu GPU di cluster GKE Standard sebelum developer dapat men-deploy workload untuk menggunakan GPU tersebut. Untuk mengaktifkan berbagi waktu GPU, Anda harus melakukan hal berikut:
- Aktifkan berbagi 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 yang lebih baru mengaktifkan GPU berbagi waktu secara default. Pembagian waktu di cluster Autopilot dikonfigurasi dalam spesifikasi workload. Untuk mempelajari lebih lanjut, lihat bagian Men-deploy workload yang menggunakan GPU berbagi waktu.
Mengaktifkan berbagi waktu GPU di cluster GKE Standard
Anda dapat mengaktifkan berbagi waktu GPU saat membuat cluster GKE Standard. Node pool default di cluster telah mengaktifkan fitur tersebut. Anda masih harus mengaktifkan berbagi waktu GPU saat membuat node pool baru secara manual di 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 pilih 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 berbagi waktu GPU di node pool GKE
Anda dapat mengaktifkan berbagi waktu GPU saat membuat node pool 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 pilih 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 penginstalan driver otomatis saat membuat cluster, atau menggunakan versi GKE yang lebih lama dari 1.27.2-gke.1200, Anda harus menginstal driver NVIDIA yang kompatibel secara manual untuk mengelola 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 jumlah yang Anda tentukan saat mengaktifkan berbagi waktu GPU, deskripsikan 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 berbagi waktu GPU
Sebagai operator aplikasi yang men-deploy workload GPU, Anda dapat memilih
berbagi waktu GPU yang diaktifkan dengan menentukan label node yang sesuai di
nodeSelector
dalam manifes Anda. Saat merencanakan permintaan Anda, tinjau
batas permintaan
untuk memastikan GKE tidak menolak deployment Anda.
Untuk men-deploy workload guna menggunakan berbagi 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 berbagi 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-langkah berikut menunjukkan cara men-deploy tiga Pod ke node pool berbagi waktu GPU. GKE mengalokasikan setiap container ke GPU fisik yang sama. Container mencetak UUID GPU yang dipasang ke 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 beban kerja 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 "time-sharing" untuk meminta berbagi waktu untuk GPU Anda.CLIENTS_PER_GPU
: jumlah beban kerja 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 berbagi waktu GPU dengan GPU multi-instance
Sebagai administrator platform, Anda mungkin ingin menggabungkan beberapa fitur GPU GKE. Berbagi waktu GPU berfungsi dengan GPU multi-instance, yang mempartisi satu GPU fisik menjadi sampai tujuh bagian. Partisi ini terpisah satu sama lain. Anda dapat mengonfigurasi pembagian waktu GPU untuk setiap partisi GPU multi-instance.
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 dapat mendukung hingga tiga container, untuk total hingga 21 perangkat GPU berbagi waktu yang tersedia untuk dialokasikan di 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 berbagi waktu GPU yang diaktifkan, jalankan perintah berikut:
Autopilot
Dengan Autopilot, GPU berbagi waktu dan GPU multi-instance dapat digunakan bersama menggunakan kedua kumpulan pemilih node.
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 berbagi 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
- Dengan berbagi waktu GPU, GKE menerapkan isolasi ruang alamat, isolasi performa, dan isolasi error di antara container yang menggunakan GPU fisik yang sama. Namun, batas memori tidak diterapkan pada GPU. Agar tidak mengalami masalah kehabisan memori (OOM), tetapkan batas memori GPU dalam workload Anda. Untuk menghindari masalah keamanan, hanya deploy workload yang berada dalam batas kepercayaan yang sama ke GPU berbagi waktu.
- Untuk mencegah perilaku yang tidak terduga selama alokasi kapasitas, GKE mungkin menolak permintaan berbagi waktu GPU tertentu. Untuk mengetahui detailnya, lihat Permintaan GPU untuk berbagi waktu GPU.
- Jumlah maksimum container yang dapat menggunakan pembagian waktu dalam satu GPU fisik adalah 48. Saat merencanakan konfigurasi berbagi waktu GPU, pertimbangkan kebutuhan resource dari workload Anda dan kapasitas GPU fisik yang mendasarinya untuk mengoptimalkan performa dan responsivitas Anda.
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.