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

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

最終更新日:Dec 17, 2024

Elastic Remote Direct Memory Access (eRDMA) は、Alibaba Cloudが提供する低レイテンシ、高スループット、高性能、高度にスケーラブルなRDMAネットワークサービスです。 eRDMAは、第4世代のSHENLONGアーキテクチャとVirtual Private Cloud (VPC) に基づいて開発されています。 eRDMAはRDMAエコシステムと完全に互換性があり、Elastic Compute Service (ECS) インスタンス用の超大規模な包括的ネットワークを提供します。 このトピックでは、Container Service for Kubernetes (ACK) クラスターでeRDMAを設定および使用する方法について説明します。

前提条件

ACKクラスターが作成されます。 詳細については、「ACK管理クラスターの作成」をご参照ください。

ステップ1: ACK eRDMAコントローラのインストール

ACK eRDMAコントローラーをインストールするには、次の手順を実行します。

説明
  • ACKクラスターがTerwayを使用している場合、TerwayがeRDMA ENIを変更した場合に備えて、Terwayにelastic network interface (ENI) フィルターを設定します。 詳細については、「ENIフィルターの設定」をご参照ください。

  • ノードに複数のENIがある場合、ACK eRDMA Controllerは、デフォルトのルーティング優先度200を使用して、同じCIDRブロック内のENIのルートよりも優先度が低いeRDMAの追加ENIのルートを構成します。 ACK eRDMA Controllerのインストール後にENIを手動で設定する必要がある場合は、ルーティングの競合を回避してください。

  1. [クラスター] ページで、管理するクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、[操作] > [アドオン] を選択します。

  2. [アドオン] ページで、[ネットワーキング] タブをクリックし、[ACK eRDMAコントローラー] を見つけ、ページの指示に従ってコンポーネントの設定とインストールを行います

    パラメーター

    説明

    preferDriverドライバータイプ

    クラスターノードで使用されるeRDMAドライバーのタイプを選択します。 有効な値:

    • default: デフォルトのドライバーモード。

    • compat: RDMA over Converged Ethernet (RoCE) と互換性のあるドライバーモード。

    • ofed: GPUモデルに適用可能なofedベースのドライバーモード。

    ドライバーの種類の詳細については、「eRDMAの使用」をご参照ください。

    ノードのすべてのeRDMAデバイスをポッドに割り当てるかどうかを指定します

    有効な値:

    • True: このチェックボックスをオンにすると、ノード上のすべてのeRDMAデバイスがポッドに割り当てられます。

    • False: このチェックボックスをオンにしない場合、ポッドには非統一メモリアクセス (NUMA) トポロジに基づいてeRDMAデバイスが割り当てられます。 ノードの静的CPUポリシーを有効にして、NUMAをポッドとデバイスに確実に割り当てる必要があります。 CPUポリシーの設定方法の詳細については、「ノードプールの作成」をご参照ください。

    左側のナビゲーションウィンドウで、[ワークロード] > [ポッド] を選択します。 [ポッド] ページで、ack-erdma-controller名前空間を選択してポッドのステータスを表示し、コンポーネントが期待どおりに実行されるようにします。

ステップ2: eRDMAを使用してコンテナーネットワークを高速化

ACK eRDMA Controllerをインストールした後、次の構成を使用してポッドのeRDMAを有効にできます。

設定

設定方法

説明

eRDMAの有効化

ポッドのコンテナーリソースでaliyun/erdmaのリソース使用量を指定します。

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

ポッド内のaliyun /eRDMAのリソースを指定して、erdmaデバイスをポッドに割り当てます。

RDMAデバイスを割り当てた後、ポッド内の割り当てられたデバイスを表示できます。

/# ls /dev/infiniband/
rdma_cm  uverbs0

RDMAによる共有メモリ通信の有効化 (SMC-R)

eRDMAを有効にした後、network.alibabacloud.com/erdma-smcr: "true" アノテーションを指定して、ポッド内のTCP接続を高速化します。

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

SMC-Rを有効にすると、TCP接続の両端でSMC-Rを設定した場合にのみ、eRDMAアクセラレーションを使用できます。

ポッドにsmc-toolsをインストールし、smcssコマンドを実行して接続のアクセラレーションステータスを確認できます。

説明
  • この機能はAlibaba Cloud Linux 3でのみサポートされています。 カーネルのバージョンは5.10.134-17以降である必要があります。 詳細については、「Alibaba Cloud Linux 3のリリースノート」をご参照ください。

  • ofedまたはcompatがeRDMAドライバータイプとして選択されている場合、この機能はサポートされません。

  • Alibaba Cloud ERI eRDMAデバイスとSMCはIPv6アドレスをサポートしていません。 アプリケーションがIPv6を使用する場合、SMCはTCPにフォールバックします。

シナリオ1: GPUモデルはeRDMAを使用してNCCLを高速化

  1. 手順1: ACK eRDMAコントローラーのインストールに基づいてACK eRDMAコントローラーをインストールする場合、preferDriverパラメーターをofedに設定して、Nvidia Collective Communication Library (NCCL) を高速化します。

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

  3. アプリケーションコンテナイメージをビルドするときに、eRDMA関連のパッケージをインストールします。

    インストールされているeRDMA関連パッケージの表示

    # Debian or Ubuntu: Make sure that the OS name and version in sources.list are the same as those you use. 
    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
    
    # For Alibaba Cloud Linux or Red Hat Enterprise Linux (RHEL), specify the OS repository address in the yum.repos.d directory. 
    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. eRDMAがNCCLによって使用されていることを確認します。

    アプリケーションログでは、NCCLが使用する通信タイプとネットワークインターフェイスの数を確認できます。 例:

    image

    コマンド出力は、erdma_0およびerdma_1 eRDMAデバイスが高速化されていることを示します。

シナリオ2: SMC-Rを使用したアプリケーションネットワークの高速化

  1. 手順1: ACK eRDMAコントローラーのインストールに基づいてACK eRDMAコントローラーをインストールする場合は、preferDriverパラメーターをdefaultに設定して、通常の通信を高速化します。

  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. ポッド内のネットワーク接続のステータスを確認します。

    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が表示されます。これは、接続によってeRDMAが使用されていることを示します。