Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

ジュニパーRDMA対応ロードバランシング(LB)およびBGP-DPF - GPUバックエンドファブリックの実装

このセクションでは、ジュニパーRDMA対応ロードバランシング(LB)とBGP-DPFを実装するための設定の詳細について説明します。このセクションで紹介するすべての設定例と検証例は、以下の例に基づいています。

図1:実装例 Implementation Example

IPv6 SLAAC(ステートレスアドレス自動設定)を使用したGPUサーバーとリーフノードの接続

GPUサーバーは、「 バックエンドGPUレール最適化ストライプアーキテクチャ 」セクションで説明したように、レールアライメントされたアーキテクチャに従って接続されます。すべてのサーバー上のGPU 0が最初のリーフノードに接続され、すべてのサーバー上のGPU 1が2番目のリーフノードに接続されます。これを 図2に示します。

図2:GPUサーバーからリーフノードへのレールアライメント接続 GPU Servers to Leaf Nodes Rail-Aligned Connectivity

サーバーとリーフ ノード間の接続は L2 VLAN ベースで、リーフ ノード上の IRB がサーバーのデフォルト ゲートウェイとして機能します。

図3:IRBインターフェイスのIRB Interface Example

サーバーとリーフノードを接続する物理インターフェイスは、ファミリーイーサネットスイッチングで設定され、関連するIRBがL3インターフェイスとしてVLANにマッピングされます。

例:

以下の例は、 サーバー 1サーバー 2 の stripe1-leaf1 と gpu0_eth インターフェイス間の接続設定を示しています。スイッチの irb.2 インターフェイスは、4 つの /64 IPv6 アドレスで設定されています。

  • fd00:1:1:1::1/64、
  • fd00:1:1:2::1/64、
  • fd00:1:1:3::1/64および
  • fd00:1:1:4::1/64です。

これらのプレフィックスは、サーバー1とサーバー2の両方にアドバタイズされます。

IPv6アドレスがirb.2インターフェイスに正しく割り当てられていること、およびIPv6アドレスが適切なVLANに関連付けられていることを、以下のコマンドを使用して確認できます。

サーバーSLAAC設定:

NVIDIA GPU サーバー上のインターフェイスを設定するには、「NVIDIA 設定」の手順に従ってください 。ジュニパーネットワークスネットプランにDHCPv6を無効にするステートメントが含まれていることを確認する必要があります。

サーバー上のインターフェイスを IPv6 アドレスで設定したり、IPv6 を明示的に有効にしたりする必要はありません。DHCPv6を無効にするだけで十分です。

例:

以下は、ネットプランの例です。これらの例を使用して、すべてのサーバーのアドレスを設定するためのテンプレートを作成できます。

注:

gpu#_ethインターフェイスでIPv4が有効になっていないことを確認します。

また、ルーターアドバタイズメント(RA)によるIPv6アドレスの自動設定を機能させるには、RAメッセージを受信して処理するようにサーバーを設定する必要があります。ほとんどの場合、これはデフォルトで有効になっていますが、設定手順を以下に説明します。

設定には2つのレイヤーがあります。

  1. NetplanまたはsystemdのインターフェイスレベルRAポリシー
  2. カーネルレベルのsysctlパラメーター(accept_ra、autoconf)

適切なRA動作を確保するには、両方を揃える必要があります。

  • システムが systemd-networkd (Ubuntu Server で共通) を備えた Netplan を使用している場合:

Netplan YAMLファイル(例:/etc/netplan/01-netcfg.yaml)で、各インターフェイスの下に以下を追加します。

次に、変更を適用します。

これにより、Netplan は IPv6AcceptRA=yes を使用して systemd-networkd の .network ファイルをレンダリングし、RA ベースの自動設定を有効にします。

しかし、これだけでは十分ではありません。カーネルがまだRAを無視するように設定されている場合。また、カーネルが実行時に RA を受け入れるように設定されていることも確認する必要があります。以下を使用して確認できます。

値が 0 の場合、Netplan の設定に関係なく RA は無視されます。これは、以下で一時的に修正できます。

sudo sysctl -w net.ipv6.conf.<interface>.accept_ra=1

再起動しても永続的にするには、sysctl 設定ファイル(例:/etc/sysctl.d/99-accept-ra.conf)に以下を追加します。

そして、それを適用します:

注:

accept-raなどのパラメーターは、グローバルに、またはインターフェイスごとに有効または無効にすることができます。

表1:IPv6設定のパラメーター
SYSCTL スコープ 効果
net.ipv6.conf.all.accept_ra グローバル(現在のすべてのインターフェイス) 既存のすべてのインターフェイスにすぐに適用されますが...forwarding=1 の場合読み取り専用
net.ipv6.conf.default.accept_ra グローバル(将来のインターフェイス用) 新しいインターフェイスが立ち上がったとき(たとえば、プラグインされたときや後で作成されたとき)に使用されるデフォルト値を設定します
net.ipv6.conf.gpu0_eth.accept_ra インターフェイス単位 特定のアクティブインターフェイスのRA処理を制御します
  • インターフェイスがカーネルによって直接管理されている場合(Netplan/systemdを使用していない場合):

以下を設定して、RAの受け入れと自動構成を有効にします。

リーフノードSLAAC設定

SLAACを有効にするには、GPUサーバーに面したインターフェイスでリーフノードをIPv6アドレスで設定する必要があります。

例:

IPv6アドレスを設定した後、例に示すように、プロトコルルーターアドバタイズメントですべてのプレフィックスのアドバタイズを有効にする必要があります。

注:

特定のプレフィックスに対してルーターアドバタイズを設定するには、ルーターアドバタイズメントが設定されているインターフェイスで、同じプレフィックス内のIPv6アドレスを設定する必要があります。ルーターアドバタイズメントで設定したプレフィックスがインターフェイス下でも設定されていない場合、設定をコミットする際にエラーが返されます。

例:

以下の表は、各リーフノードの各irbインターフェイスのプレフィックスとIPアドレスをまとめたものです。

サブ サブ サブ
表2:IPV6アドレス割り当て
  IRB VLAN サブネット1 IRB IPアドレス1ネット2 IRB IPアドレス2ネット3 IRB IPアドレス3ネット4 IRB IPアドレス4 GPUインターフェイス
ストライプ 1 リーフ 1 1 2 fc00:1:1:1:/64 fc00:1:1:1::1 fc00:1:1:2::/64 fc00:1:1:2::1 fc00:1:1:3::/64 fc00:1:1:3::1 fc00:1:1:4::/64 fc00:1:1:4::1 gpu0_eth
ストライプ 1 リーフ 2 2 3 fc00:1:2:1::/64 fc00:1:2:1::1 fc00:1:2:2::/64 fc00:1:2:2::1 fc00:1:2:3::/64 fc00:1:2:3::1 fc00:1:2:4::/64 fc00:1:2:4::1 gpu1_eth
ストライプ 1 リーフ 3 3 4 fc00:1:3:1::/64 fc00:1:3:1::1 fc00:1:3:2::/64 fc00:1:3:2::1 fc00:1:3:3::/64 fc00:1:3:3::1 fc00:1:3:4::/64 fc00:1:3:4::1 gpu2_eth
ストライプ 1 リーフ 4 4 5 fc00:1:4:1::/64 fc00:1:4:1::1 fc00:1:4:2::/64 fc00:1:4:2::1 fc00:1:4:3::/64 fc00:1:4:3::1 fc00:1:4:4::/64 fc00:1:4:4::1 gpu3_eth
ストライプ 1 リーフ 5 5 6 fc00:1:5:1::/64 fc00:1:5:1::1 fc00:1:5:2::/64 fc00:1:5:2::1 fc00:1:5:3::/64 fc00:1:5:3::1 fc00:1:5:4::/64 fc00:1:5:4::1 gpu4_eth
ストライプ 1 リーフ 6 6 7 fc00:1:6:1:/64 fc00:1:6:1::1 fc00:1:6:2::/64 fc00:1:6:2::1 fc00:1:6:3::/64 fc00:1:6:3::1 fc00:1:6:4::/64 fc00:1:6:4::1 gpu5_eth
ストライプ 1 リーフ 7 7 8 fc00:1:7:1:/64 fc00:1:7:1::1 fc00:1:7:2::/64 fc00:1:7:2::1 fc00:1:7:3::/64 fc00:1:7:3::1 fc00:1:7:4::/64 fc00:1:7:4::1 gpu6_eth
ストライプ 1 リーフ 8 8 9 fc00:1:8:1::/64 fc00:1:8:1::1 fc00:1:8:2::/64 fc00:1:8:2::1 fc00:1:8:3::/64 fc00:1:8:3::1 fc00:1:8:4::/64 fc00:1:8:4::1 gpu7_eth
ストライプ 2 リーフ 1 9 10 fc00:2:1:1::/64 fc00:2:1:1::1 fc00:2:1:2::/64 fc00:2:1:2::1 fc00:2:1:3::/64 fc00:2:1:3::1 fc00:2:1:4::/64 fc00:2:1:4::1 gpu0_eth
ストライプ2リーフ2 10 11 fc00:2:2:1::/64 fc00:2:2:1::1 fc00:2:2:2:/64 fc00:2:2:2::1 fc00:2:2:3::/64 fc00:2:2:3::1 fc00:2:2:4::/64 fc00:2:2:4::1 gpu1_eth
ストライプ2リーフ3 11 12 fc00:2:3:1::/64 fc00:2:3:1::1 fc00:2:3:2::/64 fc00:2:3:2::1 fc00:2:3:3:/64 fc00:2:3:3::1 fc00:2:3:4::/64 fc00:2:3:4::1 gpu2_eth
ストライプ2リーフ4 12 13 fc00:2:4:1::/64 fc00:2:4:1::1 fc00:2:4:2::/64 fc00:2:4:2::1 fc00:2:4:3::/64 fc00:2:4:3::1 fc00:2:4:4::/64 fc00:2:4:4::1 gpu3_eth
ストライプ 2 リーフ 5 13 14 fc00:2:5:1::/64 fc00:2:5:1::1 fc00:2:5:2:/64 fc00:2:5:2::1 fc00:2:5:3::/64 fc00:2:5:3::1 fc00:2:5:4::/64 fc00:2:5:4::1 gpu4_eth
ストライプ 2 リーフ 6 14 15 fc00:2:6:1::/64 fc00:2:6:1::1 fc00:2:6:2:/64 fc00:2:6:2::1 fc00:2:6:3::/64 fc00:2:6:3::1 fc00:2:6:4::/64 fc00:2:6:4::1 gpu5_eth
ストライプ2リーフ7 15 16 fc00:2:7:1::/64 fc00:2:7:1::1 fc00:2:7:2::/64 fc00:2:7:2::1 fc00:2:7:3::/64 fc00:2:7:3::1 fc00:2:7:4::/64 fc00:2:7:4::1 gpu6_eth
ストライプ 2 リーフ 8 16 17 fc00:2:8:1::/64 fc00:2:8:1::1 fc00:2:8:2:/64 fc00:2:8:2::1 fc00:2:8:3::/64 fc00:2:8:3::1 fc00:2:8:4::/64 fc00:2:8:4::1 gpu7_eth

SLAAC検証:

RAベースの設定が機能し、GPUインターフェイスがIPv6アドレスを自動設定し、対応するルートをインストールしていることを確認するには、以下のコマンドを使用します。

動的またはmngtmpaddrとしてマークされたSLAAC形式(プレフィックス::EUI-64)のグローバルinet6アドレスが表示されます。また、インターフェイスのリンクローカルアドレス(FE80::EUI-64)も取得します

例:

また、以下を使用して受信 RA メッセージを監視することもできます。

例:

場合によっては、特に RA 設定を変更した後、または静的構成と動的構成を切り替えた後、アドレスの再割り当てをトリガーするためにインターフェイスをリセットする必要がある場合があります。

インターフェイスを元に戻した後、数秒待ってから、IPv6アドレスを再確認します。

これにより、古いアドレスが削除され、新しいRAが処理されます。

注:

すべてのIPv6設定は、 /proc/sys/net/ipv6/conf にあります。

ルーターアドバタイズメントが送信されていることを確認するには、次のコマンドを使用できます。show ipv6 router-advertisement interface <interface>

例:

また、以下を使用して、インターフェイス上のルーターアドバタイズパケットをキャプチャすることもできます。

例:

ルーターアドバタイズメントは、送信元としてのリーフノードインターフェイスのリンクローカルアドレス、ipv6全ノードマルチキャストアドレス(FF02::1)、ネクストヘッダーICMPv6(58)を使用して送信されます。以下は、これらに最も関連性の高い属性です。

表3:IPv6ルーターアドバタイズプレフィックス情報のフィールドとセマンティクス
パラメータ の説明
フラグ オンリンク, 自動

ホストは、このプレフィックスのアドレスがローカルリンク上にあると見なすことができます。

このプレフィックスは、 SLAAC (ステートレスアドレス自動設定)に使用できます。

有効期間 2592000 プレフィックスは30日間有効です(到達可能性に使用)。
優先ライフタイム 604800 7日間の推奨ライフタイム(その後、新しい接続では非推奨になります)。
ルーターの寿命 1800年代 ルーターは1800秒間デフォルトゲートウェイと見なされます

ルーターアドバタイズを受信した後、サーバーのNICインターフェイスは、表4に示すように、リーフノードによるプレフィックスアドバタイズと、EUI-64アドレス形式(インターフェイスのMACアドレスに基づく)を使用して計算されたアドレスのホスト部分を連結して、IPv6アドレスを自動設定します。

表4:GPUからリーフノードまでのIPv6アドレス
リーフノードインターフェイス

リーフノードIPv6

住所

GPU NIC

GPU NIC

MACアドレス

GPU NIC IPv6

住所

ストライプ1、リーフ1 - et-0/0/16:0

fc00:1:1:1::1

fc00:1:1:2::1

fc00:1:1:3::1

fc00:1:1:4::1

サーバー1 - gpu0_eth a0:88:c2:3b:50:66

fc00:1:1:1:a288:c2ff:fe3b:5066

fc00:1:1:2:a288:c2ff:fe3b:5066

fc00:1:1:3:a288:c2ff:fe3b:5066

fc00:1:1:4:a288:c2ff:fe3b:5066

ストライプ1リーフ1 - et-0/0/16:1

fc00:1:1:2::1

fc00:1:2:2::1

fc00:1:3:2::1

fc00:1:4:2::1

サーバー2 - gpu0_eth 58:a2:e1:46:c6:ca

fc00:1:1:2:a288:c2ff:fe3b:506a

fc00:1:2:2:a288:c2ff:fe3b:506a

fc00:1:3:2:a288:c2ff:fe3b:506a

fc00:1:4:2:a288:c2ff:fe3b:506a

ストライプ 1、リーフ 1 - et-0/0/17:0

fc00:1:1:3::1

fc00:1:2:3::1

fc00:1:3:3::1

fc00:1:4:3::1

サーバー3 - gpu0_eth a0:88:c2:3b:50:6e

fc00:1:1:3:a288:c2ff:fe3b:506e

fc00:1:2:3:a288:c2ff:fe3b:506e

fc00:1:3:3:a288:c2ff:fe3b:506e

fc00:1:4:3:a288:c2ff:fe3b:506e

.

.

.

       

IPv6ネイバーディスカバリを使用したBGP DPF(Deterministic Path Forwarding)

このセクションでは、IPv6ネイバーディスカバリを使用して、リーフとスパインノード間のピアリングセッションを自動的に確立するようにBGPを設定する方法と、決定論的パッチフォワーディングを有効にする方法について説明します。これには、他のBGP設定パラメーターも含まれています。

BGP自動検出

リーフとスパインノード間の各接続は異なるファブリックカラーにマッピングする必要があり、BGPは自動検出用に設定されているため、ネイバーごとに個別のBGPグループが必要です。これにより、動的に検出された各ピアが正しいカラーに関連付けられます。

各BGPグループは外部BGPセッションとして設定され、ローカルAS番号が割り当てられます。

:

A screenshot of a computer AI-generated content may be incorrect.

BGPピアの自動検出を有効にするために、各グループには、検出が許可されるインターフェイスを指定する動的ネイバーテンプレートが含まれています。これは、静的ピアに使用されていた従来のネイバーa.b.c.d設定に置き換わります。自動検出は、peer-auto-discoveryおよびipv6-ndオプションを使用して有効にします。

:

A screen shot of a computer AI-generated content may be incorrect.

これにより、JunosはIPv6ネイバーディスカバリーを使用して、ネイバーアドレスを動的に決定できます。

ピア形成を安全にするために、各グループは peer-as-list ステートメントを使用して定義された AS 範囲を参照します。これにより、AS番号が一致するネイバーのみがBGPセッションを確立できるようになります。リスト自体は、ポリシーオプションで定義されています。

自動検出は、リーフノードとスパインノードの両方で有効にする必要があります。

:

A screenshot of a computer AI-generated content may be incorrect.

各グループには、ポリシーオプションでBGPコミュニティとして定義されるファブリックカラーも割り当てられます。

ここで、<community-name> = <color>

A screenshot of a computer AI-generated content may be incorrect.

IPv6 NLRIのサポート

IPv6ルートのアドバタイズメントは、以下を使用してリーフノードとスパインノードの両方で有効にする必要があります。

ECMP マルチパス

BGPマルチパスは、保護されたパスを介したECMP(等価コストマルチパス)ルーティングを許可するように設定し、複数のスパインアップリンク間でロードバランシングとフェイルオーバーの両方を確保する必要があります。これは、以下を使用して実現されます。

BGPマルチパスは、リーフノードとスパインノードの両方で設定する必要があります。

BFD(双方向フォワーディング検出)

BFDは、以下を使用して障害検出時間を短縮するように構成されています。

表6:BFDオプション
オプションの 説明

最小間隔

(必須)

ローカルデバイスから送信されたBFD Helloパケットとネイバーから予想されるパケットの間の最小時間(ミリ秒単位)。

範囲:1-255,000

推奨値:1000

乗数

(オプション)

発信元インターフェイスがダウンと宣言する原因となったネイバーによって受信されなかったHelloパケットの数。

範囲:1-255

推奨:3(デフォルト)

BFDは、リーフノードとスパインノードの両方で設定する必要があります。

DPF(決定論的パスフォワーディング)

IPv6 SLAACを使用したGPUサーバーからリーフノードへの接続セクションで説明されているように、リーフノードは、ルーターアドバタイズメント(RA)を介してGPUサーバーにアドバタイズされるのと同じ個々の/64 IPv6プレフィックスをアドバタイズするように設定する必要があります

プレフィックスは、fabric-advertiseステートメントを使用してアドバタイズされます。

注:

fabric-advertiseコマンドは、リーフノードでのみ必要です。

colorオプションは、プレフィックスが<color>に一致するBGPピアにアドバタイズされるように指定します。プレフィックスは、<color>に関連付けられたコミュニティ値でタグ付けされ、AIGP属性が0に設定されてアドバタイズされます。backup-colorオプションは、プレフィックスが<backup-color>に一致するBGPピアにアドバタイズされるように指定します。アドバタイズされたプレフィックスには、ピアに関連付けられたコミュニティ値でタグ付けされますが、AIGP属性は付与されません。

例:

図5:プレフィックスfc00:1:1:1::/64アドバタイズメント Prefix fc00:1:1:1::/64 Advertisements

以下のコマンドは、各BGPピア(つまり、リーフノードに設定された場合は各SPINEノード)にファブリックカラーを割り当てます。

A screenshot of a computer AI-generated content may be incorrect.

プレフィックス(fc00:1:1:1:/64)を優先パス上でアドバタイズしてそのプレフィックスに到達し、プレフィックスに緑色を割り当てるには、以下のコマンドを使用します。

注:

正しいプレフィックスが設定されていることを確認します。コミットエラーは生成されませんが、プレフィックスはアドバタイズされません。

これにより、プレフィックスfc00:1:1:1::/64が スパイン1にアドバタイズされます。プレフィックスに割り当てられた色(緑)はピアの色(スパイン1)と一致するため、ルートは コミュニティカラー:0:1 (緑)でアドバタイズされ、 AIGP属性が含まれ、優先パスとしてマークされます。

他のすべてのパス(バックアップパス)に同じプレフィックスをアドバタイズするには、以下のコマンドを使用します。

これにより、プレフィックスが 残りのすべてのスパインにアドバタイズされ、それぞれに対応するカラーコミュニティ(青、赤、オレンジ)でタグ付けされます。プレフィックスに割り当てられた色(緑)がピア(スパイン2、3、4)の色と一致しないため、これらのアドバタイズメントには AIGP属性が含まれず、優先度が低くなります。

以下の表は、プレフィックスfc00:1:1:1::/64のルーティングアドバタイズをまとめたものです。

表:プレフィックス fc00:1:1:1:/64 のコミュニティと AIGP

前の例では、単一のプレフィックスがすべてのスパインノードにアドバタイズされ、1 つのスパインのみが優先パスを示す AIGP 属性を持つルートを受信する方法を示しました。

以下の表は、stripe1-leaf1(4)によってすべてのスパインノードにアドバタイズされたすべてのプレフィックスをまとめたものです。各プレフィックスについて、次のように表示されます。

  • 目的のパスに割り当てられた色。
  • タグ付けに使用されるBGPコミュニティ(color:0:X)。
  • AIGP属性が含まれているかどうか(優先パスのみ)。

表:コミュニティとAIGPスパインごと、プレフィックスごとの例

A screenshot of a computer AI-generated content may be incorrect.

例:

A computer screen shot of a computer code AI-generated content may be incorrect.

注:

ネイバーが静的に設定されている場合、fabric-colorはneighborステートメントの直下で設定できるため、単一のBGPグループを持つことができます。

スパインへのルート再アドバタイズの防止

irb インターフェイスに関連付けられたプレフィックスのみをアドバタイズするようにリーフ ノードを設定し、一方のスパインから他方のスパインピアに学習したルートがアドバタイズされないようにするには、エクスポート ポリシーがすべてのBGPグループに適用されます。これにより、リーフがスパインツースパイントラフィックの非トランジットノードとして機能し、ファブリック内の適切なルーティングが維持されます。

このポリシーは、プレフィックス長が16ビット以上のルート一致プレフィックスfc00::/16およびfd00::16に一致し、エクスポート時に拒否します。アドバタイズする追加のIPv6アドレスは、プレフィックスリスト ローカルに追加できます。

このポリシーがなければ、リーフノードは1つのスパインノードから学習したプレフィックスを他のすべてのノードに再アドバタイズし、望ましくないルーティング動作や、異なるパス間での非効率的なトラフィック分散につながる可能性があります。

さらに、ルートにはコミュニティローカルのタグが付けられます。スパインノードはこれを使用して、プレフィックスがリーフノードに返送されないようにします。

BGPセッションの自動検出とDPF検証

セッションが確立されたことは、 show bgp summary コマンドを使用して確認できます。

リンクローカルアドレスを使用してBGPセッションを確立すると、Junosはネイバーアドレスとインターフェイススコープを表示します(例: fe80::5a86:70ff:fe78:e0d5%et-0/0/1:0.0)。同じリンクローカルアドレス(fe80::/10)が複数のインターフェイスに存在する可能性があるため、スコープ識別子(%の後の部分)が必要です。デバイスは、そのネイバーにパケットを送信するために どのインターフェイス を使用すればよいかを知っている必要があります。したがって、ピア検出が完了した後、 show bgp summary 出力は次の形式を使用してネイバーを一覧表示します。 IPv6_link-local_address%interface-name

以下の例に示すように、 show bgp summary autodiscovered を使用して、検出されたネイバーのステータスをすばやく確認できます。

ファブリックカラーに基づいて特定のネイバーのステータスを検証できます。

プレフィックスがすべてのピアに正しくアドバタイズされていることを確認するには、 show route advertising-protocol bgp <peer-address>を使用します。

この例では、fe80::9e5a:80ff:feef:a28f%et-0/0/0:0.0はスパイン1のアドレスです。

したがって、すべてのプレフィックスはコミュニティカラー:0:1(緑)でアドバタイズされます。fc00:1:1:1::/64も同じカラーで設定されているため、AIGP属性でアドバタイズされます。同じプレフィックスが他のスパインにもアドバタイズされますが、AIGP値は含まれません。fe80::5a86:70ff:fe78:e0d5%et-0/0/1:0.0は、スパイン2のアドレスです。

fe80::5a86:70ff:fe7b:ced5%et-0/0/2:0.0は、スパイン3のアドレスです。

fe80::5a86:70ff:fe79:3d5%et-0/0/3:0.0は、スパイン4のアドレスです。

ジュニパーNCCLプラグイン

ジュニパーNCCLネットプラグインは、各RDMAインターフェイスの各キューペア(QP)に一意のIPv6アドレスを割り当てます。これにより、QPフローは異なる送信元アドレスと宛先アドレスを使用し、ファブリックはそれらを別々のパスに沿って転送することができます。この動作をサポートするには、プラグインとそのサポートライブラリをインストールし、サーバーからリーフノードへ、またはその逆の両方で各IPv6アドレスが適切に転送されるように、追加のルーティング情報を使用してサーバーを設定する必要があります。

サーバーへのプラグインのインストール

ジュニパー NCCLネットプラグインは、圧縮タールボール(juniper-ib_2.23.4-1.tar.gz)として配布されており、...

インストールするには、tar-ballをルートディレクトリに解凍します。

$ tar -xzvf juniper-ib_0.0.5.tar.gz -C /

表7:主要な設置コンポーネント
コンポーネントの 説明/使用法
/usr/local/lib/libnccl-net-juniper-ib.so NCCL ネットワーク・プラグイン共有オブジェクト
/usr/local/bin/jnpr-fabric-topo-gen ファブリックトポロジーjsonファイルを生成するためのスクリプト
/usr/local/bin/jnpr-AI-LB-dpf-config-gen AI-LB DPF 設定を生成するためのスクリプト
/usr/local/bin/jnpr-nccl-net-setup GPUサーバーのネットワーク設定を構成するためのツール
/usr/local/bin/gids.py GIDを検索するためのヘルパーモジュール
/usr/local/bin/jnpr-rdma-ping RDMA接続テスト用ツール
/usr/local/bin/jnpr-find-gids GIDを見つけるためのツール。

GPUサーバーでルーティングパラメーターを設定する

GPUサーバーでは、インターフェイスに割り当てられた各IPv6アドレスを 個別のルーティングテーブルに関連付ける必要があります。このテーブルには、正しいデフォルトゲートウェイを介してトラフィックを転送するための適切な ルート が含まれています。逆に、特定のIPv6アドレスごとに送信される受信トラフィックを対応するルーティングテーブルに誘導するには、 IPルール を作成する必要があります。

そのため、RDMAロードバランシング(RLB)用のNCCLプラグインを使用してサーバーが正しく動作するように設定する場合、インターフェイスごとに割り当てられたIPv6アドレスの数(前述のアップリンク数に基づく)にNIC数を掛けた数のルーティングテーブルを作成する必要があります。

図 6 に示す例では、各インターフェイスに 4 つの IPv6 アドレスが割り当てられており、合計 32 個のルーティング テーブルになります。各ルーティングテーブルには、デフォルトルートと対応するプレフィックスルートが含まれている必要があります。さらに、各ルーティングテーブルにIPルールを追加する必要があります。

図6:サーバー1(H100-01)Example from Server 1 (H100-01)の例

jnpr-nccl-net-setupユーティリティのlive-runオプションを使用して、各サーバーに必要なテーブル、ルート、IPルールを自動的に作成できます。

このコマンドでは、以下の例に示すように、NCCLソケットインターフェイスとアドレスファミリーをエクスポートする必要があります。

ルーティングテーブル、ルート、ルールを手動で作成する必要がある場合は、以下の手順に従って、必要に応じてすべてのGPUサーバー上のテーブル、ルート、ルールを手動で構成します。

  1. ルーティングテーブルの作成

    各サーバーの/etc/iproute2/rt_tables.dの下に ファイルjnpr_nccl_net.conf を作成し、例に示すように各テーブルIDと名前を行ごとに追加します。

    例:

    スト
    表8:ルーティングテーブルの例
    ライプ1 / ストライプ2
    インターフェイス ID テーブル
    gpu0_eth 10000 gpu0_subnet1
    10001 gpu0_subnet2
    10002 gpu0_subnet3
    10003 gpu0_subnet4
    gpu1_eth 10004 gpu1_subnet1
    10005 gpu1_subnet2
    10006 gpu1_subnet3
    10007 gpu1_subnet4
    gpu2_eth 10008 gpu2_subnet1
    10009 gpu2_subnet2
    10010 gpu2_subnet3
    10011 gpu2_subnet4
    gpu3_eth 10012 gpu3_subnet1
    10013 gpu3_subnet2
    10014 gpu3_subnet3
    10015 gpu3_subnet4
    gpu4_eth 10016 gpu4_subnet1
    10017 gpu4_subnet2
    10018 gpu4_subnet3
    10019 gpu4_subnet4
    gpu5_eth 10020 gpu5_subnet1
    10021 gpu5_subnet2
    10022 gpu5_subnet3
    10023 gpu5_subnet4
    gpu6_eth 10024 gpu6_subnet1
    10025 gpu6_subnet2
    10026 gpu6_subnet3
    10027 gpu6_subnet4
    gpu7_eth 10028 gpu7_subnet1
    10029 gpu7_subnet2
    10030 gpu7_subnet3
    10031 gpu7_subnet4
  2. テーブルが作成されたことを確認します。
  3. 各ルーティングテーブルにIPv6ルートを追加します。

    例に示すように、以下のコマンドを使用して、各ルーティングテーブルにデフォルトルートとプレフィックスルートを設定します。

    必要なルートを作成する前にすべてのルートを削除する必要がある場合は、以下を実行することができます。

    例:

    スト > > > > > > >
    表9:インターフェイスごとに4つのIPv6アドレスを使用したルートの例
      ストライプライプ2
    <インターフェイス<テーブル<プレフィックス<デフォルトゲートウェイ<テーブル<プレフィックス<デフォルトゲートウェイ
    gpu0_eth gpu0_subnet1 fc00:1:1:1:/64

    fc00:1:1:1::1

    (リーフ1 irb.2)

    gpu0_subnet1 fc00:2:1:1::/64

    fc00:2:1:1::1

    (リーフ1 irb.10)

    gpu0_subnet2 fc00:1:1:2::/64

    fc00:1:1:2::1

    (リーフ1 irb.2)

    gpu0_subnet2 fc00:2:1:2::/64

    fc00:2:1:2::1

    (リーフ1 irb.10)

    gpu0_subnet3 fc00:1:1:3::/64

    fc00:1:1:3::1

    (リーフ1 irb.2)

    gpu0_subnet3 fc00:2:1:3::/64

    fc00:2:1:3::1

    (リーフ1 irb.10)

    gpu0_subnet4 fc00:1:1:4::/64

    fc00:1:1:4::1

    (リーフ1 irb.2)

    gpu0_subnet4 fc00:2:1:4::/64

    fc00:2:1:4::1

    (リーフ1 irb.10)

    gpu1_eth gpu1_subnet1 fc00:1:2:1::/64

    fc00:1:2:1::1

    (リーフ2 irb.3)

    gpu1_subnet1 fc00:2:2:1::/64

    fc00:2:2:1::1

    (リーフ2 irb.11)

    gpu1_subnet2 fc00:1:2:2::/64

    fc00:1:2:2::1

    (リーフ2 irb.3)

    gpu1_subnet2 fc00:2:2:2:/64

    fc00:2:2:2::1

    (リーフ2 irb.11)

    gpu1_subnet3 fc00:1:2:3::/64

    fc00:1:2:3::1

    (リーフ2 irb.3)

    gpu1_subnet3 fc00:2:2:3::/64

    fc00:2:2:3::1

    (リーフ2 irb.11)

    gpu1_subnet4 fc00:1:2:4::/64

    fc00:1:2:4::1

    (リーフ2 irb.3)

    gpu1_subnet4 fc00:2:2:4::/64

    fc00:2:2:4::1

    (リーフ2 irb.11)

    gpu2_eth gpu2_subnet1 fc00:1:3:1::/64

    fc00:1:3:1::1

    (リーフ3 irb.4)

    gpu2_subnet1 fc00:2:3:1::/64

    fc00:2:3:1::1

    (リーフ3 irb.12)

    gpu2_subnet2 fc00:1:3:2::/64

    fc00:1:3:2::1

    (リーフ3 irb.4)

    gpu2_subnet2 fc00:2:3:2::/64

    fc00:2:3:2::1

    (リーフ3 irb.12)

    gpu2_subnet3 fc00:1:3:3::/64

    fc00:1:3:3::1

    (リーフ3 irb.4)

    gpu2_subnet3 fc00:2:3:3:/64

    fc00:2:3:3::1

    (リーフ3 irb.12)

    gpu2_subnet4 fc00:1:3:4::/64

    fc00:1:3:4::1

    (リーフ3 irb.4

    gpu2_subnet4 fc00:2:3:4::/64

    fc00:2:3:4::1

    (リーフ3 irb.12)

    gpu3_eth gpu3_subnet1 fc00:1:4:1::/64

    fc00:1:4:1::1

    (リーフ4 irb.5)

    gpu3_subnet1 fc00:2:4:1::/64

    fc00:2:4:1::1

    (リーフ4 irb.13)

    gpu3_subnet2 fc00:1:4:2::/64

    fc00:1:4:2::1

    (リーフ4 irb.5)

    gpu3_subnet2 fc00:2:4:2::/64

    fc00:2:4:2::1

    (リーフ4 irb.13)

    gpu3_subnet3 fc00:1:4:3::/64

    fc00:1:4:3::1

    (リーフ4 irb.5)

    gpu3_subnet3 fc00:2:4:3::/64

    fc00:2:4:3::1

    (リーフ4 irb.13)

    gpu3_subnet4 fc00:1:4:4::/64

    fc00:1:4:4::1

    (リーフ5 irb.5)

    gpu3_subnet4 fc00:2:4:4::/64

    fc00:2:4:4::1

    (リーフ4 irb.13)

    gpu4_eth gpu4_subnet1 fc00:1:5:1::/64

    fc00:1:5:1::1

    (リーフ5 irb.6)

    gpu4_subnet1 fc00:2:5:1::/64

    fc00:2:5:1::1

    (リーフ5 irb.14)

    gpu4_subnet2 fc00:1:5:2::/64

    fc00:1:5:2::1

    (リーフ5 irb.6)

    gpu4_subnet2 fc00:2:5:2:/64

    fc00:2:5:2::1

    (リーフ5 irb.14)

    gpu4_subnet3 fc00:1:5:3::/64

    fc00:1:5:3::1

    (リーフ5 irb.6)

    gpu4_subnet3 fc00:2:5:3::/64

    fc00:2:5:3::1

    (リーフ5 irb.14)

    gpu4_subnet4 fc00:1:5:4::/64

    fc00:1:5:4::1

    (リーフ5 irb.6)

    gpu4_subnet4 fc00:2:5:4::/64

    fc00:2:5:4::1

    (リーフ5 irb.14)

    gpu5_eth gpu5_subnet1 fc00:1:6:1:/64

    fc00:1:6:1::1

    (リーフ6 irb.7)

    gpu5_subnet1 fc00:2:6:1::/64

    fc00:2:6:1::1

    (リーフ6 irb.15)

    gpu5_subnet2 fc00:1:6:2::/64

    fc00:1:6:2::1

    (リーフ6 irb.7)

    gpu5_subnet2 fc00:2:6:2:/64

    fc00:2:6:2::1

    (リーフ6 irb.15)

    gpu5_subnet3 fc00:1:6:3::/64

    fc00:1:6:3::1

    (リーフ6 irb.7)

    gpu5_subnet3 fc00:2:6:3::/64

    fc00:2:6:3::1

    (リーフ6 irb.15)

    gpu5_subnet4 fc00:1:6:4::/64

    fc00:1:6:4::1

    (リーフ6 irb.7)

    gpu5_subnet4 fc00:2:6:4::/64

    fc00:2:6:4::1

    (リーフ6 irb.15)

    gpu6_eth gpu6_subnet1 fc00:1:7:1:/64

    fc00:1:7:1::1

    (リーフ7 irb.8)

    gpu6_subnet1 fc00:2:7:1::/64

    fc00:2:7:1::1

    (リーフ7 irb.16)

    gpu6_subnet2 fc00:1:7:2::/64

    fc00:1:7:2::1

    (リーフ7 irb.8)

    gpu6_subnet2 fc00:2:7:2::/64

    fc00:2:7:2::1

    (リーフ7 irb.16)

    gpu6_subnet3 fc00:1:7:3::/64

    fc00:1:7:3::1

    (リーフ7 irb.8)

    gpu6_subnet3 fc00:2:7:3::/64

    fc00:2:7:3::1

    (リーフ7 irb.16)

    gpu6_subnet4 fc00:1:7:4::/64

    fc00:1:7:4::1

    (リーフ7 irb.8)

    gpu6_subnet4 fc00:2:7:4::/64

    fc00:2:7:4::1

    (リーフ7 irb.16)

    gpu7_eth gpu7_subnet1 fc00:1:8:1::/64

    fc00:1:8:1::1

    (リーフ8 irb.9)

    gpu7_subnet1 fc00:2:8:1::/64

    fc00:2:8:1::1

    (リーフ8 irb.17)

    gpu7_subnet2 fc00:1:8:2::/64

    fc00:1:8:2::1

    (リーフ8 irb.9)

    gpu7_subnet2 fc00:2:8:2:/64

    fc00:2:8:2::1

    (リーフ8 irb.17)

    gpu7_subnet3 fc00:1:8:3::/64

    fc00:1:8:3::1

    (リーフ8 irb.9)

    gpu7_subnet3 fc00:2:8:3::/64

    fc00:2:8:3::1

    (リーフ8 irb.17)

    gpu7_subnet4 fc00:1:8:4::/64

    fc00:1:8:4::1

    (リーフ8 irb.9)

    gpu7_subnet4 fc00:2:8:4::/64

    fc00:2:8:4::1

    (リーフ8 irb.17)

    Stripe1: user@H100-01:/$ sudo ip -6 route add fc00:1:1:1:::/64 dev gpu0_eth table gpu0_subnet1

    Stripe2:

  4. ルート作成 の確認

    すべてのルートを削除する必要がある場合は、以下を実行します。

    例:

  5. ルーティングポリシールールを追加します。

    例に示すように、以下のコマンドを使用して、各ルーティングテーブルのルーティングポリシールールを設定します。

    スト
    表10:各ポリシールールの表とプレフィックス
      ストライプ1ライプ2
    インターフェイス テーブル プレフィックス テーブル プレフィックス
    gpu0_eth gpu0_subnet1 fc00:1:1:1:/64 gpu0_subnet1 fc00:2:1:1::/64
    gpu0_subnet2 fc00:1:1:2::/64 gpu0_subnet2 fc00:2:1:2::/64
    gpu0_subnet3 fc00:1:1:3::/64 gpu0_subnet3 fc00:2:1:3::/64
    gpu0_subnet4 fc00:1:1:4::/64 gpu0_subnet4 fc00:2:1:4::/64
    gpu1_eth gpu1_subnet1 fc00:1:2:1::/64 gpu1_subnet1 fc00:2:2:1::/64
    gpu1_subnet2 fc00:1:2:2::/64 gpu1_subnet2 fc00:2:2:2:/64
    gpu1_subnet3 fc00:1:2:3::/64 gpu1_subnet3 fc00:2:2:3::/64
    gpu1_subnet4 fc00:1:2:4::/64 gpu1_subnet4 fc00:2:2:4::/64
    gpu2_eth gpu2_subnet1 fc00:1:3:1::/64 gpu2_subnet1 fc00:2:3:1::/64
    gpu2_subnet2 fc00:1:3:2::/64 gpu2_subnet2 fc00:2:3:2::/64
    gpu2_subnet3 fc00:1:3:3::/64 gpu2_subnet3 fc00:2:3:3:/64
    gpu2_subnet4 fc00:1:3:4::/64 gpu2_subnet4 fc00:2:3:4::/64
    gpu3_eth gpu3_subnet1 fc00:1:4:1::/64 gpu3_subnet1 fc00:2:4:1::/64
    gpu3_subnet2 fc00:1:4:2::/64 gpu3_subnet2 fc00:2:4:2::/64
    gpu3_subnet3 fc00:1:4:3::/64 gpu3_subnet3 fc00:2:4:3::/64
    gpu3_subnet4 fc00:1:4:4::/64 gpu3_subnet4 fc00:2:4:4::/64
    gpu4_eth gpu4_subnet1 fc00:1:5:1::/64 gpu4_subnet1 fc00:2:5:1::/64
    gpu4_subnet2 fc00:1:5:2::/64 gpu4_subnet2 fc00:2:5:2:/64
    gpu4_subnet3 fc00:1:5:3::/64 gpu4_subnet3 fc00:2:5:3::/64
    gpu4_subnet4 fc00:1:5:4::/64 gpu4_subnet4 fc00:2:5:4::/64
    gpu5_eth gpu5_subnet1 fc00:1:6:1:/64 gpu5_subnet1 fc00:2:6:1::/64
    gpu5_subnet2 fc00:1:6:2::/64 gpu5_subnet2 fc00:2:6:2:/64
    gpu5_subnet3 fc00:1:6:3::/64 gpu5_subnet3 fc00:2:6:3::/64
    gpu5_subnet4 fc00:1:6:4::/64 gpu5_subnet4 fc00:2:6:4::/64
    gpu6_eth gpu6_subnet1 fc00:1:7:1:/64 gpu6_subnet1 fc00:2:7:1::/64
    gpu6_subnet2 fc00:1:7:2::/64 gpu6_subnet2 fc00:2:7:2::/64
    gpu6_subnet3 fc00:1:7:3::/64 gpu6_subnet3 fc00:2:7:3::/64
    gpu6_subnet4 fc00:1:7:4::/64 gpu6_subnet4 fc00:2:7:4::/64
    gpu7_eth gpu7_subnet1 fc00:1:8:1::/64 gpu7_subnet1 fc00:2:8:1::/64
    gpu7_subnet2 fc00:1:8:2::/64 gpu7_subnet2 fc00:2:8:2:/64
    gpu7_subnet3 fc00:1:8:3::/64 gpu7_subnet3 fc00:2:8:3::/64
    gpu7_subnet4 fc00:1:8:4::/64 gpu7_subnet4 fc00:2:8:4::/64

    例:

  6. ルール作成の確認:

すべてのルールを削除する必要がある場合は、以下を実行します。

例:

NCCL ジョブの実行

QPとIPv6アドレスをマッピングしながらNCCLテストを実行するには、以下のNCCL変数が必要です。

NCCL_NET_PLUGIN=juniper-ib
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/
NCCL_IB_QPS_PER_CONNECTION=4
NCCL_IB_SPLIT_DATA_ON_QPS=1
NCCL_IB_ADDR_FAMILY=AF_INET6
NCCL_SOCKET_FAMILY=AF_INET6
NCCL_SOCKET_NTHREADS=8
UCX_IB_GID_INDEX=3
UCX_NET_DEVICES=mlx5_0:1,mlx5_3:1,mlx5_4:1,mlx5_5:1,mlx5_6:1,mlx5_9:1,mlx5_10:1,mlx5_11:1
表11:NCCL変数の説明
変数 の説明 値がデフォルトで受け入れられます

NCCL_NET_PLUGIN

(2.11以降)

接尾辞文字列またはライブラリ名のいずれかに設定して、複数のNCCLネットプラグインから選択します。この設定により、NCCL は次の戦略を使用して net プラグイン ライブラリを検索します。

  • NCCL_NET_PLUGINが設定されている場合は、NCCL_NET_PLUGINで指定された名前のライブラリの読み込みを試みてください。
  • NCCL_NET_PLUGINが設定されていて、以前に失敗した場合は、libnccl-net- .so の読み込みを試みてください。
  • NCCL_NET_PLUGINが設定されていない場合は、読み込みを試み libnccl-net.so。
  • プラグインが見つからない場合(ユーザー定義でもデフォルトでもない)、内部ネットワークプラグインを使用します。

たとえば、NCCL_NET_PLUGIN=foo を設定すると、NCCL は foo の読み込みを試み、foo が見つからない場合は libnccl-net-foo.so します (システム上に存在する場合)。

プラグインのサフィックス、プラグインのファイル名、または「なし」。  
LD_LIBRARY_PATH ジュニパーNCCLネットプラグイン共有オブジェクトを含むディレクトリを指します    

NCCL_IB_QPS_PER_CONNECTION

(2.10以降)

2 つのランク間の各接続に使用する IB キュー ペアの数。これは、良好なルーティングエントロピーを持つために複数のキューペアを必要とするマルチレベルファブリックで有効です。

パフォーマンスに影響を与える可能性があるため、複数のQPでデータを分割するさまざまな方法については、NCCL_IB_SPLIT_DATA_ON_QPSを参照してください。

1 - 128 1

NCCL_IB_SPLIT_DATA_ON_QPS

(2.18以降)

このパラメーターは、複数のキューペアを作成する際のキューペアの使用方法を制御します。1(分割モード)に設定すると、各メッセージは各キューペアで均等に分割されます。これにより、多くのQPを使用すると、目に見える遅延の低下が発生する可能性があります。0(ラウンドロビンモード)に設定すると、キューペアは、送信する各メッセージに対してラウンドロビンモードで使用されます。複数のメッセージを送信しない操作では、すべての QP が使用されるわけではありません。 0または1。

0

1(2.18、および2.19用)

NCCL_IB_ADDR_FAMILY InfiniBandに使用されるアドレスファミリーを指定します。 AF_INET(IPv4)またはAF_INET6(IPv6) AF_INET
NCCL_SOCKET_FAMILY ソケットに使用されるアドレスファミリーを指定します。ファブリックのアドレスタイプと一致する必要があります。 AF_INETまたはAF_INET6 AF_UNSPEC(フォールバックロジック)
NCCL_SOCKET_NTHREADS NCCL が使用するソケットあたりのスレッド数。複数のネットワークインターフェイスでパフォーマンスを向上できます。 整数(CPU/ネットワーク負荷に応じて通常1〜16に設定されます) 1
UCX_IB_GID_INDEX InfiniBandデバイスのGIDインデックスを指定します。正しいGID(グローバルIPv6 GIDなど)を選択する必要があります。 整数、通常は IPv6 上の RoCEv2 の場合は 3(ただし、NIC 構成によって異なります) NIC依存
UCX_NET_DEVICES 使用するUCX対応ネットワークデバイスの一覧を指定します。選択したNICポートにトラフィックをピン留めするために必要です。 mlx5_0:1、mlx5_3:1などのカンマ区切りリスト,... 利用可能なすべてのデバイス

リファレンス: 環境変数 — NCCL 2.27.5 ドキュメント

注:

付録A – 自動設定されたIPv6アドレスを使用してNCCLテストを実行し、UCX_IB_GID_INDEXの値を確認する。選択したアドレスがリンクローカルIPv6アドレスではないことを確認します。

QPの数を増やすことで、ジョブのパフォーマンスを向上させることができますが、ある程度まではしかありません。それ以降は、GPUサーバー内の内部処理制限(NICキャッシュの制約、スケジューリングのオーバーヘッド、キャッシュの競合、コンプリートキューの管理方法)が原因でパフォーマンスが変わらないか、低下し始めますが、トラフィックバランシングメカニズムのネットワークファブリックが原因ではありません。

経験則として、最適なパフォーマンスを得るには、接続ごとのキューペアの数をアップリンク(リーフからスパインリンク)の数と同じになるように設定します。それを超えてキューペアの数を増やしても、通常、何のメリットも得られません。

例として、 表 12 に示すキュー ペアの数が異なる NCCL テストのパフォーマンス結果を考えてみましょう。すべての削減テストの平均バス帯域幅は、QPの数が増えるにつれて改善し、アップリンクとキューペアの数が同じであれば最大値に達します。このポイントを超えて数を増やしても、何のメリットもなく、パフォーマンスが大幅に低下することさえあります。

表12:さまざまな数のキューペアを使用したNCCLの全削減およびAll-to-All NCCLテストによる平均バス帯域幅
アップリンク数 QP数 平均 バス帯域幅(Gbps)
  すべて削減 All-to-All
4 1 189.067 17.785
4 2 379.499 31.666
4 4 386.753 43.552
4 8 386.734 28.130
4 16 383.412 13.537
4 32 381.354 6.294
8 1 66.488 15.835
8 2 201.376 26.355
8 4 364.614 43.284
8 8 386.739 28.404
8 16 383.396 13.662
8 32 381.060 6.338
注:

これらのテストは、 4 ノードノードあたり 8 GPU、Connect X7 NIC を備えた NVIDIA H100-01 サーバー、NCCL バージョン 2.23.4+cuda12.6 で完了しました。