All Products
Search
Document Center

Container Service for Kubernetes:Terapkan penjadwalan GPU yang memperhatikan topologi untuk pekerjaan TensorFlow

Last Updated:Aug 21, 2026

ACK menggunakan Scheduling Framework untuk memilih kombinasi GPU optimal pada node yang sama dalam pelatihan terdistribusi TensorFlow, sehingga mengurangi overhead sinkronisasi lintas node dan meningkatkan throughput.

Prasyarat

Pastikan Anda telah:

Komponen Versi yang diperlukan Perintah pemeriksaan
Kubernetes 1.18.8 dan yang lebih baru kubectl version --short
driver NVIDIA 418.87.01 dan yang lebih baru nvidia-smi --query-gpu=driver_version --format=csv,noheader
NCCL (NVIDIA Collective Communications Library) 2.7 dan yang lebih baru python3 -c "import torch; print(torch.cuda.nccl.version())"
Sistem operasi CentOS 7.6, CentOS 7.7, Ubuntu 16.04, Ubuntu 18.04, Alibaba Cloud Linux 2, Alibaba Cloud Linux 3 cat /etc/os-release
GPU V100 nvidia-smi --query-gpu=name --format=csv,noheader
Penting

Lengkapi prasyarat secara berurutan: buat kluster ACK Pro, instal Arena, lalu instal add-on penjadwalan GPU yang memperhatikan topologi. Instalasi yang tidak sesuai urutan dapat gagal.

Batasan

Penjadwalan GPU yang memperhatikan topologi hanya berlaku untuk pekerjaan Message Passing Interface (MPI) yang menggunakan framework terdistribusi.

Penjadwalan GPU biasa hanya menetapkan GPU berdasarkan ketersediaan, tanpa mempertimbangkan topologi interkoneksi. Worker dapat ditempatkan pada GPU di node berbeda yang dihubungkan oleh jaringan lebih lambat, sehingga komunikasi antar-GPU menjadi bottleneck. Sebaliknya, penjadwalan yang memperhatikan topologi mengelompokkan worker pada GPU dalam satu node yang terhubung melalui NVLink, sehingga mengurangi latensi sinkronisasi gradien.

Pod hanya dibuat ketika semua sumber daya yang diminta tersedia (gang scheduling). Jika sumber daya tidak mencukupi, pekerjaan akan tetap dalam status pending hingga cukup GPU tersedia.

Konfigurasi node

Beri label pada node untuk mengaktifkan penjadwalan GPU yang memperhatikan topologi:

kubectl label node <your-node-name> ack.node.gpu.schedule=topology
Catatan

Penjadwalan yang memperhatikan topologi pada suatu node akan menonaktifkan penjadwalan GPU biasa untuk node tersebut. Untuk mengembalikan penjadwalan biasa, jalankan:

kubectl label node <your-node-name> ack.node.gpu.schedule=default --overwrite

Kirim pekerjaan

Kirim pekerjaan MPI dengan --gputopology=true dan --gang:

arena submit mpi --gputopology=true --gang <other-parameters>

Kedua flag wajib digunakan: --gputopology=true mengaktifkan pemilihan GPU yang memperhatikan topologi; --gang menerapkan gang scheduling agar semua worker dimulai bersamaan.

Contoh 1: Latih VGG16

Contoh ini menggunakan kluster dengan dua node, masing-masing memiliki delapan GPU V100.

Penjadwalan GPU yang memperhatikan topologi

  1. Kirim pekerjaan pelatihan:

    arena submit mpi \
      --name=tensorflow-topo-4-vgg16 \
      --gpus=1 \
      --workers=4 \
      --gang \
      --gputopology=true \
      --image=registry.cn-hangzhou.aliyuncs.com/kubernetes-image-hub/tensorflow-benchmark:tf2.3.0-py3.7-cuda10.1 \
      "mpirun --allow-run-as-root -np 4 -bind-to none -map-by slot -x NCCL_DEBUG=INFO -x NCCL_SOCKET_IFNAME=eth0 -x LD_LIBRARY_PATH -x PATH --mca pml ob1 --mca btl_tcp_if_include eth0 --mca oob_tcp_if_include eth0 --mca orte_keep_fqdn_hostnames t --mca btl ^openib python /tensorflow/benchmarks/scripts/tf_cnn_benchmarks/tf_cnn_benchmarks.py --model=vgg16 --batch_size=64 --variable_update=horovod"
  2. Periksa status pekerjaan:

    arena get tensorflow-topo-4-vgg16 --type mpijob

    Output yang diharapkan:

    Name:      tensorflow-topo-4-vgg16
    Status:    RUNNING
    Namespace: default
    Priority:  N/A
    Trainer:   MPIJOB
    Duration:  2m
    
    Instances:
      NAME                                    STATUS   AGE  IS_CHIEF  GPU(Requested)  NODE
      ----                                    ------   ---  --------  --------------  ----
      tensorflow-topo-4-vgg16-launcher-lmhjl  Running  2m   true      0               cn-shanghai.192.168.16.172
      tensorflow-topo-4-vgg16-worker-0        Running  2m   false     1               cn-shanghai.192.168.16.173
      tensorflow-topo-4-vgg16-worker-1        Running  2m   false     1               cn-shanghai.192.168.16.173
      tensorflow-topo-4-vgg16-worker-2        Running  2m   false     1               cn-shanghai.192.168.16.173
      tensorflow-topo-4-vgg16-worker-3        Running  2m   false     1               cn-shanghai.192.168.16.173

    Keempat worker berjalan pada satu node, berbagi bandwidth NVLink.

  3. Lihat log pelatihan:

    arena logs -f tensorflow-topo-4-vgg16

    Output yang diharapkan:

    total images/sec: 991.92

Penjadwalan GPU biasa

  1. Kirim pekerjaan tanpa flag topologi:

    arena submit mpi \
      --name=tensorflow-4-vgg16 \
      --gpus=1 \
      --workers=4 \
      --image=registry.cn-hangzhou.aliyuncs.com/kubernetes-image-hub/tensorflow-benchmark:tf2.3.0-py3.7-cuda10.1 \
      "mpirun --allow-run-as-root -np 4 -bind-to none -map-by slot -x NCCL_DEBUG=INFO -x NCCL_SOCKET_IFNAME=eth0 -x LD_LIBRARY_PATH -x PATH --mca pml ob1 --mca btl_tcp_if_include eth0 --mca oob_tcp_if_include eth0 --mca orte_keep_fqdn_hostnames t --mca btl ^openib python /tensorflow/benchmarks/scripts/tf_cnn_benchmarks/tf_cnn_benchmarks.py --model=vgg16 --batch_size=64 --variable_update=horovod"
  2. Periksa status pekerjaan:

    arena get tensorflow-4-vgg16 --type mpijob

    Output yang diharapkan:

    Name:      tensorflow-4-vgg16
    Status:    RUNNING
    Namespace: default
    Priority:  N/A
    Trainer:   MPIJOB
    Duration:  9s
    
    Instances:
      NAME                               STATUS   AGE  IS_CHIEF  GPU(Requested)  NODE
      ----                               ------   ---  --------  --------------  ----
      tensorflow-4-vgg16-launcher-xc28k  Running  9s   true      0               cn-shanghai.192.168.16.172
      tensorflow-4-vgg16-worker-0        Running  9s   false     1               cn-shanghai.192.168.16.172
      tensorflow-4-vgg16-worker-1        Running  9s   false     1               cn-shanghai.192.168.16.173
      tensorflow-4-vgg16-worker-2        Running  9s   false     1               cn-shanghai.192.168.16.172
      tensorflow-4-vgg16-worker-3        Running  9s   false     1               cn-shanghai.192.168.16.173

    Worker tersebar di dua node, sehingga setiap langkah sinkronisasi gradien memerlukan komunikasi lintas node.

  3. Lihat log pelatihan:

    arena logs -f tensorflow-4-vgg16

    Output yang diharapkan:

    total images/sec: 200.47

Contoh 2: Latih ResNet50

Penjadwalan GPU yang memperhatikan topologi

  1. Kirim pekerjaan pelatihan:

    arena submit mpi \
      --name=tensorflow-topo-4-resnet50 \
      --gpus=1 \
      --workers=4 \
      --gang \
      --gputopology=true \
      --image=registry.cn-hangzhou.aliyuncs.com/kubernetes-image-hub/tensorflow-benchmark:tf2.3.0-py3.7-cuda10.1 \
      "mpirun --allow-run-as-root -np 4 -bind-to none -map-by slot -x NCCL_DEBUG=INFO -x NCCL_SOCKET_IFNAME=eth0 -x LD_LIBRARY_PATH -x PATH --mca pml ob1 --mca btl_tcp_if_include eth0 --mca oob_tcp_if_include eth0 --mca orte_keep_fqdn_hostnames t --mca btl ^openib python /tensorflow/benchmarks/scripts/tf_cnn_benchmarks/tf_cnn_benchmarks.py --model=resnet50 --batch_size=64 --variable_update=horovod"
  2. Periksa status pekerjaan:

    arena get tensorflow-topo-4-resnet50 --type mpijob

    Output yang diharapkan:

    Name:      tensorflow-topo-4-resnet50
    Status:    RUNNING
    Namespace: default
    Priority:  N/A
    Trainer:   MPIJOB
    Duration:  8s
    
    Instances:
      NAME                                       STATUS   AGE  IS_CHIEF  GPU(Requested)  NODE
      ----                                       ------   ---  --------  --------------  ----
      tensorflow-topo-4-resnet50-launcher-7ln8j  Running  8s   true      0               cn-shanghai.192.168.16.172
      tensorflow-topo-4-resnet50-worker-0        Running  8s   false     1               cn-shanghai.192.168.16.173
      tensorflow-topo-4-resnet50-worker-1        Running  8s   false     1               cn-shanghai.192.168.16.173
      tensorflow-topo-4-resnet50-worker-2        Running  8s   false     1               cn-shanghai.192.168.16.173
      tensorflow-topo-4-resnet50-worker-3        Running  8s   false     1               cn-shanghai.192.168.16.173
  3. Lihat log pelatihan:

    arena logs -f tensorflow-topo-4-resnet50

    Output yang diharapkan:

    total images/sec: 1471.55

Penjadwalan GPU biasa

  1. Kirim pekerjaan tanpa flag topologi:

    arena submit mpi \
      --name=tensorflow-4-resnet50 \
      --gpus=1 \
      --workers=4 \
      --image=registry.cn-hangzhou.aliyuncs.com/kubernetes-image-hub/tensorflow-benchmark:tf2.3.0-py3.7-cuda10.1 \
      "mpirun --allow-run-as-root -np 4 -bind-to none -map-by slot -x NCCL_DEBUG=INFO -x NCCL_SOCKET_IFNAME=eth0 -x LD_LIBRARY_PATH -x PATH --mca pml ob1 --mca btl_tcp_if_include eth0 --mca oob_tcp_if_include eth0 --mca orte_keep_fqdn_hostnames t --mca btl ^openib python /tensorflow/benchmarks/scripts/tf_cnn_benchmarks/tf_cnn_benchmarks.py --model=resnet50 --batch_size=64 --variable_update=horovod"
  2. Periksa status pekerjaan:

    arena get tensorflow-4-resnet50 --type mpijob

    Output yang diharapkan:

    Name:      tensorflow-4-resnet50
    Status:    RUNNING
    Namespace: default
    Priority:  N/A
    Trainer:   MPIJOB
    Duration:  9s
    
    Instances:
      NAME                                  STATUS   AGE  IS_CHIEF  GPU(Requested)  NODE
      ----                                  ------   ---  --------  --------------  ----
      tensorflow-4-resnet50-launcher-q24hv  Running  9s   true      0               cn-shanghai.192.168.16.172
      tensorflow-4-resnet50-worker-0        Running  9s   false     1               cn-shanghai.192.168.16.172
      tensorflow-4-resnet50-worker-1        Running  9s   false     1               cn-shanghai.192.168.16.173
      tensorflow-4-resnet50-worker-2        Running  9s   false     1               cn-shanghai.192.168.16.172
      tensorflow-4-resnet50-worker-3        Running  9s   false     1               cn-shanghai.192.168.16.173
  3. Lihat log pelatihan:

    arena logs -f tensorflow-4-resnet50

    Output yang diharapkan:

    total images/sec: 745.38

Perbandingan performa

Throughput untuk pelatihan VGG16 dan ResNet50 dengan penjadwalan GPU yang memperhatikan topologi dan penjadwalan biasa:

GPU31
Model Memperhatikan Topologi (images/sec) Regular (images/second) Peningkatan
VGG16 991,92 200,47 ~4,9x
ResNet50 1471,55 745,38 ~2,0x
Penting

Nilai performa bersifat teoretis. Hasil aktual bervariasi tergantung model, konfigurasi kluster, dan kondisi jaringan. Jalankan contoh-contoh ini di kluster Anda untuk mengukur peningkatan yang diperoleh.

Langkah selanjutnya