すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:ACK クラスターのコンテナネットワークを eRDMA で高速化

最終更新日:Jun 16, 2026

Pod で RDMA ネットワーキングを有効化し、NCCL 分散トレーニングや SMC-R による透過的な TCP 高速化を実現します。

ACK eRDMA Controller をインストールし、Pod で eRDMA 高速化を有効化します。このドキュメントでは、NCCL を使用した GPU 分散トレーニングと、SMC-R を使用した透過的な TCP 高速化の 2 つのシナリオについて説明します。

前提条件

以下をご確認ください:

仕組み

ACK eRDMA Controller は、クラスターノード上の eRDMA 対応 Elastic Network Interface (ENI) を管理します。eRDMA デバイスを aliyun/erdma 拡張リソースとして登録し、ENI ルートを設定し、Kubernetes のリソースリクエストを通じて Pod にデバイスを公開します。

Pod は、リソース制限で aliyun/erdma を宣言することで eRDMA へのアクセスをリクエストします。コードを変更せずに TCP 接続も高速化するには、Pod のアノテーションを通じて SMC-R を有効にします。

コンポーネント 役割
ACK eRDMA Controller eRDMA デバイスを拡張リソースとして登録し、ENI ルートを管理します
eRDMA ドライバー (default / compat / ofed) 各ノードにインストールされるカーネルレベルのドライバー
aliyun/erdma リソース Pod のデバイスアクセス用の Kubernetes 拡張リソース
SMC-R TCP を RDMA トランスポートに透過的に置き換える Linux プロトコル

ステップ 1:ACK eRDMA Controller のインストール

説明

ご利用のクラスターが Terway ネットワークプラグインを使用している場合は、Terway が eRDMA 対応 ENI を変更しないように、ENI のホワイトリストを設定してください。

  1. [クラスター] ページで、クラスター名をクリックし、[アドオン] をクリックします。

  2. [アドオン] ページで、[ネットワーク] タブをクリックします。 次の設定で ACK eRDMA Controller を検索してインストールします:

    説明

    ノードに複数の NIC がある場合、コントローラーは eRDMA ENI ルートに、同じ CIDR の NIC ルートよりも低い優先度を割り当てます。デフォルトの優先度は 200 です。手動で NIC ルートを設定する際は、この範囲との競合を避けてください。

    設定 説明
    preferDriver (ドライバータイプ) eRDMA ドライバーのモードです。default:標準の高速化。compat:RoCE 互換環境。ofed:NCCL を実行する GPU インスタンス。詳細については、「eRDMA の有効化」をご参照ください。
    ノードのすべての eRDMA デバイスを Pod に割り当てるかどうかを指定します True:ノード上のすべての eRDMA デバイスを Pod に割り当てます。False:NUMA トポロジーに基づいて 1 つのデバイスを割り当てます。False には静的 CPU 管理ポリシーが必要です。詳細については、「ノードプールの作成と管理」をご参照ください。
  3. コントローラーが実行中であることを確認します。[ワークロード] > [Pods] に移動し、名前空間を ack-erdma-controller に設定して、すべての Pod が実行中であることを確認します。

ステップ 2:Pod で eRDMA を有効化

ご利用の Pod の spec に以下の構成を追加して、eRDMA 高速化を有効にします。

eRDMA デバイスアクセスの有効化

コンテナのリソース制限で aliyun/erdma リソースを宣言します。

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

Pod の起動後、eRDMA デバイスが利用可能であることを確認します。

/# ls /dev/infiniband/
rdma_cm  uverbs0

SMC-R による透過的な TCP 高速化の有効化

SMC-R は、コードを変更することなく、RDMA を介して TCP 接続を透過的に高速化します。eRDMA デバイスアクセスを有効にした後、次のアノテーションを追加します。

metadata:
  annotations:
    network.alibabacloud.com/erdma-smcr: "true"
説明
  • TCP 接続の両端で SMC-R が有効になっている必要があります。

  • カーネルバージョン 5.10.134-17 以降の Alibaba Cloud Linux 3 でのみサポートされています。詳細については、「Alibaba Cloud Linux 3 イメージリリースノート」をご参照ください。

  • preferDriverofed または compat に設定されている場合はサポートされません。

  • eRDMA と SMC-R は IPv6 をサポートしていません。SMC-R は IPv6 接続の場合、TCP にフォールバックします。

ユースケース

GPU 分散トレーニングのための NCCL 通信の高速化

このシナリオは、分散トレーニングを実行する GPU コンピューティング型インスタンスで使用します。Pod は ofed ドライバーを使用し、GPU と eRDMA リソースをリクエストします。

  1. preferDriverofed に設定して ACK eRDMA Controller をインストールします。

  2. GPU ノードをノードプールに追加します。詳細については、「ノードプールの作成と管理」をご参照ください。

  3. ビルド時にコンテナイメージに eRDMA パッケージをインストールします。Debian または Ubuntu の場合 (ご利用の環境に合わせて {OS|ubuntu}{Version|focal} を置き換えてください):

    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 の場合:

    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. GPU アプリケーションをデプロイします。この StatefulSet は、それぞれ 8 つの GPU と 1 つの eRDMA デバイスを持つ 2 つのレプリカで nccl-test を実行します:

    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 を使用していることを確認します。ログに erdma_0erdma_1 がアクティブとして表示され、eRDMA による高速化が確認できます。

    image

SMC-R によるアプリケーションネットワークの透過的な高速化

このシナリオは、コードの変更なしで eRDMA 高速化が必要な標準的な TCP ワークロードで使用します。preferDriverdefault に設定します。

  1. preferDriverdefault に設定して ACK eRDMA Controller をインストールします。

  2. SMC-R アノテーションを付けてアプリケーションをデプロイします。この Deployment は、eRDMA デバイスアクセスと 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. 高速化を確認します。コンテナに 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

    SMCR in the Mode column confirms eRDMA acceleration is active. If it shows TCP, verify both client and server pods have the SMC-R annotation set to "true".

次のステップ