このドキュメントでは、高性能なコンテナーネットワーク通信を実現するために、ACK マネージドクラスター Pro の Lingjun ノード上で Remote Direct Memory Access (RDMA) を設定して使用する方法について説明します。RDMA テクノロジーは、ネットワーク遅延を大幅に削減し、スループットを向上させるため、高性能計算 (HPC)、AI トレーニング、分散ストレージなど、高いネットワークパフォーマンスを必要とするシナリオに適しています。
RDMA の概要
Remote Direct Memory Access (RDMA) は、従来のネットワーク伝送におけるサーバー側のデータ処理の遅延に対処するために設計された高性能なネットワーク通信テクノロジーです。RDMA を使用すると、どちらのコンピューターのオペレーティングシステムも介さずに、あるコンピューターのメモリから別のコンピューターのメモリにデータを直接転送できます。このメカニズムにより、高スループット、低遅延のネットワーク通信が可能になり、大規模な並列計算クラスターに特に適しています。
RDMA は、オペレーティングシステムをバイパスして、ネットワーク経由でターゲットコンピューターのメモリにデータを直接転送します。このプロセスは、最小限の処理能力しか消費せず、メモリレプリケーションとコンテキストスイッチングのオーバーヘッドを削減します。その結果、メモリ帯域幅と CPU サイクルが節約され、アプリケーションのパフォーマンスが向上します。
前提条件
Kubernetes では、Pod は 2 つのネットワークパターンをサポートしています:
独立 IP パターン: Pod は独自の IP アドレスを持ちます (非 hostNetwork モード)。
共有ネットワークパターン: Pod はホストノードのネットワークを直接使用します (hostNetwork モード)。
非 hostNetwork モードの Pod で RDMA 機能を使用するには、次の条件を満たす必要があります:
Lingjun ノードをホストする Lingjun ベアメタルクラスターのコンピューティングネットワークは IPv6 を使用する必要があります。
Lingjun ベアメタルクラスターを作成するときに IPv6 モードを選択する必要があります。
Lingjun ベアメタルクラスターの作成方法と IPv6 のサポートに関する詳細については、チケットを起票 して Lingjun チームにお問い合わせください。
手順
RDMA Device Plugin コンポーネントをインストールします。
クラスター ページで、管理するクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、[アドオン] をクリックします。
[コンポーネント管理] ページで、[ネットワーク] タブをクリックします。RDMA Device Plugin コンポーネントを見つけ、プロンプトに従ってインストールします。
設定項目
説明
非 hostNetwork モードの Pod の RDMA を有効にする
非 hostNetwork モードの Pod の RDMA を有効にするかどうかを選択します。有効な値:
False (クリア): hostNetwork モードの Pod のみが RDMA ネットワークを使用できます。True (選択済み): 非 hostNetwork モードの Pod が RDMA ネットワークを使用できるようにします。このオプションを有効にする前に、ACK クラスターに関連付けられている Lingjun ベアメタルクラスターが IPv6 を使用していることを確認してください。そうでない場合、RDMA 設定は有効になりません。
RDMA が有効になっている各 Lingjun ノード で RDMA Device Plugin が正しく実行されていることを確認します。
kubectl get ds ack-rdma-dp-ds -n kube-system期待される出力:
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE ack-rdma-dp-ds 2 2 2 2 2 <none> xxhノードに
rdma/hcaリソースがあるかどうかを確認します。kubectl get node e01-cn-xxxx -oyaml期待される出力:
... allocatable: cpu: 189280m ephemeral-storage: "3401372677838" hugepages-1Gi: "0" hugepages-2Mi: "0" memory: 2063229768Ki nvidia.com/gpu: "8" pods: "64" rdma/hca: 1k capacity: cpu: "192" ephemeral-storage: 3690725568Ki hugepages-1Gi: "0" hugepages-2Mi: "0" memory: 2112881480Ki nvidia.com/gpu: "8" pods: "64" rdma/hca: 1k ...次の YAML ファイルを適用して
rdma/hcaリソースをリクエストします。これにより、Pod は RDMA 機能を使用できます。rdma/hca: 1のリクエストで十分です。RDMA Device Plugin コンポーネントで非 hostNetwork モードの Pod の RDMA を有効にしなかった場合、
hostNetwork: trueを持つ Pod のみが RDMA 機能を使用できます。
apiVersion: batch/v1 kind: Job metadata: name: hps-benchmark spec: parallelism: 1 template: spec: containers: - name: hps-benchmark image: ** command: - sh - -c - | python /workspace/wdl_8gpu_outbrain.py resources: limits: nvidia.com/gpu: 8 rdma/hca: 1 workingDir: /root volumeMounts: - name: shm mountPath: /dev/shm securityContext: capabilities: add: - SYS_RESOURCE - IPC_LOCK restartPolicy: Never volumes: - name: shm emptyDir: medium: Memory sizeLimit: 8Gi hostNetwork: true tolerations: - operator: Exists