GKE menyediakan satu platform untuk menjalankan beragam workload bagi organisasi Anda, sehingga mengurangi beban operasional dalam mengelola beberapa platform. Anda dapat menjalankan workload seperti pra-pelatihan terdistribusi berperforma tinggi, penyesuaian model, inferensi model, penayangan aplikasi, dan layanan pendukung.
Di halaman ini, Anda akan mempelajari cara membuat cluster Google Kubernetes Engine (GKE) Standard dan Autopilot menggunakan GPUDirect-TCPX, gVNIC, dan multi-jaringan.
Halaman ini ditujukan bagi engineer machine learning (ML) dan administrator platform yang memfasilitasi workload ML. Untuk mempelajari lebih lanjut peran umum dan contoh tugas yang kami referensikan dalam Google Cloud konten, lihat Peran dan tugas pengguna GKE umum.
Aplikasi kecerdasan buatan (AI), ML, dan komputasi berperforma tinggi (HPC) memerlukan akselerasi yang andal untuk mengoptimalkan performa dengan mengurangi waktu penyelesaian tugas. Misalnya, model ML yang berfokus pada AI percakapan dan pembuatan gambar memerlukan skalabilitas dan daya komputasi yang tinggi.
Halaman ini mengasumsikan bahwa Anda sudah memahami teknologi jaringan seperti kartu antarmuka jaringan (NIC) dan TCP, serta teknologi akselerator seperti NVIDIA Collective Communications Library (NCCL).
Tentang Google Cloud superkomputer GPU
Google Cloud memiliki superkomputer yang dioptimalkan untuk akselerator dan dibuat untuk model berskala besar. Jenis mesin GPU ini dapat memperoleh bandwidth jaringan hingga 3.600 Gbps.
Workload GKE Anda harus menggunakan semua GPU yang tersedia dan semua NIC sekunder yang tersedia pada satu node serta menggunakan sebagian besar bandwidth yang tersedia. Solusi yang dijelaskan dalam dokumen ini dirancang untuk workload yang memerlukan performa tinggi, throughput tinggi, dan latensi rendah.
Fitur dan kemampuan yang diperlukan untuk memaksimalkan bandwidth
Untuk memaksimalkan bandwidth jaringan di node superkomputer GPU, Anda harus menggunakan fitur berikut:
- Stack jaringan GPUDirect: A3 Edge mendukung tiga stack jaringan untuk akses memori langsung jarak jauh (RDMA) kustom. Mesin A3 Edge menggunakan GPUDirect-TCPX untuk mengurangi overhead yang diperlukan untuk mentransfer payload paket ke dan dari GPU, yang secara signifikan meningkatkan throughput dalam skala besar dibandingkan dengan GPU yang tidak menggunakan GPUDirect.
- gVNIC: Aktifkan kemampuan GPUDirect seperti pemisahan header paket, pengarahan alur, dan pengelolaan buffer. gVNIC diperlukan untuk menggunakan GPUDirect-TCPX. Untuk mengetahui detail tentang gVNIC, lihat Meningkatkan kecepatan traffic jaringan untuk node GPU.
Anda juga harus mengaktifkan dan mengonfigurasi kemampuan berikut:
- Multi-networking: Tambahkan NIC sekunder ke mesin yang dioptimalkan untuk akselerator. Setiap NIC dikaitkan dengan subnet terpisah di VPC-nya sendiri untuk menghindari konflik. Untuk mengetahui detail tentang dukungan multi-jaringan, lihat Menyiapkan dukungan multi-jaringan untuk Pod.
- Kebijakan penempatan: Gunakan kebijakan penempatan resource untuk menempatkan semua node GPU untuk workload tertentu di server yang berdekatan secara fisik guna meminimalkan latensi. Untuk mengetahui detailnya, lihat Menentukan penempatan rapat untuk node GKE.
Garis besar prosedur
Untuk menggunakan GPUDirect-TCPX, gVNIC, multi-jaringan, dan kebijakan penempatan ringkas secara bersamaan, Anda harus melakukan hal berikut:
- Membuat Virtual Private Cloud (VPC) dan subnet
- Buat lingkungan GKE
- Instal biner GPUDirect dan plugin NCCL
- Men-deploy plugin injektor perangkat NRI
- Men-deploy workload pengujian untuk memverifikasi penyiapan GPUDirect
- Menggunakan GPUDirect untuk workload Anda sendiri
Sebelum memulai
Sebelum memulai, pastikan Anda telah melakukan tugas berikut:
- Aktifkan Google Kubernetes Engine API. Aktifkan Google Kubernetes Engine API
- Untuk 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 perintah
gcloud components update. Versi gcloud CLI yang lebih lama mungkin tidak mendukung menjalankan perintah dalam dokumen ini.
- Pastikan Anda memiliki kapasitas untuk VM Edge A3. Untuk mendapatkan kapasitas ini, pertama, pilih dari opsi penggunaan. Untuk mengikuti petunjuk di halaman ini, Anda dapat menggunakan kapasitas sesuai permintaan, pemesanan sesuai permintaan, atau Pemesanan untuk masa mendatang hingga 90 hari (dalam mode kalender). Setelah memilih opsi pemakaian, ikuti petunjuk yang sesuai untuk mendapatkan kapasitas menggunakan opsi pemakaian yang telah Anda pilih.
- Pastikan Anda memiliki kuota yang cukup untuk GPU H100. Untuk meminta kuota lainnya, lihat Kuota GPU.
Persyaratan
Persyaratan berikut berlaku untuk GPUDirect-TCPX:
Standar
- GPUDirect-TCPX didukung dengan semua versi minor GKE yang tersedia menggunakan versi patch tertentu:
- Untuk GKE versi 1.30 hingga 1.33, gunakan versi patch apa pun.
- Untuk GKE versi 1.34, gunakan patch versi 1.34.5-gke.1153000 atau yang lebih baru.
- Untuk GKE versi 1.35, gunakan versi patch 1.35.2-gke.1485000 atau yang lebih baru.
- Untuk GKE versi 1.36 atau yang lebih baru, gunakan versi patch apa pun.
- Node GKE harus menggunakan image node Container-Optimized OS (COS). Image node Ubuntu dan Windows tidak didukung.
- Node GPU Anda harus menggunakan driver NVIDIA versi 535 atau yang lebih baru.
- Anda harus menggunakan GKE Dataplane V2.
- Pada GKE versi 1.34 dan yang lebih baru, Anda harus menggunakan penginstal GPUDirect-TCPX versi 3.1.9 atau yang lebih baru dan sidecar GPUDirect-TCPX versi 2.0.12 atau yang lebih baru. Versi penginstal dan sidecar memiliki pemetaan one-to-one dan harus sesuai. Misalnya, penginstal versi 3.1.12 sesuai dengan sidecar versi 2.0.15. Untuk mengetahui informasi selengkapnya tentang versi penginstal dan sidecar, lihat Catatan Rilis GPUDirect-TCPX.
- Untuk workload GPUDirect-TCPX yang berjalan di beberapa node pool, semua node pool harus berada di zona Compute Engine yang sama dan harus menggunakan set jaringan yang sama, seperti VPC dan subnet.
Autopilot
- Untuk menggunakan GPUDirect-TCPX, cluster Anda harus menjalankan versi patch GKE minimum berikut:
- Untuk GKE versi 1.31, gunakan patch versi 1.31.1-gke.1621000 atau yang lebih baru.
- Untuk GKE versi 1.32 hingga 1.33, gunakan versi patch apa pun.
- Untuk GKE versi 1.34, gunakan patch versi 1.34.5-gke.1153000 atau yang lebih baru.
- Untuk GKE versi 1.35, gunakan versi patch 1.35.2-gke.1485000 atau yang lebih baru.
- Untuk GKE versi 1.36 atau yang lebih baru, gunakan versi patch apa pun.
- Node GPU Anda harus menggunakan driver NVIDIA versi 535 atau yang lebih baru.
- Anda harus menggunakan GKE Dataplane V2.
- Pada GKE versi 1.34 dan yang lebih baru, Anda harus menggunakan penginstal GPUDirect-TCPX versi 3.1.9 atau yang lebih baru dan sidecar GPUDirect-TCPX versi 2.0.12 atau yang lebih baru. Versi penginstal dan sidecar memiliki pemetaan satu-ke-satu dan harus sesuai. Misalnya, penginstal versi 3.1.12 sesuai dengan sidecar versi 2.0.15. Untuk mengetahui informasi selengkapnya tentang versi penginstal dan sidecar, lihat Catatan Rilis GPUDirect-TCPX.
- Untuk workload GPUDirect-TCPX yang berjalan di beberapa node pool, semua node pool harus berada di zona Compute Engine yang sama dan harus menggunakan set jaringan yang sama, seperti VPC dan subnet.
Batasan
Batasan berikut berlaku:
- GPUDirect-TCPX tidak didukung dengan GPU multi-instance, GPU time-sharing, atau NVIDIA MPS.
- Anda tidak dapat menggunakan NCCL FastSocket dengan GPUDirect-TCPX.
- Workload GKE Anda harus menggunakan semua GPU yang tersedia dan semua NIC sekunder yang tersedia pada satu node. Beberapa Pod tidak dapat menggunakan GPUDirect-TCPX pada satu node.
Membuat VPC dan subnet
Buat jaringan VPC terpisah di project Anda untuk setiap NIC virtual yang akan Anda tambahkan ke node. Setiap jaringan VPC harus memiliki subnet dan aturan firewall yang mengizinkan traffic jaringan internal.
Untuk memaksimalkan bandwidth, sebaiknya buat empat jaringan baru.
for N in $(seq 1 4); do gcloud compute networks create PREFIX-net-$N \ --subnet-mode=custom \ --mtu=8244 gcloud compute networks subnets create PREFIX-sub-$N \ --network=PREFIX-net-$N \ --region=REGION \ --range=SUBNET_RANGE gcloud compute firewall-rules create PREFIX-internal-$N \ --network=PREFIX-net-$N \ --action=ALLOW \ --rules=tcp:0-65535,udp:0-65535,icmp \ --source-ranges=SOURCE_RANGE doneGanti kode berikut:
PROJECT_ID: Google Cloud Project ID Anda.REGION: region Compute Engine untuk setiap subnet.SUBNET_RANGE: rentang alamat IP setiap subnet dalam notasi CIDR. Contoh perintah ini melakukan iterasi untuk empat subnet, jadi Anda harus menggunakan variabel untuk mengubah alamat IP untuk setiap subnet. Misalnya, tentukan192.168.$N.0/24sehingga subnet pertama menggunakan192.168.1.0/24, subnet kedua menggunakan192.168.2.0/24, dll.SOURCE_RANGE: Rentang alamat IP sumber untuk aturan firewall guna mengizinkan traffic masuk, dalam notasi CIDR. Contoh,192.168.0.0/16.
Pastikan jaringan telah dibuat:
gcloud compute networks list
Buat lingkungan GKE
Buat cluster GKE baru yang menggunakan multi-networking (Pratinjau) dan buat node pool GPU yang memiliki karakteristik berikut:
- gVNIC diaktifkan
- Subnet multi-jaringan yang ditentukan untuk setiap NIC sekunder
- Seri mesin A3 Edge dengan GPU H100 yang mendukung node
- Driver NVIDIA terbaru terinstal
Anda tidak dapat mengupdate cluster yang ada untuk menggunakan multi-networking.
Membuat cluster:
Standar
gcloud beta container clusters create CLUSTER_NAME \ --enable-dataplane-v2 \ --enable-ip-alias \ --location=CONTROL_PLANE_LOCATION \ --enable-multi-networking \ --cluster-version=VERSION \ --no-enable-autoupgrade \ --project=PROJECT_IDGanti kode berikut:
CLUSTER_NAME: nama cluster baru.CONTROL_PLANE_LOCATION: lokasi Compute Engine bidang kontrol cluster Anda. Berikan region untuk cluster regional, atau zona untuk cluster zona.VERSION: versi GKE yang mendukung GPUDirect-TCPX, seperti yang dijelaskan dalam Persyaratan.
Autopilot
gcloud beta container clusters create-auto CLUSTER_NAME \ --project=PROJECT_ID \ --location=CONTROL_PLANE_LOCATION \ --cluster-version=VERSION \ --enable-multi-networking \ --workload-policies=allow-net-adminGanti kode berikut:
CLUSTER_NAME: nama cluster baru.CONTROL_PLANE_LOCATION: region Compute Engine dari bidang kontrol cluster Anda.VERSION: versi GKE yang mendukung GPUDirect-TCPX, seperti yang dijelaskan dalam Persyaratan.
Buat resource Jaringan dan GKENetworkParamSet di cluster yang sesuai dengan jaringan VPC dan subnetwork yang Anda buat:
kubectl apply -f - <<EOF apiVersion: networking.gke.io/v1 kind: Network metadata: name: vpc1 spec: parametersRef: group: networking.gke.io kind: GKENetworkParamSet name: vpc1 type: Device --- apiVersion: networking.gke.io/v1 kind: Network metadata: name: vpc2 spec: parametersRef: group: networking.gke.io kind: GKENetworkParamSet name: vpc2 type: Device --- apiVersion: networking.gke.io/v1 kind: Network metadata: name: vpc3 spec: parametersRef: group: networking.gke.io kind: GKENetworkParamSet name: vpc3 type: Device --- apiVersion: networking.gke.io/v1 kind: Network metadata: name: vpc4 spec: parametersRef: group: networking.gke.io kind: GKENetworkParamSet name: vpc4 type: Device --- apiVersion: networking.gke.io/v1 kind: GKENetworkParamSet metadata: name: vpc1 spec: vpc: PREFIX-net-1 vpcSubnet: PREFIX-sub-1 deviceMode: NetDevice --- apiVersion: networking.gke.io/v1 kind: GKENetworkParamSet metadata: name: vpc2 spec: vpc: PREFIX-net-2 vpcSubnet: PREFIX-sub-2 deviceMode: NetDevice --- apiVersion: networking.gke.io/v1 kind: GKENetworkParamSet metadata: name: vpc3 spec: vpc: PREFIX-net-3 vpcSubnet: PREFIX-sub-3 deviceMode: NetDevice --- apiVersion: networking.gke.io/v1 kind: GKENetworkParamSet metadata: name: vpc4 spec: vpc: PREFIX-net-4 vpcSubnet: PREFIX-sub-4 deviceMode: NetDevice EOFResource ini memberi tahu GKE untuk mengonfigurasi NIC untuk traffic GPU dalam mode passthrough. GKE tidak menerapkan pemrograman jaringan bawaan menggunakan eBPF ke traffic ini.
Membuat node pool GPU (khusus Standar)
Buat node pool untuk GPU H100:
gcloud container node-pools create NODE_POOL_NAME \ --cluster=CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --machine-type=a3-edgegpu-8g \ --accelerator=type=nvidia-h100-80gb,count=8,gpu-driver-version=LATEST \ --additional-node-network=network=PREFIX-net-1,subnetwork=PREFIX-sub-1 \ --additional-node-network=network=PREFIX-net-2,subnetwork=PREFIX-sub-2 \ --additional-node-network=network=PREFIX-net-3,subnetwork=PREFIX-sub-3 \ --additional-node-network=network=PREFIX-net-4,subnetwork=PREFIX-sub-4 \ --enable-gvnic \ --no-enable-autoupgrade \ --placement-policy=POLICY_NAME \ --reservation-affinity=specific \ --reservation=projects/PROJECT_ID/reservations/RESERVATION_NAME/reservationBlocks/BLOCK_NAMEGanti
NODE_POOL_NAMEdengan nama node pool.Untuk menggunakan reservasi, gunakan flag
--placement-policy,--reservation-affinity, dan--reservation. Tentukan flag ini untuk mengonfigurasi nama kebijakan dan reservasi di node pool. Jika reservasi tidak memerlukan kebijakan resource, hapus tanda--placement-policy.Flag
--reservation-affinitydapat mengambil nilaispecificatauany. Namun, untuk workload AI terdistribusi berperforma tinggi, sebaiknya gunakan reservasi tertentu. Anda dapat menemukan informasi tentang reservasi Anda, seperti nama reservasi atau nama blok tertentu dalam reservasi Anda. Untuk menemukan nilai ini untuk pemesanan on-demand, lihat daftar pemesanan Anda, atau, lihat permintaan pemesanan untuk masa mendatang.Ganti kode berikut untuk menggunakan reservasi:
PROJECT_ID: opsional, ID project Google Cloud Anda. Jika pemesanan berada di project saat ini (bukan shared reservation) Anda dapat menghilangkanprojects/PROJECT_ID/reservations/dari nilai pemesanan.RESERVATION_NAME: nama pemesanan Anda.BLOCK_NAME: opsional, nama blok tertentu dalam reservasi. Hilangkan/reservationBlocks/BLOCK_NAMEjika Anda tidak ingin menggunakan blok tertentu.
Jika perintah ini gagal, Anda mungkin tidak memiliki kuota GPU H100 yang cukup di project Anda. Pastikan Anda memiliki kuota, lalu coba lagi perintahnya.
Setelah membuat node pool, pastikan setiap node memiliki GPU yang terpasang:
Dapatkan daftar node di cluster:
kubectl get nodesPastikan setiap node GPU memiliki delapan GPU:
kubectl describe node NODE_NAMEGanti
NODE_NAMEdengan nama node yang akan dideskripsikan.Outputnya mirip dengan hal berikut ini:
Capacity: ... nvidia.com/gpu: 8 Allocatable: ... nvidia.com/gpu: 8
Instal biner GPUDirect dan plugin NCCL
Bagian ini menunjukkan cara menginstal program biner GPUDirect-TCPX dan versi library NCCL tertentu menggunakan DaemonSet.
DaemonSet ini melakukan hal berikut:
- Menginstal library NCCL dan biner GPUDirect-TCPX di node.
- Menyimpan library dan biner di direktori
/home/kubernetes/bin/nvidia/lib64pada VM. Secara default, GKE memasang direktori ini ke jalur/usr/local/nvidia/lib64di container GPU yang perlu menggunakan NCCL dan GPUDirect-TCPX.
Untuk menginstal biner dan mengonfigurasi NCCL, lakukan hal berikut:
Standar
Tinjau manifest Daemonset
nccl-tcpx-installer.yamldi GitHub.Deploy DaemonSet:
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/gpudirect-tcpx/nccl-tcpx-installer.yamlPlugin NCCL memerlukan waktu sekitar dua menit untuk mulai berjalan.
Verifikasi status Pod DaemonSet:
kubectl get pods -n=kube-system -l=name=nccl-tcpx-installerOutputnya mirip dengan hal berikut ini:
nccl-tcpx-installer-6c2pv 1/1 Running 0 2m11s nccl-tcpx-installer-qgg82 1/1 Running 0 2m11s
Autopilot
Tinjau manifes Daemonset
nccl-tcpx-installer-autopilot.yamldi GitHub.Buat namespace khusus:
kubectl create ns gpudirect-systemDeploy DaemonSet:
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/gpudirect-tcpx/nccl-tcpx-installer-autopilot.yamlPlugin NCCL memerlukan waktu sekitar dua menit untuk mulai berjalan.
Men-deploy plugin injector perangkat NRI
Bagian ini menunjukkan cara menginstal injektor perangkat NRI menggunakan DaemonSet. Plugin ini melakukan hal berikut:
- Mengaktifkan Node Resource Interface (NRI) di node yang memiliki GPU H100. NRI diaktifkan secara default di GKE versi 1.29 dan yang lebih baru.
- Men-deploy container plugin injector perangkat NRI yang menyuntikkan perangkat GPU ke dalam container yang ditentukan oleh anotasi Pod.
Untuk menginstal plugin, lakukan hal berikut:
Standar
Tinjau manifes Deployment
nri-device-injector.yamldi GitHub.Deploy DaemonSet:
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/nri_device_injector/nri-device-injector.yamlPlugin NCCL memerlukan waktu sekitar dua menit untuk mulai berjalan.
Verifikasi status Pod DaemonSet:
kubectl get pods -n=kube-system -l=name=device-injectorOutputnya mirip dengan hal berikut ini:
# Output device-injector-md6hb 1/1 Running 0 4h54m device-injector-vh9bm 1/1 Running 0 4h54m
Autopilot
Tinjau manifes Deployment
nri-device-injector-autopilot.yamldi GitHub.Deploy DaemonSet:
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/nri_device_injector/nri-device-injector-autopilot.yamlPlugin NCCL memerlukan waktu sekitar dua menit untuk mulai berjalan.
Men-deploy workload pengujian
Di bagian ini, Anda akan men-deploy contoh workload untuk memverifikasi bahwa NCCL dan GPUDirect-TCPX berfungsi seperti yang diharapkan. Contoh workload ini melakukan hal berikut:
- Men-deploy dua Pod, yang masing-masing berjalan di node yang memiliki GPU H100.
- Men-deploy container sidecar di setiap Pod agar Pod tersebut dapat menggunakan GPUDirect-TCPX.
Workload ini mencakup container sidecar bernama tcpx-daemon, yang menjalankan layanan yang memungkinkan Pod menggunakan GPUDirect-TCPX. Anda harus menambahkan container sidecar ini ke Pod apa pun di lingkungan Anda sendiri yang perlu menggunakan GPUDirect-TCPX. Untuk melihat cuplikan kolom yang diperlukan untuk ditambahkan ke manifes, lihat Menambahkan GPUDirect ke manifes Anda.
Tinjau manifes ConfigMap
nccl-config.yamldi GitHub. Manifes ini men-deploy skrip yang menginisialisasi uji pengumpulan semua NCCL dan menetapkan setelan konfigurasi khusus NCCL.Lakukan hal berikut berdasarkan mode cluster Anda:
Standar
Tinjau manifes Deployment
nccl-test-latest.yamldi GitHub.Autopilot
Tinjau manifes Deployment
nccl-test-latest-autopilot.yamldi GitHub.Deploy ConfigMap dan workload pengujian:
Standar
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/gpudirect-tcpx/nccl-config.yaml kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/gpudirect-tcpx/nccl-test-latest.yamlAutopilot
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/gpudirect-tcpx/nccl-config.yaml kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/gpudirect-tcpx/nccl-test-latest-autopilot.yamlVerifikasi bahwa Pod sedang berjalan dan siap. Perhatikan bahwa ukuran gambar besar (sekitar 5 GB) dan dapat memerlukan waktu beberapa menit untuk didownload.
kubectl get pods -wPerintah ini akan memantau update dan mencetak baris baru saat status Pod berubah. Outputnya mirip dengan hal berikut ini:
NAME READY STATUS RESTARTS AGE nccl-test-host-1 0/2 ContainerCreating 0 23s nccl-test-host-2 2/2 Running 0 23s nccl-test-host-1 2/2 Running 0 46sTunggu hingga pesan
STATUSuntuk semua Pod adalahRunningdan nilaiREADYadalah2/2sebelum melanjutkan ke langkah berikutnya.Jalankan perintah berikut untuk memicu pengujian pengumpulan semua NCCL untuk node:
kubectl exec \ --stdin --tty --container=nccl-test nccl-test-host-1 \ -- /configs/allgather.sh nccl-host-1 nccl-host-2Outputnya mirip dengan hal berikut ini:
Standar
# out-of-place in-place # size count type redop root time algbw busbw #wrong time algbw busbw #wrong # (B) (elements) (us) (GB/s) (GB/s) (us) (GB/s) (GB/s) 0 0 float none -1 0.24 0.00 0.00 0 0.18 0.00 0.00 0 0 0 float none -1 0.19 0.00 0.00 0 0.17 0.00 0.00 0 0 0 float none -1 0.17 0.00 0.00 0 0.17 0.00 0.00 0 0 0 float none -1 0.17 0.00 0.00 0 0.17 0.00 0.00 0 0 0 float none -1 0.17 0.00 0.00 0 0.17 0.00 0.00 0 256 4 float none -1 235.2 0.00 0.00 0 235.1 0.00 0.00 0 512 8 float none -1 241.0 0.00 0.00 0 236.1 0.00 0.00 0 1024 16 float none -1 236.3 0.00 0.00 0 233.3 0.00 0.00 0 2048 32 float none -1 234.1 0.01 0.01 0 233.4 0.01 0.01 0 4096 64 float none -1 237.1 0.02 0.02 0 235.3 0.02 0.02 0 8192 128 float none -1 236.2 0.03 0.03 0 235.2 0.03 0.03 0 16384 256 float none -1 236.6 0.07 0.06 0 238.5 0.07 0.06 0 32768 512 float none -1 237.9 0.14 0.13 0 238.8 0.14 0.13 0 65536 1024 float none -1 242.3 0.27 0.25 0 239.4 0.27 0.26 0 131072 2048 float none -1 263.0 0.50 0.47 0 275.1 0.48 0.45 0 262144 4096 float none -1 279.2 0.94 0.88 0 269.9 0.97 0.91 0 524288 8192 float none -1 273.5 1.92 1.80 0 273.5 1.92 1.80 0 1048576 16384 float none -1 315.1 3.33 3.12 0 314.1 3.34 3.13 0 2097152 32768 float none -1 319.2 6.57 6.16 0 311.5 6.73 6.31 0 4194304 65536 float none -1 331.8 12.64 11.85 0 331.3 12.66 11.87 0 8388608 131072 float none -1 356.3 23.54 22.07 0 353.8 23.71 22.23 0 16777216 262144 float none -1 409.1 41.01 38.45 0 405.2 41.40 38.81 0 33554432 524288 float none -1 451.4 74.34 69.69 0 447.7 74.94 70.26 0 67108864 1048576 float none -1 713.4 94.07 88.19 0 713.8 94.01 88.13 0 134217728 2097152 float none -1 1122.1 119.62 112.14 0 1116.3 120.23 112.72 0 268435456 4194304 float none -1 1785.8 150.32 140.92 0 1769.2 151.72 142.24 0 536870912 8388608 float none -1 2859.7 187.74 176.00 0 2852.6 188.20 176.44 0 1073741824 16777216 float none -1 5494.1 195.44 183.22 0 5568.2 192.83 180.78 0 2147483648 33554432 float none -1 10841 198.09 185.71 0 10798 198.88 186.45 0 4294967296 67108864 float none -1 21453 200.21 187.70 0 21490 199.86 187.37 0 8589934592 134217728 float none -1 42603 201.63 189.03 0 42670 201.31 188.73 0 # Out of bounds values : 0 OK # Avg bus bandwidth : 45.7587 # ```Autopilot
# out-of-place in-place # size count type redop root time algbw busbw #wrong time algbw busbw #wrong # (B) (elements) (us) (GB/s) (GB/s) (us) (GB/s) (GB/s) 1048576 16384 float none -1 696.8 1.50 1.41 0 729.0 1.44 1.35 0 2097152 32768 float none -1 776.4 2.70 2.53 0 726.7 2.89 2.71 0 4194304 65536 float none -1 774.3 5.42 5.08 0 805.1 5.21 4.88 0 8388608 131072 float none -1 812.1 10.33 9.68 0 817.6 10.26 9.62 0 16777216 262144 float none -1 1035.2 16.21 15.19 0 1067.8 15.71 14.73 0 33554432 524288 float none -1 1183.3 28.36 26.59 0 1211.8 27.69 25.96 0 67108864 1048576 float none -1 1593.4 42.12 39.49 0 1510.5 44.43 41.65 0 134217728 2097152 float none -1 2127.8 63.08 59.13 0 2312.7 58.03 54.41 0 268435456 4194304 float none -1 3603.0 74.50 69.85 0 3586.2 74.85 70.17 0 536870912 8388608 float none -1 7101.7 75.60 70.87 0 7060.9 76.03 71.28 0 # Out of bounds values : 0 OK # Avg bus bandwidth : 29.8293
Menerapkan GPUDirect untuk workload Anda sendiri
Setelah Anda memverifikasi bahwa jaringan cluster Anda berfungsi dengan baik dengan workload pengujian sampel, langkah berikutnya adalah menerapkan GPUDirect untuk workload sebenarnya. Untuk mengadopsi GPUDirect, Anda harus memperbarui setelan NCCL dan manifes Pod Kubernetes.
Gunakan setelan konfigurasi NCCL yang diperlukan untuk meningkatkan performa
Pasangan nilai kunci berikut adalah setelan konfigurasi NCCL yang diperlukan untuk GPUDirect-TCPX. Saat men-deploy workload yang menggunakan NCCL, tetapkan sebagai variabel lingkungan untuk mengoptimalkan performa.
"LD_LIBRARY_PATH=\"${LD_LIBRARY_PATH}:/usr/local/nvidia/lib64\"",
"NCCL_SOCKET_IFNAME=\"eth0\"",
"NCCL_ALGO=Ring",
"NCCL_PROTO=Simple",
"NCCL_CROSS_NIC=0",
"NCCL_NET_GDR_LEVEL=PIX",
"NCCL_P2P_PXN_LEVEL=0",
"NCCL_GPUDIRECTTCPX_SOCKET_IFNAME=eth1,eth2,eth3,eth4",
"NCCL_GPUDIRECTTCPX_CTRL_DEV=eth0",
"NCCL_DYNAMIC_CHUNK_SIZE=524288",
"NCCL_P2P_NET_CHUNKSIZE=524288",
"NCCL_P2P_PCI_CHUNKSIZE=524288",
"NCCL_P2P_NVL_CHUNKSIZE=1048576",
"NCCL_BUFFSIZE=4194304",
"NCCL_NSOCKS_PERTHREAD=4",
"NCCL_SOCKET_NTHREADS=1",
"NCCL_GPUDIRECTTCPX_TX_BINDINGS=\"eth1:8-21,112-125;eth2:8-21,112-125;eth3:60-73,164-177;eth4:60-73,164-177\"",
"NCCL_GPUDIRECTTCPX_RX_BINDINGS=\"eth1:22-35,126-139;eth2:22-35,126-139;eth3:74-87,178-191;eth4:74-87,178-191\"",
"NCCL_GPUDIRECTTCPX_PROGRAM_FLOW_STEERING_WAIT_MICROS=500000"
Menambahkan GPUDirect ke manifes Anda
Bagian ini menunjukkan kolom wajib diisi yang harus Anda tambahkan ke manifes Kubernetes agar Pod Anda dapat menggunakan GPUDirect.
Bergantung pada mode cluster Anda, lakukan hal berikut:
Standar
Tambahkan anotasi berikut ke metadata Pod. Tanpa anotasi ini,
hostNetwork:trueakan diperlukan untuk Pod, danprivileged:trueakan diperlukan untuk penampungtcpx-daemon.metadata: annotations: devices.gke.io/container.tcpx-daemon: |+ - path: /dev/nvidia0 - path: /dev/nvidia1 - path: /dev/nvidia2 - path: /dev/nvidia3 - path: /dev/nvidia4 - path: /dev/nvidia5 - path: /dev/nvidia6 - path: /dev/nvidia7 - path: /dev/nvidiactl - path: /dev/nvidia-uvm networking.gke.io/default-interface: 'eth0' networking.gke.io/interfaces: | [ {"interfaceName":"eth0","network":"default"}, {"interfaceName":"eth1","network":"vpc1"}, {"interfaceName":"eth2","network":"vpc2"}, {"interfaceName":"eth3","network":"vpc3"}, {"interfaceName":"eth4","network":"vpc4"}, ]Tambahkan kolom berikut ke spesifikasi Pod:
spec: volumes: - name: libraries hostPath: path: /home/kubernetes/bin/nvidia/lib64 - name: sys hostPath: path: /sys - name: proc-sys hostPath: path: /proc/sysTambahkan container berikut ke manifes untuk menjalankan layanan tcpx-daemon:
- name: tcpx-daemon image: us-docker.pkg.dev/gce-ai-infra/gpudirect-tcpx/tcpgpudmarxd-dev:v2.0.9 command: - /tcpgpudmarxd/build/app/tcpgpudmarxd - --gpu_nic_preset - a3vm - --gpu_shmem_type - fd - --uds_path - /run/tcpx - --setup_param - \"--verbose 128 2 0 \" securityContext: capabilities: add: - NET_ADMIN volumeMounts: - name: libraries mountPath: /usr/local/nvidia/lib64 - name: tcpx-socket mountPath: /run/tcpx - name: sys mountPath: /hostsysfs - name: proc-sys mountPath: /hostprocsysfs env: - name: LD_LIBRARY_PATH value: /usr/local/nvidia/lib64Tambahkan pemasangan volume berikut ke container yang meminta GPU:
volumeMounts: - name: tcpx-socket mountPath: /tmp - name: libraries mountPath: /usr/local/nvidia/lib64Tambahkan variabel lingkungan untuk mengonfigurasi opsi NCCL. Untuk mengetahui detailnya, lihat bagian Menggunakan setelan konfigurasi NCCL yang direkomendasikan untuk meningkatkan performa dalam dokumen ini.
Tambahkan variabel lingkungan berikut ke setiap container GPU:
env: - name: LD_LIBRARY_PATH value: /usr/local/nvidia/lib64
Untuk contoh spesifikasi Pod yang sudah selesai, lihat manifes nccl-test-latest.yaml di GitHub.
Autopilot
Untuk mode Autopilot, Anda juga harus memilih GPU yang sesuai dalam manifes Pod agar GKE menyediakan hardware.
Tambahkan pemilih node berikut ke Pod Anda:
nodeSelector:
cloud.google.com/gke-accelerator: a3-edgegpu-8g
cloud.google.com/gke-gpu-driver-version: latest
Selain itu, jika ingin menggunakan kapasitas yang dicadangkan, Anda dapat memberikan informasi tentang reservasi. Untuk mengetahui informasi selengkapnya, lihat subbagian tentang menggunakan reservasi di Menggunakan reservasi kapasitas di cluster Autopilot.
Tambahkan anotasi berikut ke metadata Pod:
metadata: annotations: devices.gke.io/container.tcpx-daemon: |+ - path: /dev/nvidia0 - path: /dev/nvidia1 - path: /dev/nvidia2 - path: /dev/nvidia3 - path: /dev/nvidia4 - path: /dev/nvidia5 - path: /dev/nvidia6 - path: /dev/nvidia7 - path: /dev/nvidiactl - path: /dev/nvidia-uvm networking.gke.io/default-interface: 'eth0' networking.gke.io/interfaces: | [ {"interfaceName":"eth0","network":"default"}, {"interfaceName":"eth1","network":"vpc1"}, {"interfaceName":"eth2","network":"vpc2"}, {"interfaceName":"eth3","network":"vpc3"}, {"interfaceName":"eth4","network":"vpc4"}, ]Tambahkan kolom berikut ke spesifikasi Pod:
spec: volumes: - name: libraries hostPath: path: /home/kubernetes/bin/nvidia/lib64 - name: sys hostPath: path: /sys - name: proc-sys hostPath: path: /proc/sysTambahkan container berikut ke manifes untuk menjalankan layanan tcpx-daemon:
- name: tcpx-daemon image: us-docker.pkg.dev/gce-ai-infra/gpudirect-tcpx/tcpgpudmarxd-dev:v2.0.9 command: - /tcpgpudmarxd/build/app/tcpgpudmarxd - --gpu_nic_preset - a3vm - --gpu_shmem_type - fd - --uds_path - /run/tcpx - --setup_param - \"--verbose 128 2 0 \" securityContext: capabilities: add: - NET_ADMIN volumeMounts: - name: libraries mountPath: /usr/local/nvidia/lib64 - name: tcpx-socket mountPath: /run/tcpx - name: sys mountPath: /hostsysfs - name: proc-sys mountPath: /hostprocsysfs env: - name: LD_LIBRARY_PATH value: /usr/local/nvidia/lib64Tambahkan pemasangan volume berikut ke container yang meminta GPU:
volumeMounts: - name: tcpx-socket mountPath: /tmp - name: libraries mountPath: /usr/local/nvidia/lib64Tambahkan variabel lingkungan untuk mengonfigurasi opsi NCCL. Untuk mengetahui detailnya, lihat bagian Menggunakan setelan konfigurasi NCCL yang direkomendasikan untuk meningkatkan performa dalam dokumen ini.
Untuk contoh spesifikasi Pod yang telah selesai, lihat manifes nccl-test-latest-autopilot.yaml di GitHub.
Mengumpulkan log proses debug NCCL
Untuk mencatat error NCCL, sebaiknya tambahkan konfigurasi NCCL berikut:
NCCL_DEBUG=INFO
NCCL_DEBUG_SUBSYS=INIT,NET,ENV,COLL,GRAPH
NCCL_DEBUG_FILE=/DIRECTORY/FILE_NAME.%h.%p
NCCL_DEBUG=INFO: mencetak informasi proses debug.- Untuk workload berskala besar (64 node atau lebih), logging ekstensif dapat terjadi. Untuk menghindari skenario ini—dan kecuali Anda menentukan
NCCL_DEBUG_FILE—sebaiknya setelNCCL_DEBUG=WARNuntuk membatasi log hanya pada error.
- Untuk workload berskala besar (64 node atau lebih), logging ekstensif dapat terjadi. Untuk menghindari skenario ini—dan kecuali Anda menentukan
NCCL_DEBUG_SUBSYS: memfilter subsistem yang informasinya dikumpulkan NCCL untuk informasi proses debug. Sebaiknya kumpulkan log untuk subsistem berikut:INIT: fase inisialisasi NCCL.NET: jaringan NCCL.ENV: variabel lingkungan yang digunakan NCCL.COLL: operasi kolektif.GRAPH: deteksi topologi dan penelusuran grafik.
Jika Anda ingin mengumpulkan log untuk subsistem yang berbeda, lihat
NCCL_DEBUG_SUBSYSdalam dokumentasi NCCL untuk mengetahui daftar nilai yang diterima.NCCL_DEBUG_FILE(Opsional): mengarahkan output logging debug NCCL ke file yang Anda tentukan. Variabel ini menulis log NCCL ke file standar, yang mencegah output log bercampur dengan output aplikasi. Variabel ini juga menulis log dari berbagai peringkat NCCL ke file yang berbeda, yang mencegah log tercampur.Gunakan format nama file berikut:
/DIRECTORY/FILE_NAME.%h.%pGanti kode berikut:
DIRECTORY: direktori tempat Anda ingin menyimpan file log.FILE_NAME: nama file log.
Placeholder
%hdi-resolve ke nama host node, sedangkan%pdi-resolve ke ID proses (PID) dari proses yang menghasilkan log.
Untuk mengetahui informasi selengkapnya tentang cara men-debug log NCCL, lihat Memecahkan masalah GPU di GKE.
Langkah berikutnya
- Untuk mengetahui informasi selengkapnya tentang menjadwalkan workload di cluster GKE menggunakan Topology Aware Scheduling (TAS) dan Kueue, lihat Menjadwalkan workload GKE dengan Topology Aware Scheduling.
- Untuk mengetahui informasi selengkapnya tentang cara mengelola peristiwa umum yang relevan dengan cluster GKE dan workload AI, lihat Mengelola cluster GKE yang dioptimalkan untuk AI.