Halaman ini ditujukan untuk engineer machine learning (ML) dan administrator platform yang memfasilitasi workload ML. Untuk mempelajari lebih lanjut peran umum dan contoh tugas yang kami referensikan dalam konten Google Cloud , 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.
Sebelum membaca halaman ini, pastikan Anda 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 yang dapat diskalakan. Mesin ini memiliki manfaat berikut:
- Delapan GPU NVIDIA B200, H200, atau H100 per mesin.
- Bandwidth hingga 200 Gbps di NIC utama.
- NIC sekunder (hingga delapan pada jenis mesin A3 Mega dan hingga empat pada jenis mesin A3 Tinggi), masing-masing mendukung bandwidth hingga 200 Gbps untuk transfer data GPU.
Workload GKE Anda harus menggunakan semua GPU yang tersedia dan semua NIC sekunder yang tersedia di satu node serta menggunakan sebagian besar bandwidth yang tersedia. Solusi yang dijelaskan dalam dokumen ini ideal 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, gunakan semua fitur berikut:
- Stack jaringan GPUDirect: Seri mesin A3 mendukung
tiga stack jaringan untuk akses memori langsung (RDMA) jarak jauh kustom:
- Pada jenis mesin A3 High dan GPU NVIDIA H100, manfaatkan 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.
- Pada jenis mesin A3 Mega dan GPU NVIDIA H100 Mega, manfaatkan GPUDirect-TCPXO yang lebih meningkatkan komunikasi GPU ke VM.
- Pada jenis mesin A3 Ultra dan GPU NVIDIA H200, serta jenis mesin A4 dan GPU NVIDIA B200, manfaatkan GPUDirect RDMA untuk menjalankan workload AI terdistribusi dengan peningkatan throughput lebih lanjut. Untuk memulai, buat cluster GKE yang dioptimalkan untuk AI kustom.
 
- gVNIC: Aktifkan kemampuan GPUDirect seperti pemisahan header paket, pengarahan alur, dan pengelolaan buffer. gVNIC diperlukan untuk menggunakan GPUDirect-TCPX atau GPUDirect-TCPXO. Untuk mengetahui detail tentang gVNIC, lihat Meningkatkan kecepatan traffic jaringan untuk node GPU.
- 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 pada server yang berdekatan secara fisik guna meminimalkan latensi. Untuk mengetahui detailnya, lihat Menentukan penempatan rapat untuk node GKE.
Garis besar prosedur
Untuk menggunakan semua kemampuan ini secara bersamaan, Anda akan melakukan hal berikut:
- Membuat Virtual Private Cloud (VPC) dan subnet
- Buat lingkungan GKE.
- Instal biner GPUDirect dan plugin NCCL
- Men-deploy plugin penyuntik perangkat NRI
- Men-deploy workload pengujian untuk memverifikasi penyiapan GPUDirect
Sebelum memulai
Sebelum memulai, pastikan Anda telah melakukan 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 perintah gcloud components update. Versi gcloud CLI yang lebih lama mungkin tidak mendukung menjalankan perintah dalam dokumen ini.
- Pastikan Anda memiliki kuota yang cukup untuk GPU H100. Untuk meminta lebih banyak kuota, lihat kuota GPU.
Persyaratan
Persyaratan berikut berlaku untuk GPUDirect-TCPX dan GPUDirect-TCPXO kecuali jika dinyatakan lain.
- GPUDirect-TCPX didukung di GKE versi 1.27 atau yang lebih baru dengan versi patch tertentu, dan memerlukan: - Jenis mesin a3-highgpu-8g.
- Untuk GKE versi 1.27, gunakan patch GKE versi 1.27.7-gke.1121000 atau yang lebih baru.
- Untuk GKE versi 1.28, gunakan versi patch GKE 1.28.10-gke.1141000 atau yang lebih baru.
- Untuk GKE versi 1.29, gunakan versi patch GKE 1.29.5-gke.1121000 atau yang lebih baru.
- Untuk GKE versi 1.30 hingga 1.33, gunakan versi patch apa pun.
- Untuk GKE versi 1.34, gunakan versi patch GKE yang lebih lama dari 1.34.1-gke.1431000. Untuk informasi selengkapnya, lihat catatan rilis 17 Oktober 2025.
 
- Jenis mesin 
- GPUDirect-TCPXO didukung di GKE versi 1.28 atau yang lebih baru dan memerlukan: - Jenis mesin a3-megagpu-8g.
- Untuk GKE versi 1.28, gunakan versi patch GKE 1.28.9-gke.1250000 atau yang lebih baru.
- Untuk GKE versi 1.29, gunakan versi patch GKE 1.29.4-gke.1542000 atau yang lebih baru.
- Untuk GKE versi 1.30, gunakan versi patch GKE 1.30.4-gke.1129000 atau yang lebih baru.
- Untuk GKE versi 1.31, gunakan versi patch GKE 1.31.1-gke.2008000 atau yang lebih baru.
- Untuk GKE versi 1.32, gunakan patch GKE versi 1.32.2-gke.1489001 atau yang lebih baru.
 
- Jenis mesin 
- 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.
- Untuk workload GPUDirect-TCPX atau GPUDirect-TCPXO yang berjalan di beberapa kumpulan node, semua kumpulan node 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 dan GPUDirect-TCPXO tidak didukung dengan GPU multi-instance, GPU berbagi waktu, atau NVIDIA MPS.
- Anda tidak dapat menggunakan NCCL FastSocket dengan GPUDirect-TCPX atau GPUDirect-TCPXO .
- 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 atau GPUDirect-TCPXO pada satu node.
- Anda hanya dapat menggunakan jenis mesin a3-highgpu-8gdana3-megagpu-8g. Jenis mesin A3 lainnya tidak didukung.
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.
- Buat jaringan VPC untuk GPUDirect di project Anda, masing-masing dengan subnet dan aturan firewall. Pilih tab GPUDirect-TCPX untuk jenis mesin A3 High, atau pilih tab GPUDirect-TCPXO untuk jenis mesin A3 Mega, lalu selesaikan petunjuk berikut: - GPUDirect-TCPXO- Untuk memaksimalkan bandwidth, sebaiknya buat delapan jaringan baru. - for N in $(seq 1 8); 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 done- Ganti 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 delapan subnet, jadi Anda harus menggunakan variabel untuk mengubah alamat IP untuk setiap subnet. Misalnya, tentukan- 192.168.$N.0/24sehingga subnet pertama menggunakan- 192.168.1.0/24, subnet kedua menggunakan- 192.168.2.0/24, dan seterusnya.
- SOURCE_RANGE: Rentang alamat IP sumber untuk aturan firewall yang mengizinkan traffic masuk, dalam notasi CIDR. Contoh,- 192.168.0.0/16.
 - GPUDirect-TCPX- 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 done- Ganti 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, tentukan- 192.168.$N.0/24sehingga subnet pertama menggunakan- 192.168.1.0/24, subnet kedua menggunakan- 192.168.2.0/24, dan seterusnya.
- SOURCE_RANGE: Rentang alamat IP sumber untuk aturan firewall yang 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 dengan GPU H100 yang mendukung node
- Driver NVIDIA terbaru terinstal
Anda tidak dapat mengupdate cluster yang ada untuk menggunakan multi-networking.
GPUDirect-TCPXO
- Pilih versi GKE yang tersedia yang mendukung GPUDirect-TCPXO. Untuk mencantumkan versi, jalankan perintah ini: - gcloud container get-server-config \ --format="yaml(validMasterVersions)" \ --region=REGION \ --project=PROJECT_ID- Ganti kode berikut: - REGION: region komputasi untuk bidang kontrol cluster.
- PROJECT_ID: Google Cloud Project ID Anda.
 
- Membuat cluster: - 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_ID- Ganti kode berikut: - CLUSTER_NAME: nama cluster baru.
- VERSION: versi GKE yang mendukung GPUDirect-TCPXO, seperti yang dijelaskan dalam Persyaratan.
- CONTROL_PLANE_LOCATION: lokasi Compute Engine bidang kontrol cluster Anda. Berikan region untuk cluster regional, atau zona untuk cluster zona.
 
- 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: Network metadata: name: vpc5 spec: parametersRef: group: networking.gke.io kind: GKENetworkParamSet name: vpc5 type: Device --- apiVersion: networking.gke.io/v1 kind: Network metadata: name: vpc6 spec: parametersRef: group: networking.gke.io kind: GKENetworkParamSet name: vpc6 type: Device --- apiVersion: networking.gke.io/v1 kind: Network metadata: name: vpc7 spec: parametersRef: group: networking.gke.io kind: GKENetworkParamSet name: vpc7 type: Device --- apiVersion: networking.gke.io/v1 kind: Network metadata: name: vpc8 spec: parametersRef: group: networking.gke.io kind: GKENetworkParamSet name: vpc8 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 --- apiVersion: networking.gke.io/v1 kind: GKENetworkParamSet metadata: name: vpc5 spec: vpc: PREFIX-net-5 vpcSubnet: PREFIX-sub-5 deviceMode: NetDevice --- apiVersion: networking.gke.io/v1 kind: GKENetworkParamSet metadata: name: vpc6 spec: vpc: PREFIX-net-6 vpcSubnet: PREFIX-sub-6 deviceMode: NetDevice --- apiVersion: networking.gke.io/v1 kind: GKENetworkParamSet metadata: name: vpc7 spec: vpc: PREFIX-net-7 vpcSubnet: PREFIX-sub-7 deviceMode: NetDevice --- apiVersion: networking.gke.io/v1 kind: GKENetworkParamSet metadata: name: vpc8 spec: vpc: PREFIX-net-8 vpcSubnet: PREFIX-sub-8 deviceMode: NetDevice EOF- Resource ini memberi tahu GKE untuk mengonfigurasi NIC untuk traffic GPU dalam mode passthrough. GKE tidak menerapkan pemrograman jaringan bawaan menggunakan eBPF ke traffic ini. 
GPUDirect-TCPX
- Membuat cluster: - 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_ID- Ganti 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.
 
- 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 EOF- Resource 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
GPUDirect-TCPXO
Buat node pool untuk GPU H100:
gcloud beta container node-pools create NODE_POOL_NAME \
    --location=CONTROL_PLANE_LOCATION \
    --cluster=CLUSTER_NAME \
    --project=PROJECT_ID \
    --accelerator=type=nvidia-h100-mega-80gb,count=8,gpu-driver-version=LATEST \
    --machine-type=a3-megagpu-8g \
    --num-nodes=2 \
    --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 \
    --additional-node-network network=PREFIX-net-5,subnetwork=PREFIX-sub-5 \
    --additional-node-network network=PREFIX-net-6,subnetwork=PREFIX-sub-6 \
    --additional-node-network network=PREFIX-net-7,subnetwork=PREFIX-sub-7 \
    --additional-node-network network=PREFIX-net-8,subnetwork=PREFIX-sub-8 \
    --enable-gvnic \
    --no-enable-autoupgrade \
    --scopes "https://www.googleapis.com/auth/cloud-platform" \
    [--placement-policy=POLICY_NAME \
    --reservation-affinity=specific \
    --reservation=RESERVATION_NAME \
    --host-maintenance-interval=PERIODIC]
Ganti NODE_POOL_NAME dengan nama node pool Anda.
Dalam contoh, argumen --scopes "https://www.googleapis.com/auth/cloud-platform"
menetapkan cakupan instance node menjadi cloud-platform untuk
kemudahan pengujian. Untuk produksi, Anda dapat membatasi cakupan untuk
mengonfigurasi kredensial yang lebih terperinci.
Gunakan flag --placement-policy, --reservation-affinity, dan --reservation
jika Anda menggunakan reservasi. Tentukan tanda ini untuk mengonfigurasi
nama kebijakan dan reservasi di node pool.
Jika perintah ini gagal, Anda mungkin tidak memiliki kuota GPU H100 yang cukup di project Anda. Pastikan Anda memiliki kuota yang cukup dan coba lagi perintahnya.
GPUDirect-TCPX
Buat node pool untuk GPU H100:
gcloud container node-pools create NODE_POOL_NAME \
    --cluster=CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION \
    --machine-type=a3-highgpu-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
Ganti NODE_POOL_NAME dengan nama node pool.
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 nodes
- Pastikan setiap node GPU memiliki delapan GPU: - kubectl describe node NODE_NAME- Ganti - 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 konfigurasi NCCL
Bagian ini menunjukkan cara menginstal biner GPUDirect, berdasarkan jenis mesin A3 (GPUDirect-TCPX untuk A3 High, GPUDirect-TCPXO untuk A3 Mega) dan versi library NCCL tertentu menggunakan DaemonSet.
GPUDirect-TCPXO
DaemonSet ini melakukan hal berikut:
- Pra-penginstalan untuk menyiapkan konfigurasi terkait GPUDirect-TCPXO.
- Menginstal library NCCL dan biner GPUDirect-TCPXO 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-TCPXO.
Untuk menginstal biner dan mengonfigurasi NCCL, lakukan langkah-langkah berikut:
- Tinjau manifes Daemonset - nccl-tcpxo-installer.yamldi GitHub.
- Deploy DaemonSet: - kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/gpudirect-tcpxo/nccl-tcpxo-installer.yaml- Plugin NCCL memerlukan waktu sekitar dua menit untuk mulai berjalan. 
- Verifikasi status Pod DaemonSet: - kubectl get pods -n=kube-system -l=name=nccl-tcpxo-installer- Outputnya mirip dengan hal berikut ini: - # Output nccl-tcpxo-installer-6c2pv 1/1 Running 0 2m11s nccl-tcpxo-installer-qgg82 1/1 Running 0 2m11s
GPUDirect-TCPX
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:
- 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.yaml- Plugin NCCL memerlukan waktu sekitar dua menit untuk mulai berjalan. 
- Verifikasi status Pod DaemonSet: - kubectl get pods -n=kube-system -l=name=nccl-tcpx-installer- Outputnya mirip dengan hal berikut ini: - nccl-tcpx-installer-6c2pv 1/1 Running 0 2m11s nccl-tcpx-installer-qgg82 1/1 Running 0 2m11s
Men-deploy plugin penyuntik perangkat NRI
Bagian ini menunjukkan cara menginstal injektor perangkat NRI menggunakan DaemonSet. Kedua jenis mesin GPU H100 menginstal plugin injektor perangkat NRI yang sama. 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:
- 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.yaml- Plugin NCCL memerlukan waktu sekitar dua menit untuk mulai berjalan. 
- Verifikasi status Pod DaemonSet: - kubectl get pods -n=kube-system -l=name=device-injector- Outputnya mirip dengan hal berikut ini: - # Output device-injector-md6hb 1/1 Running 0 4h54m device-injector-vh9bm 1/1 Running 0 4h54m
Men-deploy workload pengujian
Di bagian ini, Anda akan men-deploy contoh workload untuk memverifikasi bahwa NCCL dan GPUDirect-TCPX atau GPUDirect-TCPXO 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-TCPXO atau GPUDirect-TCPX.
Untuk men-deploy contoh workload ini, lakukan hal berikut:
GPUDirect-TCPXO
Workload ini mencakup container sidecar bernama tcpxo-daemon, yang menjalankan layanan yang memungkinkan Pod menggunakan GPUDirect-TCPXO. Anda harus menambahkan container file bantuan ini ke Pod mana pun di lingkungan Anda sendiri yang perlu menggunakan GPUDirect-TCPXO. Untuk melihat cuplikan kolom yang diperlukan untuk ditambahkan ke manifes, lihat Menambahkan GPUDirect ke manifes Anda.
- Tinjau manifes - nccl-test-latest.yamldi GitHub.
- Deploy dua Pod dengan workload pengujian: - kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/gpudirect-tcpxo/nccl-test-latest.yaml
- Setelah Pod di-deploy, picu pengujian pengumpulan semua: - kubectl exec --stdin --tty --container=nccl-test nccl-test-host-1 -- /scripts/allgather.sh nccl-host-1 nccl-host-2- Outputnya mirip dengan hal berikut ini: - # 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 #
GPUDirect-TCPX
Workload ini mencakup container sidecar bernama tcpx-daemon, yang menjalankan layanan yang memungkinkan Pod menggunakan GPUDirect-TCPX. Anda harus menambahkan container file bantuan ini ke Pod mana 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.
- Tinjau manifes Deployment - nccl-test-latest.yamldi GitHub.
- Deploy ConfigMap dan workload pengujian: - 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.yaml
- 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-2- Outputnya mirip dengan hal berikut ini: - # 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
Gunakan setelan konfigurasi NCCL yang diperlukan untuk meningkatkan performa
Pasangan nilai kunci berikut adalah setelan konfigurasi NCCL yang diperlukan untuk GPUDirect-TCPX dan GPUDirect-TCPXO. Saat men-deploy workload yang menggunakan NCCL, tetapkan sebagai variabel lingkungan untuk mengoptimalkan performa.
GPUDirect-TCPXO
"LD_LIBRARY_PATH=\"${LD_LIBRARY_PATH}:/usr/local/nvidia/lib64\"",
"NCCL_FASTRAK_CTRL_DEV=eth0",
"NCCL_FASTRAK_IFNAME=eth1,eth2,eth3,eth4,eth5,eth6,eth7,eth8",
"NCCL_SOCKET_IFNAME=eth0",
"NCCL_CROSS_NIC=0",
"NCCL_ALGO=Ring,Tree",
"NCCL_PROTO=Simple,LL128",
"NCCL_MIN_NCHANNELS=4",
"NCCL_TUNER_PLUGIN=libnccl-tuner.so",
"NCCL_TUNER_CONFIG_PATH=/usr/local/nvidia/lib64/a3plus_tuner_config.textproto",
"NCCL_SHIMNET_GUEST_CONFIG_CHECKER_CONFIG_FILE=/usr/local/nvidia/lib64/a3plus_guest_config.textproto",
"NCCL_DYNAMIC_CHUNK_SIZE=524288",
"NCCL_P2P_NET_CHUNKSIZE=524288",
"NCCL_P2P_PCI_CHUNKSIZE=524288",
"NCCL_P2P_NVL_CHUNKSIZE=1048576",
"NCCL_FASTRAK_NUM_FLOWS=2",
"NCCL_FASTRAK_USE_SNAP=1",
"NCCL_FASTRAK_PLUGIN_ACCEPT_TIMEOUT_MS=600000",
"NCCL_FASTRAK_ENABLE_CONTROL_CHANNEL=0",
"NCCL_BUFFSIZE=8388608",
"CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7",
"NCCL_NET_GDR_LEVEL=PIX",
"NCCL_FASTRAK_ENABLE_HOTPATH_LOGGING=0",
"NCCL_FASTRAK_USE_LLCM=1",
"NCCL_NVLS_ENABLE=0"
Secara opsional, Anda dapat menyetel semua konfigurasi sekaligus dengan mengikuti langkah-langkah berikut:
- Dalam manifes container workload Anda, tambahkan pasangan nilai kunci berikut sebagai variabel lingkungan: - NCCL_LIB_DIR="/usr/local/nvidia/lib64"
- Pastikan skrip - nccl-env-profile.shdieksekusi saat container workload Anda dimulai. Misalnya, Anda dapat melakukannya di spesifikasi Pod dengan mengganti perintah container untuk menyertakan berikut ini:- source ${NCCL_LIB_DIR}/nccl-env-profile.sh
Dukungan LL128
Protokol komunikasi NCCL NVIDIA LL128 (latensi rendah 128) dapat meningkatkan performa secara signifikan untuk kolektif berukuran kecil hingga sedang. GPUDirect-TCPXO mendukung protokol LL128.
Untuk menggunakan LL128, pastikan file nccl-tcpxo-installer.yaml di
bagian Instal biner GPUDirect dan konfigurasi NCCL
menggunakan versi image container berikut atau yang lebih baru:
us-docker.pkg.dev/gce-ai-infra/gpudirect-tcpxo/nccl-plugin-gpudirecttcpx-
dev:v1.0.8-1
Untuk menyiapkan LL128, lakukan hal berikut:
- Untuk - us-docker.pkg.dev/gce-ai-infra/gpudirect-tcpxo/nccl-plugin-gpudirecttcpx- dev:v1.0.8-1versi plugin NCCL, lakukan langkah-langkah berikut:- Di manifes workload Anda, tetapkan variabel lingkungan berikut: - NCCL_LIB_DIR="/usr/local/nvidia/lib64
- Konfigurasi beban kerja Anda untuk menjalankan skrip - nccl-env-profile-ll128.shsaat container dimulai. Dalam manifes workload, tetapkan perintah berikut:- source ${NCCL_LIB_DIR}/nccl-env-profile-ll128.sh- Skrip - nccl-env-profile-ll128.shmemiliki variabel lingkungan berikut:- NCCL_PROTO=Simple,LL128 NCCL_TUNER_CONFIG_PATH=/usr/local/nvidia/lib64/a3plus_tuner_config_ll128.textproto NCCL_SHIMNET_GUEST_CONFIG_CHECKER_CONFIG_FILE=/usr/local/nvidia/lib64/a3plus_guest_config_ll128.textproto
 
- Untuk - us-docker.pkg.dev/gce-ai-infra/gpudirect-tcpxo/nccl-plugin-gpudirecttcpx-dev:v1.0.9-1versi plugin NCCL dan yang lebih baru, LL128 menjadi parameter default, sehingga penggunaan skrip- nccl-env-profile.shatau skrip- nccl-env-profile-ll128.shmengaktifkan LL128. Untuk menonaktifkan LL128:- Di manifes workload Anda, tetapkan variabel lingkungan berikut: - NCCL_LIB_DIR="/usr/local/nvidia/lib64
- Konfigurasi beban kerja Anda untuk menjalankan skrip - nccl-env-profile-ll128.shsaat container dimulai. Dalam manifes workload, tetapkan perintah berikut:- source ${NCCL_LIB_DIR}/nccl-env-profile-simple.sh- Skrip - nccl-env-profile-simple.shmemiliki variabel lingkungan berikut:- NCCL_PROTO=Simple NCCL_TUNER_CONFIG_PATH=/usr/local/nvidia/lib64/a3plus_tuner_config_simple.textproto NCCL_SHIMNET_GUEST_CONFIG_CHECKER_CONFIG_FILE=/usr/local/nvidia/lib64/a3plus_tuner_config_simple.textproto
 
GPUDirect-TCPX
"LD_LIBRARY_PATH=\"${LD_LIBRARY_PATH}:/usr/local/tcpx/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"
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 yang ekstensif dapat terjadi. Untuk menghindari skenario ini—dan kecuali jika Anda menentukan
NCCL_DEBUG_FILE—sebaiknya tetapkanNCCL_DEBUG=WARNuntuk membatasi log hanya pada kesalahan.
 
- Untuk workload berskala besar (64 node atau lebih), logging yang ekstensif dapat terjadi. Untuk menghindari skenario ini—dan kecuali jika Anda menentukan
- NCCL_DEBUG_SUBSYS: memfilter subsistem yang informasinya dikumpulkan NCCL untuk 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.%p- Ganti 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.
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 jenis GPUDirect, lakukan tindakan berikut:
GPUDirect-TCPXO
- Tambahkan anotasi berikut ke metadata Pod. Tanpa anotasi ini, - hostNetwork:trueakan diperlukan untuk Pod, dan- privileged:trueakan diperlukan untuk container- tcpxo-daemon.- metadata: annotations: devices.gke.io/container.tcpxo-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 - path: /dev/dmabuf_import_helper 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"}, {"interfaceName":"eth5","network":"vpc5"}, {"interfaceName":"eth6","network":"vpc6"}, {"interfaceName":"eth7","network":"vpc7"}, {"interfaceName":"eth8","network":"vpc8"} ]
- 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/sys - name: aperture-devices hostPath: path: /dev/aperture_devices
- Tambahkan penampung berikut ke manifes untuk menjalankan layanan - tcpxo-daemon. Ganti (- TCPXO_DAEMON_IMAGE) dengan gambar terbaru,- us-docker.pkg.dev/gce-ai-infra/gpudirect-tcpxo/tcpgpudmarxd-dev:v1.0.17:- - name: tcpxo-daemon image: TCPXO_DAEMON_IMAGE imagePullPolicy: Always command: ["/bin/sh", "-c"] args: - | set -ex chmod 755 /fts/entrypoint_rxdm_container.sh /fts/entrypoint_rxdm_container.sh --num_hops=2 --num_nics=8 --uid= --alsologtostderr securityContext: capabilities: add: - NET_ADMIN - NET_BIND_SERVICE volumeMounts: - name: libraries mountPath: /usr/local/nvidia - name: sys mountPath: /hostsysfs - name: proc-sys mountPath: /hostprocsysfs env: - name: LD_LIBRARY_PATH value: /usr/local/nvidia/lib64
- Tambahkan variabel lingkungan berikut ke setiap container GPU: - env: - name: LD_LIBRARY_PATH value: /usr/local/nvidia/lib64 - name: NCCL_FASTRAK_LLCM_DEVICE_DIRECTORY value: /dev/aperture_devices
- Tambahkan volumeMounts berikut ke setiap container GPU. Tanpa penyiapan - aperture_devices,- privileged:truediperlukan untuk container GPU:- volumeMounts: - name: aperture-devices mountPath: /dev/aperture_devices
- Tambahkan variabel lingkungan untuk mengonfigurasi opsi NCCL. Untuk mengetahui detailnya, lihat Menggunakan setelan konfigurasi NCCL yang direkomendasikan untuk meningkatkan performa. 
Spesifikasi Pod yang sudah selesai akan terlihat seperti berikut:
apiVersion: v1
kind: Pod
metadata:
name: a3plus-workloads
annotations:
  devices.gke.io/container.tcpxo-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
    - path: /dev/dmabuf_import_helper
  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"},
      {"interfaceName":"eth5","network":"vpc5"},
      {"interfaceName":"eth6","network":"vpc6"},
      {"interfaceName":"eth7","network":"vpc7"},
      {"interfaceName":"eth8","network":"vpc8"}
    ]
...
containers:
  - name: tcpxo-daemon
    image: TCPXO_DAEMON_IMAGE
    imagePullPolicy: Always
    command: ["/bin/sh", "-c"]
    args:
      - |
        set -ex
        chmod 755 /fts/entrypoint_rxdm_container.sh
        /fts/entrypoint_rxdm_container.sh --num_hops=2 --num_nics=8 --uid= --alsologtostderr
    securityContext:
      capabilities:
        add:
          - NET_ADMIN
          - NET_BIND_SERVICE
    volumeMounts:
      - name: libraries
        mountPath: /usr/local/nvidia
      - name: sys
        mountPath: /hostsysfs
      - name: proc-sys
        mountPath: /hostprocsysfs
    env:
      - name: LD_LIBRARY_PATH
        value: /usr/local/nvidia/lib64
  - name: main-application-container
...
   env:
      - name: LD_LIBRARY_PATH
        value: /usr/local/nvidia/lib64
      - name: NCCL_FASTRAK_LLCM_DEVICE_DIRECTORY
        value: /dev/aperture_devices
    securityContext:
    volumeMounts:
      - name: aperture-devices
        mountPath: /dev/aperture_devices
    resources:
      limits:
        nvidia.com/gpu: 8
volumes:
  - name: libraries
    hostPath:
      path: /home/kubernetes/bin/nvidia
  - name: sys
    hostPath:
      path: /sys
  - name: proc-sys
    hostPath:
      path: /proc/sys
  - name: aperture-devices
    hostPath:
      path: /dev/aperture_devices
GPUDirect-TCPX
- Tambahkan anotasi berikut ke metadata Pod. Tanpa anotasi ini, - hostNetwork:trueakan diperlukan untuk Pod, dan- privileged:trueakan diperlukan untuk container- tcpx-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/sys
- Tambahkan 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/lib64
- Tambahkan pemasangan volume berikut ke container yang meminta GPU: - volumeMounts: - name: tcpx-socket mountPath: /tmp - name: libraries mountPath: /usr/local/nvidia/lib64
- Tambahkan 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
Spesifikasi Pod yang sudah selesai akan terlihat seperti berikut:
apiVersion: v1
kind: Pod
metadata:
name: a3-gpu-workloads-example
labels:
  name: a3-gpu-workloads-example
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"}
    ]
spec:
containers:
  - name: tcpx-daemon
    image: us-docker.pkg.dev/gce-ai-infra/gpudirect-tcpx/tcpgpudmarxd-dev:v2.0.11
    imagePullPolicy: Always
    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
        readOnly: true
      - name: tcpx-socket
        mountPath: /run/tcpx
      - name: sys
        mountPath: /hostsysfs
      - name: proc-sys
        mountPath: /hostprocsysfs
    env:
      - name: LD_LIBRARY_PATH
        value: /usr/local/nvidia/lib64
  - name: a3-gpu-workloads-example
    ...
    volumeMounts:
      - name: tcpx-socket
        mountPath: /tmp
      - name: libraries
        mountPath: /usr/local/nvidia/lib64
        readOnly: true
    resources:
      limits:
        nvidia.com/gpu: 8
    env:
      - name: LD_LIBRARY_PATH
        value: /usr/local/nvidia/lib64
...
volumes:
  - name: libraries
    hostPath:
      path: /home/kubernetes/bin/nvidia/lib64
  - name: tcpx-socket
    emptyDir:
  - name: sys
    hostPath:
      path: /sys
  - name: proc-sys
    hostPath:
      path: /proc/sys
Langkah berikutnya
- Baca Catatan Rilis GPUDirect-TCPXO
- Pelajari lebih lanjut praktik terbaik untuk menjalankan workload dengan GPUDirect-TCPX(O)
- Pelajari praktik terbaik untuk jaringan GKE.
- Pelajari lebih lanjut keluarga teknologi Nvidia GPUDirect untuk pergerakan dan akses data di GPU Nvidia.
- Pelajari ketersediaan versi GPU saat ini dan cara meminta GPU di GKE.