全部產品
Search
文件中心

Container Service for Kubernetes:在ACK叢集上使用eRDMA

更新時間:Aug 09, 2024

彈性RDMA(Elastic Remote Direct Memory Access,簡稱eRDMA),是阿里雲提供的低延遲、大吞吐、高彈性的高效能RDMA網路服務。eRDMA是基於第四代神龍系統架構和雲上VPC網路、100%相容RDMA生態、提供超大規模網路部署的ECS普惠RDMA服務。本文介紹如何在ACK叢集中配置和使用eRDMA。

操作步驟

步驟一:建立節點池

eRDMA的節點需要特殊的配置,您需要使用獨立的節點池來配置。

  1. 登入Container Service管理主控台,在左側導覽列選擇叢集

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇節點管理 > 節點池

  3. 節點池頁面,單擊右上方的建立節點池

    下表介紹主要配置項。關於其他配置項的詳細資料,請參見建立節點池

    配置項

    說明

    作業系統

    配置為Alibaba Cloud Linux 3.x。

    期望節點數

    配置節點數量為0,後續手動添加節點。

    (建議)CPU Policy

    單擊顯示進階選項,選擇Static啟用CPU管理原則。

步驟二:添加eRDMA節點

配置eRDMA機器

不同機型物理網卡的配額不同,從而eRDMA的配額、頻寬和配置方式也不一樣。

機型的物理網卡配額可以通過執行個體規格類型系列文檔中找到,絕大多數機型無特殊標識的只有一張物理網卡。配置方式如下。

單物理網卡機型

  1. 建立ECS執行個體。

    1. 登入雲端服務器控制台,在左側導覽列選擇概覽

    2. 概覽頁面,單擊建立執行個體

      下表介紹主要配置項。關於其他配置項的詳細資料,請參見Elastic Compute Service快速入門

      配置項

      說明

      網路及可用性區域

      需要選擇ACK叢集所在的專用網路。

      執行個體

      需要選擇支援eRDMA的執行個體規格類型系列。更多資訊,請參見執行個體規格類型系列

      彈性網卡

      選中彈性RDMA介面。

多物理網卡機型

  1. 建立ECS執行個體。

    1. 登入雲端服務器控制台,在左側導覽列選擇概覽

    2. 概覽頁面,單擊建立執行個體

      下表介紹主要配置項。關於其他配置項的詳細資料,請參見Elastic Compute Service快速入門

      配置項

      說明

      網路及可用性區域

      需要選擇ACK叢集所在的專用網路。

      執行個體

      需要選擇支援eRDMA的多物理網卡執行個體規格類型系列。更多資訊,請參見執行個體規格類型系列

  2. 為節點額外建立和綁定多張eRDMA網卡。

    1. 建立節點支援的物理網卡數量的eRDMA網卡,建立時勾選增加彈性RDMA介面選項。具體操作,請參見建立輔助彈性網卡

    2. 綁定建立的多個eRDMA網卡到eRDMA的每個節點上,具體操作,請參見綁定輔助彈性網卡

  3. 如果叢集為Terway網路,需要配置Terway的網卡白名單,避免Terway組件修改eRDMA的網卡。配置方式,請參見為彈性網卡(ENI)配置白名單

將eRDMA機器加入節點池

  1. 將建立的ECS執行個體添加到節點池中。

    1. 登入Container Service管理主控台,在左側導覽列選擇叢集

    2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇節點管理 > 節點池

    3. 節點池頁面,單擊目標節點池右側操作列下的更多,然後單擊添加已有節點

    4. 選擇已有雲端服務器執行個體配置項頁面,選擇手動添加已有雲端服務器執行個體。具體操作,請參見手動添加節點

  2. 在每個節點上安裝最新版本的eRDMA驅動。

步驟三:運行應用

  1. 在Dockerfile中增加eRDMA庫安裝,並重新構建應用程式容器鏡像,以便鏡像中的應用能夠使用eRDMA,您可以使用如下命令進行操作。

    # Debian或者Ubuntu: 注意sources.list中的OS名和版本與實際使用的版本設定為一致。
    wget -qO - https://mirrors.aliyun.com/erdma/GPGKEY | apt-key add - && echo "deb [ arch=amd64 ] https://mirrors.aliyun.com/erdma/apt/{OS|ubuntu} {Version|focal}/erdma main" | tee /etc/apt/sources.list.d/erdma.list && apt update && apt install -y libibverbs1 ibverbs-providers ibverbs-utils librdmacm1
    
    # Alibaba Cloud Linux或者rhel:按照OS找到對應的repo目錄,配置到yum.repos.d目錄中。
    cat > /etc/yum.repos.d/erdma.repo <<EOF
    [erdma]
    name = ERDMA Repository
    baseurl = http://mirrors.aliyun.com/erdma/yum/redhat/7/erdma/x86_64/
    gpgcheck = 0
    enabled = 1
    EOF
    yum install -y ethtool groff-base hwdata libnl3 pciutils
    sudo yum install libibverbs rdma-core librdmacm libibverbs-utils -y --disablerepo=* --enablerepo="erdma"                        
  2. 設定應用運行模式。

    您需要對Pod的相關參數進行設定。

  3. 使用如下YAML部署Tensorflow樣本應用。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: netperf
      name: netperf
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: netperf
      template:
        metadata:
          labels:
            app: netperf
        spec:
          hostNetwork: true
          containers:
          - command:
            - bash
            - -c
            - sleep 360000
            image: registry-vpc.cn-beijing.aliyuncs.com/wangbs/tftest
            imagePullPolicy: Always
            name: netperf
            resources:
              limits:
                cpu: "10"
              requests:
                cpu: "10"
            securityContext:
              privileged: true
  4. 運行應用並進行測試。

    1. 執行如下命令,並記錄Pod的IP地址。

      kubectl get pod -o wide

      預期輸出:記錄IP

    2. 建立兩個進程,其中一個為PS,一個為Worker。將記錄的IP填寫到命令列參數中。

      PS:PSWorker:Worker預期輸出如下,您可以看到Tensorflow樣本應用的計算速度。

      # Worker
      CUDA_VISIBLE_DEVICES= python benchmarks/scripts/tf_cnn_benchmarks/tf_cnn_benchmarks.py \
        --ps_hosts=172.18.XX.XX:9100\
        --worker_hosts=172.18.XX.XX:9200 \
        --job_name=worker \
        --task_index=0 \
        --server_protocol=grpc+verbs \
        --variable_update=parameter_server \
        --local_parameter_device=cpu \
        --model=resnet50 \
        --device=cpu \
        --batch_size=16 \
        --data_format=NHWC
      
      # PS
      CUDA_VISIBLE_DEVICES= python benchmarks/scripts/tf_cnn_benchmarks/tf_cnn_benchmarks.py \
        --ps_hosts=172.18.XX.XX:9100\
        --worker_hosts=172.18.XX.XX:9200 \
        --job_name=ps \
        --local_parameter_device=cpu \
        --task_index=0 \
        --device=cpu \
        --data_format=NHWC \
        --server_protocol=grpc+verbs