全部产品
Search
文档中心

Container Service for Kubernetes:Bekerja dengan penjadwalan GPU yang sadar topologi (edisi TensorFlow)

更新时间:Jul 02, 2025

Container Service for Kubernetes (ACK) mendukung penjadwalan GPU yang sadar topologi berdasarkan kerangka penjadwalan. Fitur ini memilih kombinasi GPU dari node yang dipercepat GPU untuk mencapai percepatan GPU optimal pada pekerjaan pelatihan. Dokumen ini menjelaskan cara menggunakan penjadwalan GPU yang sadar topologi untuk mencapai percepatan GPU optimal pada pekerjaan distribusi TensorFlow.

Prasyarat

Catatan penggunaan

  • Penjadwalan GPU yang sadar topologi hanya berlaku untuk pekerjaan Message Passing Interface (MPI) yang dilatih menggunakan kerangka distribusi.

  • Sumber daya yang diminta oleh pod harus memenuhi persyaratan tertentu sebelum pod dapat dibuat untuk mengirimkan dan menjalankan pekerjaan. Jika tidak, permintaan akan tetap menunggu sumber daya.

Prosedur

Konfigurasikan node

Jalankan perintah berikut untuk menetapkan label node dan mengaktifkan penjadwalan GPU yang sadar topologi secara eksplisit pada node:

kubectl label node <Nama Node Anda> ack.node.gpu.schedule=topology
Catatan

Setelah penjadwalan GPU yang sadar topologi diaktifkan pada node, penjadwalan GPU reguler tidak dapat diaktifkan. Untuk mengubah label dan mengaktifkan penjadwalan GPU reguler, jalankan perintah berikut:

kubectl label node <Nama Node Anda> ack.node.gpu.schedule=default --overwrite

Kirim pekerjaan

Kirim pekerjaan MPI dan atur --gputopology ke true.

arena submit --gputopology=true --gang ***

Contoh 1: Latih VGG16

Catatan

Kluster yang digunakan dalam contoh ini terdiri dari dua node. Setiap node menyediakan delapan GPU V100.

Gunakan penjadwalan GPU yang sadar topologi untuk melatih VGG16

  1. Jalankan perintah berikut untuk mengirim pekerjaan ke kluster:

    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. Jalankan perintah berikut untuk memeriksa status pekerjaan:

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

    Output yang Diharapkan:

    Name:      tensorflow-topo-4-vgg16
    Status:    RUNNINGNamespace: 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
  3. Jalankan perintah berikut untuk mencetak log pekerjaan:

    arena logs -f tensorflow-topo-4-vgg16

    Output yang Diharapkan:

    total images/sec: 991.92

Gunakan penjadwalan GPU reguler untuk melatih VGG16

  1. Jalankan perintah berikut untuk mengirim pekerjaan ke kluster:

    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. Jalankan perintah berikut untuk memeriksa 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
  3. Jalankan perintah berikut untuk mencetak log pekerjaan:

    arena logs -f tensorflow-4-vgg16

    Output yang Diharapkan:

    total images/sec: 200.47

Contoh 2: Latih ResNet50

Gunakan penjadwalan GPU yang sadar topologi untuk melatih ResNet50

  1. Jalankan perintah berikut untuk mengirim pekerjaan ke kluster:

    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. Jalankan perintah berikut untuk memeriksa 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. Jalankan perintah berikut untuk mencetak log pekerjaan:

    arena logs -f tensorflow-topo-4-resnet50

    Output yang Diharapkan:

    total images/sec: 1471.55

Gunakan penjadwalan GPU reguler untuk melatih ResNet50

  1. Jalankan perintah berikut untuk mengirim pekerjaan ke kluster:

    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. Jalankan perintah berikut untuk memeriksa 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. Jalankan perintah berikut untuk mencetak log pekerjaan:

    arena logs -f tensorflow-4-resnet50

    Output yang Diharapkan:

    total images/sec: 745.38

Perbandingan performa

Gambar berikut menunjukkan perbedaan performa antara penjadwalan GPU yang sadar topologi dan penjadwalan GPU reguler berdasarkan contoh-contoh sebelumnya.GPU31

Gambar tersebut menunjukkan bahwa setelah penjadwalan GPU yang sadar topologi diaktifkan, pekerjaan distribusi TensorFlow dipercepat.

Penting

Nilai performa dalam dokumen ini adalah nilai teoretis. Performa penjadwalan GPU yang sadar topologi bervariasi berdasarkan model dan lingkungan kluster Anda. Statistik performa aktual yang sebenarnya harus diutamakan. Anda dapat mengulangi langkah-langkah sebelumnya untuk mengevaluasi model Anda.