Memaksimalkan bandwidth jaringan GPU dengan GPUDirect-TCPX dan multi-jaringan


Halaman ini menunjukkan cara memaksimalkan bandwidth dan throughput jaringan untuk beban kerja GPU berperforma tinggi di cluster Google Kubernetes Engine (GKE) dalam mode Standar. Halaman ini ditujukan bagi engineer machine learning (ML) dan administrator platform yang memfasilitasi beban kerja ML. Anda seharusnya sudah terbiasa dengan teknologi jaringan, seperti kartu antarmuka jaringan (NIC) dan TCP, serta teknologi akselerator seperti NVIDIA Collective Communications Library (NCCL).

Aplikasi kecerdasan buatan (AI), ML, dan komputasi berperforma tinggi (HPC) memerlukan akselerasi yang kuat 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.

Tentang superkomputer GPU Google Cloud

Google Cloud memiliki superkomputer yang dioptimalkan akselerator yang dibangun untuk model masif dan skalabel. Mesin ini memiliki manfaat berikut:

  • Delapan GPU NVIDIA H100 per mesin.
  • Bandwidth hingga 200 Gbps pada NIC utama.
  • Hingga empat NIC sekunder, masing-masing mendukung bandwidth hingga 200 Gbps untuk transfer data GPU.

Untuk mengetahui daftar lengkap manfaat, baca Seri mesin A3 dalam dokumentasi Compute Engine.

Beban kerja 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 cocok untuk beban kerja yang memerlukan performa tinggi, throughput tinggi, dan latensi rendah.

Fitur dan kemampuan yang diperlukan untuk memaksimalkan bandwidth

Untuk memaksimalkan bandwidth jaringan Anda di node superkomputer GPU, gunakan semua fitur berikut:

  • GPUDirect-TCPX: Mengurangi overhead yang diperlukan untuk mentransfer payload paket ke dan dari GPU, yang secara signifikan meningkatkan throughput dalam skala besar dibandingkan GPU yang tidak menggunakan GPUDirect-TCPX.
  • gVNIC: Mengaktifkan kemampuan GPUDirect-TCPX 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.
  • Multi-jaringan: Menambahkan NIC sekunder ke mesin yang dioptimalkan akselerator. Untuk komputer A3, tambahkan empat NIC tambahan. Setiap NIC dikaitkan dengan subnet terpisah di VPC-nya sendiri untuk menghindari konflik. Untuk mengetahui detail tentang dukungan multijaringan, lihat Menyiapkan dukungan multijaringan untuk Pod.
  • Kebijakan penempatan: Gunakan kebijakan penempatan resource guna menempatkan semua node GPU untuk beban kerja tertentu pada server yang berdekatan secara fisik guna meminimalkan latensi. Untuk mengetahui detailnya, lihat Menentukan penempatan yang ringkas untuk node GKE.

Garis besar prosedur

Untuk menggunakan semua kemampuan ini secara bersamaan, Anda perlu melakukan hal berikut:

  1. Membuat Virtual Private Cloud (VPC) dan subnet
  2. Buat lingkungan GKE:
    1. Membuat cluster dengan multi-jaringan diaktifkan
    2. Buat kumpulan node dengan karakteristik berikut:
      1. gVNIC diaktifkan
      2. Subnet multi-jaringan ditentukan untuk setiap NIC sekunder
      3. Seri mesin A3 dengan GPU H100 (empat NIC sekunder dan delapan GPU) yang mendukung node
      4. Driver NVIDIA terbaru yang diinstal
  3. Menginstal biner GPUDirect-TCPX dan plugin NCCL
  4. Men-deploy beban kerja pengujian untuk memverifikasi penyiapan GPUDirect-TCPX

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 initialize 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

  • GPUDirect-TCPX didukung di GKE versi 1.27 atau yang lebih baru dan memerlukan:
    • Untuk GKE versi 1.27, gunakan patch GKE versi 1.27.7-gke.1121000 atau yang lebih baru.
    • Untuk GKE versi 1.28, gunakan patch GKE versi 1.28.8-gke.1095000 atau yang lebih baru.
    • Untuk GKE versi 1.29, gunakan patch GKE versi 1.29.3-gke.1093000 atau yang lebih baru.
  • Node GPU Anda harus menggunakan driver NVIDIA versi 535 atau yang lebih baru.
  • Anda harus menggunakan GKE Dataplane V2.

Batasan

Batasan berikut berlaku:

  • Anda tidak dapat menggunakan GPUDirect-TCPX di cluster Autopilot
  • Anda hanya dapat menggunakan GPUDirect-TCPX di GKE versi 1.27 atau yang lebih baru dan menggunakan versi patch berikut:
    • Untuk GKE versi 1.27, gunakan patch GKE versi 1.27.7-gke.1121000 atau yang lebih baru.
    • Untuk GKE versi 1.28, gunakan patch GKE versi 1.28.8-gke.1095000 atau yang lebih baru.
    • Untuk GKE versi 1.29, gunakan patch GKE versi 1.29.3-gke.1093000 atau yang lebih baru.
  • Anda tidak dapat menggunakan GPUDirect-TCPX dengan GPU multi-instance atau berbagi waktu GPU
  • Anda tidak dapat menggunakan FastSocket NCCL
  • Lingkungan Anda harus mendukung setelan hostNetwork: true di spesifikasi Pod
  • Agar dapat menggunakan SSD Lokal untuk penyimpanan Pod, Anda harus secara eksplisit menentukan jumlah tepat SSD Lokal yang akan dipasang ke VM A3 dasar menggunakan flag --ephemeral-storage-local-ssd=count=SSD_COUNT untuk penyimpanan sementara atau flag --local-nvme-ssd-block=count=SSD_COUNT untuk blok akses. Jika flag ini dihapus, Anda tidak akan dapat menggunakan SSD Lokal di Pod Anda. Tanda ini hanya diperlukan jika Anda ingin menggunakan SSD Lokal untuk akses data.

    Ukuran mesin yang didukung di GKE adalah a3-highgpu-8g, dan jumlah SSD Lokal yang sesuai adalah 16.

Membuat VPC dan subnet

Buat jaringan VPC terpisah dalam project Anda untuk setiap NIC virtual yang akan ditambahkan ke node Anda. Setiap VPC harus memiliki subnet dan aturan firewall yang mengizinkan traffic jaringan internal. Untuk memaksimalkan bandwidth, sebaiknya buat empat jaringan baru.

  1. Perbarui subnetwork VPC default di project Anda untuk menambahkan rentang alamat IP sekunder untuk Pod dan Service:

    gcloud compute networks subnets update DEFAULT_NETWORK \
        --region=REGION \
        --add-secondary-ranges="CLUSTER_NAME-pods=POD_IP_ADDRESS_RANGE,CLUSTER_NAME-services=SERVICE_IP_ADDRESS_RANGE"
    

    Ganti kode berikut:

    • DEFAULT_NETWORK: nama subnet default di project Anda.
    • REGION: region subnet default.
    • CLUSTER_NAME: nama cluster GKE Anda.
    • POD_IP_ADDRESS_RANGE: rentang alamat IP untuk Pod di cluster yang akan digunakan, dalam notasi CIDR. Contoh, 10.64.0.0/19.
    • SERVICE_IP_ADDRESS_RANGE: rentang alamat IP untuk Layanan di cluster yang akan digunakan, dalam notasi CIDR. Harus berbeda dengan rentang Pod. Contoh, 10.65.0.0/19.
  2. Buat jaringan VPC untuk GPUDirect-TCPX di project Anda, masing-masing dengan subnet dan aturan firewall:

    for N in $(seq 1 4); do
    gcloud compute networks create PROJECT_ID-net-$N \
        --subnet-mode=custom \
        --mtu=8244
    
    gcloud compute networks subnets create PROJECT_ID-sub-$N \
        --network=PROJECT_ID-net-$N \
        --region=REGION \
        --range=SUBNET_RANGE
    
    gcloud compute firewall-rules create PROJECT_ID-internal-$N \
      --network=PROJECT_ID-net-$N \
      --action=ALLOW \
      --rules=tcp:0-65535,udp:0-65535,icmp \
      --source-ranges=SOURCE_RANGE
    done
    

    Ganti kode berikut:

    • PROJECT_ID: Project ID 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 gunakan variabel untuk mengubah alamat IP setiap subnet. Misalnya, tentukan 192.168.$N.0/24 agar subnet pertama menggunakan 192.168.1.0/24, subnet kedua menggunakan 192.168.2.0/24, dst.
    • SOURCE_RANGE: Rentang alamat IP sumber bagi aturan firewall untuk mengizinkan traffic masuk, dalam notasi CIDR. Misalnya, 192.168.0.0/16.
  3. Pastikan jaringan telah dibuat:

    gcloud compute networks list
    

Membuat lingkungan GKE

Membuat cluster GKE baru yang menggunakan multijaringan (Pratinjau) dan membuat node pool GPU yang menggunakan mesin A3 dengan GPU H100 terpasang dan empat NIC tambahan. Anda tidak dapat mengupdate cluster yang ada untuk menggunakan multi-jaringan.

  1. Membuat cluster:

    gcloud container clusters create CLUSTER_NAME \
        --location=LOCATION \
        --cluster-version=VERSION \
        --enable-dataplane-v2 --enable-ip-alias \
        --enable-multi-networking \
        --no-enable-autoupgrade \
        --cluster-secondary-range-name=CLUSTER_NAME-pods \
        --services-secondary-range-name=CLUSTER_NAME-services
    

    Ganti kode berikut:

    • CLUSTER_NAME: nama cluster baru Anda
    • LOCATION: region Compute Engine untuk cluster
    • VERSION: versi GKE untuk cluster. Harus versi yang didukung seperti yang dijelaskan di bagian Persyaratan.

    Perintah ini juga secara eksplisit menentukan alamat IP sekunder untuk Pod dan Layanan untuk cluster yang Anda buat di bagian sebelumnya.

  2. 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: PROJECT_ID-net-1
      vpcSubnet: PROJECT_ID-sub-1
      deviceMode: NetDevice
    ---
    apiVersion: networking.gke.io/v1
    kind: GKENetworkParamSet
    metadata:
      name: vpc2
    spec:
      vpc: PROJECT_ID-net-2
      vpcSubnet: PROJECT_ID-sub-2
      deviceMode: NetDevice
    ---
    apiVersion: networking.gke.io/v1
    kind: GKENetworkParamSet
    metadata:
      name: vpc3
    spec:
      vpc: PROJECT_ID-net-3
      vpcSubnet: PROJECT_ID-sub-3
      deviceMode: NetDevice
    ---
    apiVersion: networking.gke.io/v1
    kind: GKENetworkParamSet
    metadata:
      name: vpc4
    spec:
      vpc: PROJECT_ID-net-4
      vpcSubnet: PROJECT_ID-sub-4
      deviceMode: NetDevice
    EOF
    

    Resource ini memberi tahu GKE agar mengonfigurasi NIC untuk traffic GPU dalam mode passthrough. GKE tidak menerapkan pemrograman jaringan bawaan menggunakan eBPF ke traffic ini.

  3. Buat kumpulan node 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=PROJECT_ID-net-1,subnetwork=PROJECT_ID-sub-1 \
        --additional-node-network=network=PROJECT_ID-net-2,subnetwork=PROJECT_ID-sub-2 \
        --additional-node-network=network=PROJECT_ID-net-3,subnetwork=PROJECT_ID-sub-3 \
        --additional-node-network=network=PROJECT_ID-net-4,subnetwork=PROJECT_ID-sub-4 \
        --enable-gvnic \
        --no-enable-autoupgrade \
        [--ephemeral-storage-local-ssd=count=16]
    

    Ganti NODE_POOL_NAME dengan nama node pool.

    Jika perintah ini gagal, Anda mungkin tidak memiliki cukup kuota GPU H100 dalam project. Pastikan Anda memiliki kuota dan coba lagi perintah tersebut.

  4. Dapatkan daftar node dalam cluster:

    kubectl get nodes
    
  5. Pastikan setiap node GPU memiliki delapan GPU:

    kubectl describe node NODE_NAME
    

    Outputnya mirip dengan hal berikut ini:

    Capacity:
      ...
      nvidia.com/gpu:             8
    Allocatable:
      ...
      nvidia.com/gpu:             8
    

Menginstal GPUDirect-TCPX dan mengonfigurasi NCCL

Bagian ini menunjukkan cara menginstal biner GPUDirect-TCPX dan NCCL tertentu menggunakan DaemonSet.

  1. Tinjau manifes DaemonSet:

    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
      name: nccl-tcpx-installer
      namespace: kube-system
      labels:
        k8s-app: nccl-tcpx-installer
    spec:
      selector:
        matchLabels:
          k8s-app: nccl-tcpx-installer
      updateStrategy:
        type: RollingUpdate
      template:
        metadata:
          labels:
            name: nccl-tcpx-installer
            k8s-app: nccl-tcpx-installer
        spec:
          priorityClassName: system-node-critical
          affinity:
            nodeAffinity:
              requiredDuringSchedulingIgnoredDuringExecution:
                nodeSelectorTerms:
                  - matchExpressions:
                      - key: cloud.google.com/gke-accelerator
                        operator: In
                        values:
                          - nvidia-h100-80gb
          tolerations:
            - operator: "Exists"
          hostNetwork: true
          hostPID: true
          volumes:
            - name: var-lib
              hostPath:
                path: /var/lib
            - name: tcpx
              hostPath:
                path: /var/lib/tcpx
            - name: library-dir-host
              hostPath:
                path: /home/kubernetes/bin
          initContainers:
            - image: us-docker.pkg.dev/gce-ai-infra/gpudirect-tcpx/nccl-plugin-gpudirecttcpx-dev:v3.1.9
              name: nccl-tcpx-installer
              resources:
                requests:
                  cpu: 150m
              securityContext:
                privileged: true
              volumeMounts:
                - name: var-lib
                  mountPath: /var/lib
                - name: library-dir-host
                  mountPath: /usr/local
              command: ["/bin/sh", "-c"]
              args:
                - |
                  set -ex
                  /scripts/container_entry.sh install --install-nccl
                  mkdir -p /usr/local/nvidia/lib64
                  cp -r /var/lib/tcpx/lib64/. /usr/local/nvidia/lib64
                  echo "installation finishes"
          containers:
            - image: "gcr.io/google-containers/pause:2.0"
              name: pause
    

    DaemonSet ini melakukan hal berikut:

    1. Menginstal library NCCL dan biner GPUDirect-TCPX pada node.
    2. 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.
  2. 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.

  3. 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 workload pengujian

Di bagian ini, Anda akan men-deploy sampel beban kerja untuk memverifikasi bahwa NCCL dan GPUDirect-TCPX berfungsi seperti yang diharapkan. Workload ini mencakup container file bantuan bernama tcpx-daemon, yang menjalankan layanan yang memungkinkan Pod menggunakan GPUDirect-TCPX. Anda harus menambahkan container file bantuan ini ke Pod apa pun di lingkungan Anda sendiri yang perlu menggunakan GPUDirect-TCPX. Untuk cuplikan kolom wajib yang akan ditambahkan ke manifes, lihat Menambahkan GPUDirect-TCPX ke manifes dalam dokumen ini.

  1. Tinjau nccl-config-default.yaml manifes ConfigMap di GitHub. Manifes ini men-deploy scrip yang menginisialisasi pengujian allgather NCCL dan menetapkan variabel lingkungan khusus NCCL.
  2. Tinjau manifes nccl-test.yaml di GitHub. Manifes ini melakukan hal berikut:

    1. Men-deploy dua Pod, yang masing-masing berjalan di node yang memiliki GPU H100.
    2. Men-deploy container file bantuan bernama tcpx-daemon di setiap Pod agar Pod tersebut dapat menggunakan GPUDirect-TCPX.
  3. Deploy ConfigMap dan workload pengujian:

    kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/gpudirect-tcpx/nccl-config-default.yaml
    kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/gpudirect-tcpx/nccl-test.yaml
    
  4. Jalankan perintah berikut untuk memicu pengujian pengumpulan lengkap NCCL untuk node:

    head_pod=$(kubectl get pods --output='custom-columns=POD:.metadata.name' --no-headers | head -n1)
    
    nodes=($(kubectl get pods --output='custom-columns=NODE:.spec.nodeName' --no-headers))
    
    kubectl exec --stdin --tty --container=nccl-test ${head_pod} -- /configs/allgather.sh ${nodes[@]}
    

    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 variabel lingkungan NCCL untuk meningkatkan performa

Anda dapat memilih untuk menetapkan variabel lingkungan tertentu guna meningkatkan performa workload yang menggunakan NCCL. ConfigMap nccl-config-default.yaml yang Anda deploy di bagian Men-deploy workload pengujian menetapkan beberapa variabel NCCL secara default. Konfigurasi variabel disimpan dalam skrip run-nccl.sh di ConfigMap.

Untuk mengubah variabel lingkungan NCCL, deploy manifes ConfigMap yang diupdate dengan variabel yang diubah. Manifes nccl-config-latest.yaml di GitHub berisi setiap variabel yang direkomendasikan dengan skrip run-nccl.sh yang telah diupdate.

Perintah berikut mengupdate ConfigMap yang ada dan memiliki variabel default dengan ConfigMap nccl-config-latest.yaml yang diupdate:

kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/gpudirect-tcpx/nccl-config-latest.yaml

Kubernetes memerlukan waktu sekitar dua menit untuk mengupdate ConfigMap.

Untuk memeriksa variabel lingkungan NCCL, jalankan perintah berikut:

head_pod=$(kubectl get pods --output='custom-columns=POD:.metadata.name' --no-headers | head -n1)

kubectl exec --stdin --tty --container=nccl-test ${head_pod} -- cat /configs/run-nccl.sh

Menambahkan GPUDirect-TCPX ke manifes Anda

Bagian ini menyediakan kolom wajib diisi yang harus Anda tambahkan ke manifes Kubernetes agar Pod dapat menggunakan GPUDirect-TCPX.

  1. Tambahkan kolom berikut ke spesifikasi Pod:

    spec:
      hostNetwork: true
      dnsPolicy: ClusterFirstWithHostNet
      volumes:
      - name: libraries
        hostPath:
          path: /home/kubernetes/bin/nvidia/lib64
      - name: tcpx-socket
        hostPath:
          path: /run/tcpx
    
  2. 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:
        privileged: true
      volumeMounts:
        - name: libraries
          mountPath: /usr/local/nvidia/lib64
        - name: tcpx-socket
          mountPath: /run/tcpx
      env:
        - name: LD_LIBRARY_PATH
          value: /usr/local/nvidia/lib64
    
  3. Tambahkan penyangga volume berikut ke container apa pun yang meminta GPU:

    volumeMounts:
    - name: tcpx-socket
      mountPath: /tmp
    - name: libraries
      mountPath: /usr/local/nvidia/lib64
    
  4. Tambahkan variabel lingkungan berikut ke setiap penampung GPU:

    env:
    - name: LD_LIBRARY_PATH
      value: /usr/local/nvidia/lib64
    
  5. Secara opsional, tambahkan variabel lingkungan untuk mengonfigurasi opsi NCCL. Untuk mengetahui detailnya, lihat bagian Menggunakan variabel lingkungan NCCL untuk meningkatkan performa dalam dokumen ini.

Spesifikasi Pod yang telah selesai akan terlihat seperti berikut:

apiVersion: v1
kind: Pod
metadata:
  name: example-pod
  labels:
    name: example-pod
spec:
  hostNetwork: true
  dnsPolicy: ClusterFirstWithHostNet
  containers:
  - 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:
      privileged: true
    volumeMounts:
      - name: libraries
        mountPath: /usr/local/nvidia/lib64
      - name: tcpx-socket
        mountPath: /run/tcpx
    env:
      - name: LD_LIBRARY_PATH
        value: /usr/local/nvidia/lib64
    - name: nccl-test
      image: us-docker.pkg.dev/gce-ai-infra/gpudirect-tcpx/nccl-plugin-gpudirecttcpx:v3.1.2
      imagePullPolicy: Always
      command:
        - /bin/sh
        - -c
        - "while true; do echo hello; sleep 1; done"
      env:
        - name: LD_LIBRARY_PATH
          value: /usr/local/nvidia/lib64
      volumeMounts:
        - name: tcpx-socket
          mountPath: /run/tcpx
        - name: libraries
          mountPath: /usr/local/nvidia/lib64
      resources:
        limits:
          nvidia.com/gpu: 8
  volumes:
    - name: libraries
      hostPath:
        path: /home/kubernetes/bin/nvidia/lib64
    - name: tcpx-socket
      hostPath:
        path: /run/tcpx