全部產品
Search
文件中心

Container Service for Kubernetes:使用GPU拓撲感知調度(Tensorflow版)

更新時間:Jun 19, 2024

ACK基於Scheduling Framework機制,實現GPU拓撲感知調度,即在節點的GPU組合中選擇具有最優訓練速度的組合。本文介紹如何使用GPU拓撲感知調度來提升Tensorflow分布式訓練的訓練速度。

前提條件

  • 已建立ACK Pro叢集,且叢集的執行個體規格類型選擇為GPU雲端服務器。更多資訊,請參見建立Kubernetes託管版叢集

  • 已安裝Arena

  • 已安裝GPU拓撲感知調度組件

  • 系統組件版本滿足以下要求。

    組件

    版本要求

    Kubernetes

    1.18.8及以上版本

    Nvidia

    418.87.01及以上版本

    訓練架構NCCL版本

    2.7+

    作業系統

    • CentOS 7.6

    • CentOS 7.7

    • Ubuntu 16.04

    • Ubuntu 18.04

    • Alibaba Cloud Linux 2

    • Alibaba Cloud Linux 3

    顯卡

    V100

注意事項

  • 僅支援MPI作業的分布式訓練。

  • 只有當提交作業的所有Pod對資源請求都滿足條件時,才能建立Pod並啟動作業,否則請求會處於資源等待狀態。

操作步驟

節點配置

執行以下命令,設定節點Label,顯式啟用節點GPU拓撲感知調度。

kubectl label node <Your Node Name> ack.node.gpu.schedule=topology
說明

當節點啟用GPU拓撲感知調度後,不再支援普通GPU資源調度。可執行以下命令更改Label,恢複普通GPU資源調度功能。

kubectl label node <Your Node Name> ack.node.gpu.schedule=default --overwrite

提交作業

提交MPI作業,並設定--gputopologytrue

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

樣本一:訓練Vgg16

說明

本樣本測試叢集有2台8卡V100機器。

使用GPU拓撲感知調度訓練Vgg16

  1. 執行以下命令,向叢集提交作業。

    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. 執行以下命令,查看當前作業運行情況。

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

    預期輸出:

    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. 執行以下命令,查看當前日誌資訊。

    arena logs -f tensorflow-topo-4-vgg16

    預期輸出:

    total images/sec: 991.92

使用普通GPU調度訓練Vgg16

  1. 執行以下命令,向叢集提交作業。

    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. 執行以下命令,查看當前作業運行情況。

    arena get tensorflow-4-vgg16 --type mpijob

    預期輸出:

    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. 執行以下命令,查看當前日誌資訊。

    arena logs -f tensorflow-4-vgg16

    預期輸出:

    total images/sec: 200.47

樣本二:訓練Resnet50

使用GPU拓撲感知調度訓練Resnet50

  1. 執行以下命令,向叢集提交作業。

    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. 執行以下命令,查看當前作業運行情況。

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

    預期輸出:

    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. 執行以下命令,查看當前日誌資訊。

    arena logs -f tensorflow-topo-4-resnet50

    預期輸出:

    total images/sec: 1471.55

使用普通GPU調度訓練Resnet50

  1. 執行以下命令,向叢集提交作業。

    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. 執行以下命令,查看當前作業運行情況。

    arena get tensorflow-4-resnet50 --type mpijob

    預期輸出:

    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. 執行以下命令,查看當前日誌資訊。

    arena logs -f tensorflow-4-resnet50

    預期輸出:

    total images/sec: 745.38

效能對比

基於以上4個測試案例效能對比結果如下:GPU31

基於對比圖,可知經過GPU拓撲感知調度後,Tensorflow分布式訓練的效果有了很大的提升。

重要

本文提供的效能資料僅為理論值,GPU拓撲感知調度提升結果與您使用的模型以及叢集的環境有一定關係,實際資料以您的作業環境為準。您可以參考上述使用樣本,評測自己的模型。