全部產品
Search
文件中心

Container Compute Service:使用高效能網路RDMA運行應用

更新時間:Jul 24, 2025

在大規模的AI計算應用中,需要考慮任務間的通訊效率,以充分發揮GPU算力的效能。阿里雲Container Compute Service (ACS)提供了低延遲、大吞吐、高彈性的高效能RDMA(Remote Direct Memory Access)網路服務。本文為您介紹如何使用高效能網路RDMA運行應用。

功能簡介

傳統的TCP/IP協議一直是業界主流的網路通訊協定,許多應用都是基於此構建的。然而,隨著AI相關業務的蓬勃發展,應用對網路效能的需求日益增加。受限於TCP/IP的一些局限性,如拷貝開銷大、協議棧處理複雜、流量控制演算法複雜以及頻繁的環境切換等,TCP/IP的網路通訊效能已成為應用效能提升的瓶頸。

RDMA針對這些問題提供瞭解決方案。與TCP/IP相比,RDMA實現了零拷貝和核心旁路等特性,避免了資料拷貝和頻繁的環境切換,從而實現了更低的延遲、更高的輸送量和更低的CPU佔用。

ACS支援為Pod添加alibabacloud.com/hpn-type: "rdma"的標籤,讓應用運行在RDMA網路中。啟用RDMA網路後,使用者在容器中能夠看到對應的RDMA網卡。結合NCCL環境變數配置,即可以在ACS上完成分布式訓練和推理。

支援RDMA的GPU型號列表

ACS支援多種GPU型號,目前支援高效能網路RDMA的GPU型號以及使用約束如下。

卡型

compute-class

支援RDMA約束

對應的RDMA網卡類型

GU8TF

gpu

僅8卡Pod支援RDMA

類型1

GU8TEF

gpu

僅8卡Pod支援RDMA

類型1

GX8SF

gpu

僅8卡Pod支援RDMA

類型1

P16EN

gpu

僅16卡Pod支援RDMA

類型2

gpu-hpn

1/2/4/8/16卡Pod支援RDMA

不同的RDMA網卡類型在NCCL環境變數的配置上會有所差異,下文展開。

NCCL配置說明

不同的GPU卡型在ACS上對應的RDMA網卡存在差異,這些差異最終會體現到NCCL相關的配置上,當前ACS GPU提供的算力中有兩種配置方式。

RDMA網卡類型1(GU8TF/GU8TEF/GX8SF

export NCCL_SOCKET_IFNAME=eth0 
export NCCL_IB_HCA=mlx5
export NCCL_DEBUG=INFO

RDMA網卡類型2(P16EN

export NCCL_IB_DISABLE=1 
export NCCL_SOCKET_IFNAME=eth0 
export NCCL_IB_HCA= 
export NCCL_DEBUG=INFO

環境變數說明

環境變數

環境變數說明

NCCL_SOCKET_IFNAME

NCCL選擇建聯的連接埠,ACS上推薦使用eth0建立串連。

NCCL_IB_DISABLE

配置NCCL是否要關閉IB/RoCE網路的使用,而改為使用IP Socket,配置為1的時候代表關閉,P16EN必須配置為1。

NCCL_IB_HCA

指定RDMA通訊的網卡,P16EN必須配置為空白。

NCCL_DEBUG

控制NCCL調試資訊日誌的輸出等級。

其他未特別說明的環境變數參見NCCL官方文檔

使用方式

以下將在ACS叢集中部署一個使用RDMA啟動並執行GPU應用。

  1. 使用以下YAML內容,建立dep-demo-hpn-gpu.yaml檔案。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: dep-demo-hpn-gpu
      labels:
        app: demo-hpn-gpu
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: demo-hpn-gpu
      template:
        metadata:
          labels:
            app: demo-hpn-gpu
            alibabacloud.com/compute-class: gpu
            alibabacloud.com/compute-qos: default
            # 指定GPU型號為GU8TF,請按實際情況填寫
            alibabacloud.com/gpu-model-series: "GU8TF"        
            alibabacloud.com/hpn-type: "rdma"
        spec:
          containers:
          - name: demo
            image: registry-cn-wulanchabu.ack.aliyuncs.com/acs/stress:v1.0.4
            command:
            - "sleep"
            - "1000h"
            env:
            - name: NCCL_SOCKET_IFNAME
              value: "eth0"
            - name: NCCL_IB_HCA
              value: "mlx5"
            - name: NCCL_DEBUG
              value: "INFO"
            resources:
              requests:
                cpu: 128
                memory: 512Gi
                nvidia.com/gpu: 8
              limits:
                cpu: 128
                memory: 512Gi
                nvidia.com/gpu: 8
  2. 部署應用。

    kubectl apply -f dep-demo-hpn-gpu.yaml
  3. 等待應用Pod狀態變為Running

    kubectl get pod |grep dep-demo-hpn-gpu

    預期輸出:

    dep-demo-hpn-gpu-5d9xxxxxb6-xxxxx   1/1     Running   0          25m16s
  4. 查看高效能網路網卡資訊。

    kubectl exec -it deploy/dep-demo-hpn-gpu -- ifconfig | grep hpn -A 8 

    預期輸出:

    hpn0      Link encap:Ethernet  HWaddr xx:xx:xx:xx:xx:xx  
              inet6 addr: xxxx::x:xxxx:xxxx:xxx/xx Scope:Link
              inet6 addr: xxxx:xxx:xxx:x:x:xxxx:x:xxx/xxx Scope:Global
              UP BROADCAST RUNNING MULTICAST  MTU:xxxx  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:xx errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000 
              RX bytes:0 (0.0 B)  TX bytes:x (892.0 B)

    可以看到,Pod中已經配置了高效能網卡hpn0