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

Container Service for Kubernetes:ACKクラスターでのeRDMAの使用

最終更新日:Oct 31, 2024

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

手順

ステップ1: ノードプールの作成

ノードに対してeRDMAを有効にするには、別のノードプールを使用する必要があります。

  1. ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。

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

  3. の右上隅にノードプールページをクリックします。ノードプールの作成.

    次の表に、主要なパラメーターを示します。 その他のパラメーターの詳細については、「ノードプールの作成」をご参照ください。

    パラメーター

    説明

    オペレーティングシステム

    Alibaba Cloud Linux 3.xを選択します。

    期待されるノード

    値を 0 に設定します。 ノードプールの作成後にノードを追加できます。

    CPUポリシー (推奨)

    [詳細オプションの表示] をクリックし、[静的] を選択します。

ステップ2: eRDMA拡張ECSインスタンスの追加

eRDMA強化ECSインスタンスの設定

ECSインスタンスでサポートされているネットワークカードのクォータは、ECSインスタンスタイプによって異なります。 したがって、ECSインスタンスタイプは、eRDMAクォータ、帯域幅、および設定手順に影響します。

[インスタンスファミリーの概要] を参照して、さまざまなインスタンスタイプのネットワークカードクォータを表示できます。 ほとんどのインスタンスタイプは、1つのネットワークカードのみをサポートします。 eRDMA拡張ECSインスタンスを設定するには、次の手順を実行します。

1つのネットワークカードのみをサポートするインスタンスタイプ

  1. ECSインスタンスを作成します。

    1. ECSコンソールにログインします。 左側のナビゲーションウィンドウで、[概要] をクリックします。

    2. [概要] タブで、[インスタンスの作成] をクリックします。

      次の表に、主要なパラメーターを示します。 その他のパラメーターの詳細については、「クイックスタート」をご参照ください。

      パラメーター

      説明

      ネットワークとゾーン

      ACKクラスターのVPCを選択します。

      インスタンス

      eRDMAをサポートするインスタンスタイプを選択します。 詳細は、「インスタンスファミリー」をご参照ください。

      ENI

      [eRDMAインターフェイス] を選択します。

複数のネットワークカードをサポートするインスタンスタイプ

  1. ECSインスタンスを作成します。

    1. ECSコンソールにログインします。 左側のナビゲーションウィンドウで、[概要] をクリックします。

    2. On the概要タブをクリックします。インスタンスの作成.

      次の表に、主要なパラメーターを示します。 その他のパラメーターの詳細については、「クイックスタート」をご参照ください。

      パラメーター

      説明

      ネットワークとゾーン

      ACKクラスターのVPCを選択します。

      インスタンス

      eRDMAと複数のネットワークカードをサポートするインスタンスタイプを選択します。 詳細は、「インスタンスファミリー」をご参照ください。

  2. 複数のeRDMA ENIを作成し、ECSインスタンスにバインドします。

    1. ECSインスタンスでサポートされているネットワークカードの数と同じ数のelastic network Interface (ENI) を作成します。 ENIの作成時に [Elastic RDMA Interface] を選択します。 詳細については、「セカンダリENIの作成」をご参照ください。

    2. eRDMA ENIを各eRDMA拡張ECSインスタンスにバインドします。 詳細については、「セカンダリENIのバインド」をご参照ください。

  3. ACKクラスターがTerwayを使用している場合は、TerwayがeRDMA ENIを変更した場合にTerway ENIフィルターを設定します。 詳細については、「ENIフィルターの設定」をご参照ください。

eRDMA拡張ECSインスタンスをノードプールに追加する

  1. ECSインスタンスをノードプールに追加します。

    1. ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。

    2. [クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、[ノード] > [ノードプール] を選択します。

    3. On theノードプールページをクリックします。もっとで、アクションノードプールの列をクリックし、既存のノードを追加.

    4. [既存のECSインスタンスの選択] ウィザードページで、ECSインスタンスを手動で追加します。 詳細については、「既存のECSインスタンスをACKクラスターに追加する」をご参照ください。

  2. 各ECSインスタンスに最新のeRDMAドライバーをインストールします。

ステップ3: アプリケーションを実行する

  1. Dockerfileを変更して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
    
    # Alibaba Cloud Linux or rhel: Find the yum.repos.d directory and create a file named erdma.repo. 
    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. アプリケーションポッドを実行するモードを設定します。

    アプリケーションのポッドパラメーターを設定します。

  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. アプリケーションを実行してeRDMAをテストします。

    1. 次のコマンドを実行し、ポッドのIPアドレスを記録します。

      kubectl get pod -o wide

      期待される出力: 记录IP

    2. PSとWorkerという名前の2つのプロセスを作成します。 次のコマンドでポッドの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