在ACK集群中使用eRDMA加速容器网络

弹性RDMA(Elastic Remote Direct Memory Access,简称eRDMA)是阿里云提供的低延迟、大吞吐、高弹性的高性能RDMA网络服务。eRDMA是基于第四代神龙系统架构和云上VPC网络、100%兼容RDMA生态、提供超大规模网络部署的ECS普惠RDMA服务。本文介绍如何在ACK集群中配置和使用eRDMA。

前提条件

已创建ACK集群。请参见创建ACK托管集群

步骤一:安装ACK eRDMA Controller组件

您可以参见如下流程安装ACK eRDMA Controller组件。

说明
  • 如果您的集群网络插件为Terway,还需要配置Terway的网卡白名单,避免Terway组件修改eRDMA的网卡。配置方式,请参见为弹性网卡(ENI)配置白名单

  • 当节点存在多张网卡时,ACK eRDMA Controller 为附加的eRDMA网卡配置路由时,采用比同网段网卡路由更低的优先级,默认采用200的路由优先级,如果你在安装ACK eRDMA Controller后需要手动配置网卡,注意避免路由冲突。

  1. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择运维管理 > 组件管理

  2. 组件管理页面,单击网络页签,定位ACK eRDMA Controller组件,按照页面提示配置组件并完成安装

    配置项

    说明

    preferDriver 驱动类型

    选择集群节点上使用的eRDMA驱动类型。可选值:

    • default:默认驱动模式。

    • compat:兼容RoCE驱动模式。

    • ofed:基于ofed的驱动模式,适用于GPU机型。

    关于驱动类型的详细说明,请参见使用eRDMA

    是否为Pod分配节点全部eRDMA设备

    可选值:

    • True(勾选):为Pod分配节点上所有的eRDMA设备。

    • False(不勾选):Pod根据NUMA拓扑分配一个eRDMA设备。节点需要开启CPU Static Policy才能保证Pod和设备的固定NUMA分配。关于如何配置CPU Policy,请参见创建节点池

    安装完成后,您可以在左侧导航栏,选择工作负载 >容器组,然后选择命名空间为ack-erdma-controller,查看Pod运行状态,确认组件运行正常。

步骤二:使用eRDMA加速容器网络

安装ACK eRDMA Controller组件后,您可以在Pod使用下方配置来开启eRDMA加速。

配置

配置方式

说明

开启eRDMA

在Pod的容器资源中声明aliyun/erdma的资源占用。

spec:
  containers:
  - name: erdma-container
    resources:
      limits:
        aliyun/erdma: 1

通过在Pod资源中声明aliyun/erdma的资源,为Pod分配eRDMA的设备。

分配后,您可以在Pod中查看分配到的RDMA设备。

/# ls /dev/infiniband/
rdma_cm  uverbs0

开启SMC-R透明加速

在开启eRDMA的基础上,在Pod的Annotation中声明network.alibabacloud.com/erdma-smcr: "true",开启Pod中TCP连接的透明加速能力。

metadata:
  annotations:
    network.alibabacloud.com/erdma-smcr: "true"

在启用SMC-R的透明加速功能后,只有当TCP连接的两端都配置了SMC-R时,才能使用eRDMA的加速。

您可以在Pod中安装smc-tools工具,通过smcss命令检查连接的加速状态。

说明
  • 此功能仅支持Alibaba Cloud Linux3,且内核版本为5.10.134-17及以上。更多信息,请参见Alibaba Cloud Linux 3镜像发布记录

  • 驱动类型选择为ofedcompat时,不支持该选项。

  • 阿里云ERI eRDMA设备与SMC目前均不支持使用IPv6地址。如果应用层使用IPv6地址,会导致SMC回退到TCP协议栈。

场景示例一:GPU机型使用eRDMA加速NCCL通信

  1. 参见步骤一:安装ACK eRDMA Controller组件安装组件时,配置preferDriverofed,用于NCCL类型的通信。

  2. 在节点池中添加GPU节点。具体操作,请参见创建节点池

  3. 在应用容器镜像构建时安装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 --disablerepo=*  --enablerepo erdma -y libibverbs ibverbs-providers ibverbs-utils librdmacm
  4. 在集群中运行使用eRDMA的GPU应用,以nccl-test为例。

    展开查看使用eRDMA的GPU应用示例模板

    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: nccltest
    spec:
      selector:
        matchLabels:
          app: nccltest
      serviceName: "nccltest"
      replicas: 2
      template:
        metadata:
          labels:
            app: nccltest
        spec:
          hostNetwork: true 
          dnsPolicy: ClusterFirstWithHostNet
          containers:
          - env:
            - name: NCCL_SOCKET_IFNAME
              value: "eth0"
            - name: NCCL_DEBUG
              value: "INFO"
            - name: NCCL_IB_GID_INDEX
              value: "1"
            image: <nccl-test-image-with-erdma>
            imagePullPolicy: Always
            name: nccltest
            securityContext:
              privileged: true
            resources:
              limits:
                nvidia.com/gpu: "8"
                aliyun/erdma: "1"
              requests:
                nvidia.com/gpu: "8"
                aliyun/erdma: "1"
  5. 验证NCCL使用了eRDMA加速。

    您可以在应用日志中查看NCCL使用的通讯类型和使用的网卡数量。例如下图所示。

    image

    预期输出表明,已使用erdma_0erdma_1的eRDMA设备进行了加速。

场景示例二:使用SMC-R透明加速应用网络

  1. 参见步骤一:安装ACK eRDMA Controller组件安装组件时,配置preferDriverdefault,用于普通类型的通信加速。

  2. 参见下方示例代码,在集群中创建SMC-R加速的应用。

    展开查看使用SMC-R加速的应用示例模板

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: app-with-erdma
      name: app-with-erdma
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: app-with-erdma
      template:
        metadata:
          labels:
            app: app-with-erdma
          annotations:
            network.alibabacloud.com/erdma-smcr: "true"
        spec:
          containers:
          - image: <application image>
            imagePullPolicy: Always
            name: app-with-erdma
            resources:
              limits:
                aliyun/erdma: 1
  3. 查看Pod中网络连接的加速情况。

    您可以在容器中安装smc-tools,通过smcss的命令查看加速效果。

    /# smcss
    State          UID   Inode   Local Address           Peer Address            Intf Mode 
    ACTIVE         00000 0059964 172.17.192.73:47772     172.17.192.10:80        0000 SMCR

    预期输出表明,Mode中显示SMCR,表明已对这条连接进行了eRDMA加速。