Halaman ini menunjukkan cara memaksimalkan bandwidth dan throughput jaringan untuk workload GPU berperforma tinggi di cluster Standard Google Kubernetes Engine (GKE) menggunakan GPUDirect-TCPXO, GPUDirect-TCPX, gVNIC, dan multi-jaringan. Jika Anda menggunakan cluster Autopilot, lihat Memaksimalkan bandwidth jaringan GPU di cluster mode Autopilot.
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 umum GKE Enterprise.
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. Mesin ini memiliki manfaat berikut:
- Delapan GPU NVIDIA B200, H200, atau H100 per mesin.
- Bandwidth hingga 200 Gbps pada 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 pada 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 semakin 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 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 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 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.
- * 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-8g
dana3-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
: ID project Google Cloud 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, tentukan192.168.$N.0/24
sehingga subnet pertama menggunakan192.168.1.0/24
, subnet kedua menggunakan192.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
: ID project Google Cloud 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/24
sehingga subnet pertama menggunakan192.168.1.0/24
, subnet kedua menggunakan192.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
: ID project Google Cloud Anda.
Membuat cluster:
gcloud beta container clusters create CLUSTER_NAME \ --enable-dataplane-v2 --enable-ip-alias --zone=ZONE \ --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.ZONE
: zona komputasi untuk cluster.
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 --zone=ZONE \ --enable-multi-networking --cluster-version=VERSION \ --no-enable-autoupgrade \ --project=PROJECT_ID
Ganti kode berikut: *
CLUSTER_NAME
: nama cluster baru Anda. *VERSION
: versi GKE yang mendukung GPUDirect-TCPX, seperti yang dijelaskan dalam Persyaratan. *ZONE
: zona komputasi untuk cluster.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 \
--zone=ZONE \
--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
memudahkan 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=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_NAME
dengan 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/lib64
pada VM. Secara default, GKE memasang direktori ini ke jalur/usr/local/nvidia/lib64
di 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.yaml
di 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/lib64
pada VM. Secara default, GKE memasang direktori ini ke jalur/usr/local/nvidia/lib64
dalam container GPU yang perlu menggunakan NCCL dan GPUDirect-TCPX.
Untuk menginstal biner dan mengonfigurasi NCCL, lakukan hal berikut:
Tinjau manifes
nccl-tcpx-installer.yaml
Daemonset di 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 injector 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.yaml
di 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 cuplikan kolom yang diperlukan untuk ditambahkan ke manifes, lihat Menambahkan GPUDirect ke manifes.
Tinjau manifes
nccl-test-latest.yaml
di 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 cuplikan kolom yang diperlukan untuk ditambahkan ke manifes, lihat Menambahkan GPUDirect ke manifes.
Tinjau manifes ConfigMap
nccl-config.yaml
di GitHub. Manifes ini men-deploy skrip yang menginisialisasi uji pengumpulan semua NCCL dan menetapkan setelan konfigurasi khusus NCCL.Tinjau manifes Deployment
nccl-test-latest.yaml
di 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
Menggunakan 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.sh
dieksekusi 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-1
versi 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.sh
saat container dimulai. Dalam manifes workload, tetapkan perintah berikut:source ${NCCL_LIB_DIR}/nccl-env-profile-ll128.sh
Skrip
nccl-env-profile-ll128.sh
memiliki 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-1
versi plugin NCCL dan yang lebih baru, LL128 menjadi parameter default, sehingga penggunaan skripnccl-env-profile.sh
atau skripnccl-env-profile-ll128.sh
mengaktifkan 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.sh
saat container dimulai. Dalam manifes workload, tetapkan perintah berikut:source ${NCCL_LIB_DIR}/nccl-env-profile-simple.sh
Skrip
nccl-env-profile-simple.sh
memiliki 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=WARN
untuk membatasi log hanya pada error.
- 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_SUBSYS
dalam 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
%h
di-resolve ke nama host node, sedangkan%p
di-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:true
akan diperlukan untuk Pod, danprivileged:true
akan diperlukan untuk penampungtcpxo-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:true
diperlukan 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:true
akan diperlukan untuk Pod, danprivileged:true
akan 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/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.