大規模な AI アプリケーションでは、タスク間の効率的な通信が GPU パフォーマンスを最大化するための鍵となります。Alibaba Cloud Container Compute Service (ACS) は、低レイテンシー、高スループット、高弾力性を備えたパフォーマンス専有型の Remote Direct Memory Access (RDMA) ネットワークサービスを提供します。このトピックでは、パフォーマンス専有型 RDMA ネットワークでアプリケーションを実行する方法について説明します。
機能概要
TCP/IP プロトコルはネットワーク通信の標準であり、多くのアプリケーションがそれに基づいて構築されています。しかし、AI サービスの成長に伴い、アプリケーションにはより優れたネットワークパフォーマンスが求められるようになりました。TCP/IP プロトコルには、高いコピーオーバーヘッド、複雑なプロトコルスタック処理、複雑なフロー制御アルゴリズム、頻繁なコンテキストスイッチなどの制限があります。これらの問題により、TCP/IP ネットワークのパフォーマンスがアプリケーションのボトルネックになります。
RDMA はこれらの問題に対処します。ゼロコピーやカーネルバイパスなどの機能を使用して、データコピーとコンテキストスイッチを回避します。これにより、レイテンシーの短縮、スループットの向上、CPU 使用率の低減が実現します。
ACS では、Pod に alibabacloud.com/hpn-type: "rdma" ラベルを追加することで、RDMA ネットワーク上でアプリケーションを実行できます。RDMA ネットワークを有効にすると、RDMA ネットワークインターフェースカード (NIC) がコンテナーに追加されます。その後、NCCL 環境変数を構成して、ACS で分散トレーニングと推論を実行できます。
RDMA をサポートする GPU モデル
ACS は複数の GPU モデル をサポートしています。次の表に、パフォーマンス専有型 RDMA ネットワークをサポートする GPU モデルとその制約を示します。
カードモデル | compute-class | RDMA サポートの制約 | 対応する RDMA NIC タイプ |
GU8TF | gpu | 8 カード Pod のみが RDMA をサポートします。 | タイプ 1 |
GU8TEF | gpu | 8 カード Pod のみが RDMA をサポートします。 | タイプ 1 |
GX8SF | gpu | 8 カード Pod のみが RDMA をサポートします。 | タイプ 1 |
P16EN | gpu | 16 カード Pod のみが RDMA をサポートします。 | タイプ 2 |
gpu-hpn | 1、2、4、8、16 カード Pod が RDMA をサポートします。 |
RDMA NIC のタイプが異なると、以降のセクションで説明するように、必要な NCCL 環境変数の構成も異なります。
NCCL の構成
ACS の GPU モデルによって使用される RDMA NIC は異なります。これは NCCL の構成方法に影響します。ACS の GPU は 2 つの構成メソッドをサポートしています。
RDMA NIC タイプ 1 (GU8TF/GU8TEF/GX8SF)
export NCCL_SOCKET_IFNAME=eth0
export NCCL_IB_HCA=mlx5
export NCCL_DEBUG=INFORDMA NIC タイプ 2 (P16EN)
export NCCL_IB_DISABLE=1
export NCCL_SOCKET_IFNAME=eth0
export NCCL_IB_HCA=
export NCCL_DEBUG=INFO環境変数の説明
環境変数 | 環境変数 |
NCCL_SOCKET_IFNAME | NCCL が接続を確立するために使用するポート。ACS では、接続を確立するために eth0 を使用します。 |
NCCL_IB_DISABLE | IB/RoCE ネットワークを無効にして、代わりに IP ソケットを使用するかどうかを指定します。値が 1 の場合、IB/RoCE は無効になります。P16EN の場合は、これを 1 に設定する必要があります。 |
NCCL_IB_HCA | RDMA 通信用の NIC を指定します。P16EN の場合は、これを空に設定する必要があります。 |
NCCL_DEBUG | NCCL デバッグログの出力レベルを制御します。 |
ここで指定されていない他の環境変数の詳細については、「NCCL の公式ドキュメント」をご参照ください。
使用方法
以下の手順では、ACS クラスターで RDMA を使用して実行される GPU アプリケーションをデプロイする方法について説明します。
次の YAML コンテンツを含む dep-demo-hpn-gpu.yaml という名前のファイルを作成します。
apiVersion: apps/v1 kind: Deployment metadata: name: dep-demo-hpn-gpu labels: app: demo-hpn-gpu spec: replicas: 1 selector: matchLabels: app: demo-hpn-gpu template: metadata: labels: app: demo-hpn-gpu alibabacloud.com/compute-class: gpu alibabacloud.com/compute-qos: default # GPU モデルを GU8TF として指定します。必要に応じてこの値を変更してください。 alibabacloud.com/gpu-model-series: "GU8TF" alibabacloud.com/hpn-type: "rdma" spec: containers: - name: demo image: registry-cn-wulanchabu.ack.aliyuncs.com/acs/stress:v1.0.4 command: - "sleep" - "1000h" env: - name: NCCL_SOCKET_IFNAME value: "eth0" - name: NCCL_IB_HCA value: "mlx5" - name: NCCL_DEBUG value: "INFO" resources: requests: cpu: 128 memory: 512Gi nvidia.com/gpu: 8 limits: cpu: 128 memory: 512Gi nvidia.com/gpu: 8アプリケーションをデプロイします。
kubectl apply -f dep-demo-hpn-gpu.yamlアプリケーション Pod が
Running状態になるのを待ちます。kubectl get pod |grep dep-demo-hpn-gpu期待される出力:
dep-demo-hpn-gpu-5d9xxxxxb6-xxxxx 1/1 Running 0 25m16sパフォーマンス専有型ネットワーク NIC の情報を表示します。
kubectl exec -it deploy/dep-demo-hpn-gpu -- ifconfig | grep hpn -A 8期待される出力:
hpn0 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx inet6 addr: xxxx::x:xxxx:xxxx:xxx/xx Scope:Link inet6 addr: xxxx:xxx:xxx:x:x:xxxx:x:xxx/xxx Scope:Global UP BROADCAST RUNNING MULTICAST MTU:xxxx Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:xx errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:x (892.0 B)出力は、パフォーマンス専有型 NIC
hpn0が Pod に構成されていることを示しています。