ジュニパーRDMA対応ロードバランシング(LB)およびBGP-DPF - GPUバックエンドファブリックの実装
このセクションでは、ジュニパーRDMA対応ロードバランシング(LB)とBGP-DPFを実装するための設定の詳細について説明します。このセクションで紹介するすべての設定例と検証例は、以下の例に基づいています。
IPv6 SLAAC(ステートレスアドレス自動設定)を使用したGPUサーバーとリーフノードの接続
GPUサーバーは、「 バックエンドGPUレール最適化ストライプアーキテクチャ 」セクションで説明したように、レールアライメントされたアーキテクチャに従って接続されます。すべてのサーバー上のGPU 0が最初のリーフノードに接続され、すべてのサーバー上のGPU 1が2番目のリーフノードに接続されます。これを 図2に示します。
サーバーとリーフ ノード間の接続は L2 VLAN ベースで、リーフ ノード上の IRB がサーバーのデフォルト ゲートウェイとして機能します。
例
サーバーとリーフノードを接続する物理インターフェイスは、ファミリーイーサネットスイッチングで設定され、関連する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の両方にアドバタイズされます。
[edit interfaces et-0/0/16:0]
jnpr@stripe1-leaf1# show
description to.h100-01:gpu0_eth;
native-vlan-id 2;
mtu 9216;
unit 0 {
family ethernet-switching {
interface-mode trunk;
vlan {
members vn2;
}
}
[edit interfaces et-0/0/16:1]
jnpr@stripe1-leaf1# show
description to.h100-02:gpu0_eth;
native-vlan-id 2;
mtu 9216;
unit 0 {
family ethernet-switching {
interface-mode trunk;
vlan {
members vn2;
}
}
[edit vlans vn2]
jnpr@stripe1-leaf1# show
description "Virtual network for rail 0 on leaf stripe1-leaf1";
vlan-id 2;
l3-interface irb.2;
[edit interfaces irb]
jnpr@stripe1-leaf1# show | display inheritance | except #
mtu 9216;
unit 2 {
family inet6 {
address fd00:1:1:1::1/64;
address fd00:1:1:2::1/64;
address fd00:1:1:3::1/64;
address fd00:1:1:4::1/64;
}
}
IPv6アドレスがirb.2インターフェイスに正しく割り当てられていること、およびIPv6アドレスが適切なVLANに関連付けられていることを、以下のコマンドを使用して確認できます。
jnpr@stripe1-leaf1> show interfaces irb.2 terse
Interface Admin Link Proto Local Remote
irb.2 up up inet6 fd00:1:1:1::1/64
fd00:1:1:2::1/64
fd00:1:1:3::1/64
fd001:1:4::1/64
fe80::9e5a:8000:2c1:b306/64
multiservice
jnpr@stripe1-leaf1> show vlans vn2 detail
Routing instance: default-switch
VLAN Name: vn2 State: Active
Tag: 2
Internal index: 4, Generation Index: 4, Origin: Static
Mac aging: Enabled
MAC aging time: 300 seconds
Layer 3 interface: irb.2
VXLAN Enabled : No
Interfaces:
et-0/0/16:0.0*,untagged,trunk
et-0/0/16:1.0*,untagged,trunk
Number of interfaces: Tagged 0 , Untagged 2
Total MAC count: 2
サーバーSLAAC設定:
NVIDIA GPU サーバー上のインターフェイスを設定するには、「NVIDIA 設定」の手順に従ってください 。ジュニパーネットワークスネットプランにDHCPv6を無効にするステートメントが含まれていることを確認する必要があります。
サーバー上のインターフェイスを IPv6 アドレスで設定したり、IPv6 を明示的に有効にしたりする必要はありません。DHCPv6を無効にするだけで十分です。
例:
gpu0_eth:
match:
macaddress: a0:88:c2:3b:50:66
dhcp6: false
mtu: 9000
set-name: gpu0_eth
以下は、ネットプランの例です。これらの例を使用して、すべてのサーバーのアドレスを設定するためのテンプレートを作成できます。
jnpr@H100-01:/etc/netplan$ sudo cat 00-installer-config-type5_vrf.yaml
# This is the network config written by 'subiquity'
network:
version: 2
ethernets:
mgmt_eth:
match:
macaddress: 6c:fe:54:48:2e:48
dhcp4: false
addresses:
- 10.10.1.16/31
nameservers:
addresses:
- 8.8.8.8
routes:
- to: default
via: 10.10.1.17
set-name: mgmt_eth
gpu0_eth:
match:
macaddress: a0:88:c2:3b:50:66
dhcp6: false
mtu: 9000
set-name: gpu0_eth
gpu1_eth:
match:
macaddress: a0:88:c2:3b:50:6a
dhcp6: false
mtu: 9000
set-name: gpu1_eth
gpu2_eth:
match:
macaddress: a0:88:c2:3b:50:6e
dhcp6: false
mtu: 9000
set-name: gpu2_eth
gpu3_eth:
match:
macaddress: a0:88:c2:3b:50:72
dhcp6: false
mtu: 9000
set-name: gpu3_eth
gpu4_eth:
match:
macaddress: a0:88:c2:0a:79:48
dhcp6: false
mtu: 9000
set-name: gpu4_eth
gpu5_eth:
match:
macaddress: a0:88:c2:0a:79:4c
dhcp6: false
mtu: 9000
set-name: gpu5_eth
gpu6_eth:
match:
macaddress: a0:88:c2:0a:79:40
dhcp6: false
mtu: 9000
set-name: gpu6_eth
gpu7_eth:
match:
macaddress: a0:88:c2:0a:79:44
dhcp6: false
mtu: 9000
set-name: gpu7_eth
stor0_eth:
match:
macaddress: b8:3f:d2:63:e5:44
dhcp6: false
mtu: 9000
routes:
- to: 10.100.0.0/21
via: 10.100.1.12
set-name: stor0_eth
gpu#_ethインターフェイスでIPv4が有効になっていないことを確認します。
また、ルーターアドバタイズメント(RA)によるIPv6アドレスの自動設定を機能させるには、RAメッセージを受信して処理するようにサーバーを設定する必要があります。ほとんどの場合、これはデフォルトで有効になっていますが、設定手順を以下に説明します。
設定には2つのレイヤーがあります。
- NetplanまたはsystemdのインターフェイスレベルRAポリシー
- カーネルレベルのsysctlパラメーター(accept_ra、autoconf)
適切なRA動作を確保するには、両方を揃える必要があります。
- システムが systemd-networkd (Ubuntu Server で共通) を備えた Netplan を使用している場合:
Netplan YAMLファイル(例:/etc/netplan/01-netcfg.yaml)で、各インターフェイスの下に以下を追加します。
accept-ra: true
ipv6-privacy: false
次に、変更を適用します。
sudo netplan generate
sudo netplan apply
これにより、Netplan は IPv6AcceptRA=yes を使用して systemd-networkd の .network ファイルをレンダリングし、RA ベースの自動設定を有効にします。
しかし、これだけでは十分ではありません。カーネルがまだRAを無視するように設定されている場合。また、カーネルが実行時に RA を受け入れるように設定されていることも確認する必要があります。以下を使用して確認できます。
sudo sysctl net.ipv6.conf.<interface>.accept_ra
値が 0 の場合、Netplan の設定に関係なく RA は無視されます。これは、以下で一時的に修正できます。
sudo sysctl -w net.ipv6.conf.<interface>.accept_ra=1
再起動しても永続的にするには、sysctl 設定ファイル(例:/etc/sysctl.d/99-accept-ra.conf)に以下を追加します。
net.ipv6.conf.<interface>.accept_ra = 1
そして、それを適用します:
sudo sysctl --system
accept-raなどのパラメーターは、グローバルに、またはインターフェイスごとに有効または無効にすることができます。
| 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の受け入れと自動構成を有効にします。
sudo sysctl -w net.ipv6.conf.<interface>.accept_ra=1 sudo sysctl -w net.ipv6.conf.<interface>.autoconf=1 sudo tee /etc/sysctl.d/99-ipv6-ra.conf > /dev/null <<EOF net.ipv6.conf.<interface>.accept_ra = 1 net.ipv6.conf.<interface>.autoconf = 1 EOF sudo sysctl --system
リーフノードSLAAC設定
SLAACを有効にするには、GPUサーバーに面したインターフェイスでリーフノードをIPv6アドレスで設定する必要があります。
例:
jnpr@stripe1-leaf1# show interface irb
description "H100-01 GPU0 Server 1";
unit 2 {
family inet6 {
address FC00:1:1:1::1/64;
address FC00:1:1:2::1/64;
address FC00:1:1:3::1/64;
address FC00:1:1:4::1/64;
}
}
IPv6アドレスを設定した後、例に示すように、プロトコルルーターアドバタイズメントですべてのプレフィックスのアドバタイズを有効にする必要があります。
[edit protocols router-advertisement]
jnpr@stripe1-leaf1# show
interface irb.2 {
prefix FC00:1:1:1::1/64;
prefix FC00:1:1:2::1/64;
prefix FC00:1:1:3::1/64;
prefix FC00:1:1:4::1/64;
}
特定のプレフィックスに対してルーターアドバタイズを設定するには、ルーターアドバタイズメントが設定されているインターフェイスで、同じプレフィックス内のIPv6アドレスを設定する必要があります。ルーターアドバタイズメントで設定したプレフィックスがインターフェイス下でも設定されていない場合、設定をコミットする際にエラーが返されます。
例:
[edit interfaces irb.2]
jnpr@stripe1-leaf1# show
unit 0 {
family inet6 {
address FC00:2:1:1::1/64;
}
}
[edit protocols router-advertisement]
jnpr@stripe1-leaf1# show interface irb.2
{
prefix FC00:1:1:1::/64;
}
[edit protocols router-advertisement interface irb.2]
jnpr@stripe1-leaf1# commit
[edit protocols router-advertisement interface]
'irb.2'
Family inet6 should be configured on this interface
error: commit failed: (statements constraint check failed
以下の表は、各リーフノードの各irbインターフェイスのプレフィックスとIPアドレスをまとめたものです。
| 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アドレスを自動設定し、対応するルートをインストールしていることを確認するには、以下のコマンドを使用します。
ip -6 addr show dev <interface> ip -6 route
動的またはmngtmpaddrとしてマークされたSLAAC形式(プレフィックス::EUI-64)のグローバルinet6アドレスが表示されます。また、インターフェイスのリンクローカルアドレス(FE80::EUI-64)も取得します
例:
jnpr@H100-01:~$ ip -6 addr show dev gpu0_eth
17: gpu0_eth: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc mq state UP group default qlen 1000
inet6 fc00:1:1:1:a288:c2ff:fe3b:5066/64 scope global dynamic mngtmpaddr noprefixroute
valid_lft 2591997sec preferred_lft 604797sec
inet6 fc00:1:1:2:a288:c2ff:fe3b:5066/64 scope global dynamic mngtmpaddr noprefixroute
valid_lft 2591997sec preferred_lft 604797sec
inet6 fc00:1:1:3:a288:c2ff:fe3b:5066/64 scope global dynamic mngtmpaddr noprefixroute
valid_lft 2591997sec preferred_lft 604797sec
inet6 fc00:1:1:4:a288:c2ff:fe3b:5066/64 scope global dynamic mngtmpaddr noprefixroute
valid_lft 2591997sec preferred_lft 604797sec
inet6 fe80::a288:c2ff:fe3b:5066/64 scope link
valid_lft forever preferred_lft forever
jnpr@H100-01:~$ ip -6 route
::1 dev lo proto kernel metric 256 pref medium
fc00:1:1:1::/64 dev gpu0_eth proto ra metric 100 expires 2591960sec pref medium
fc00:1:1:2::/64 dev gpu0_eth proto ra metric 100 expires 2591960sec pref medium
fc00:1:1:3::/64 dev gpu0_eth proto ra metric 100 expires 2591960sec pref medium
fc00:1:1:4::/64 dev gpu0_eth proto ra metric 100 expires 2591960sec pref medium
fe80::/64 dev stor0_eth proto kernel metric 256 pref medium
fe80::/64 dev mgmt_eth proto kernel metric 256 pref medium
fe80::/64 dev eno3 proto kernel metric 256 pref medium
fe80::/64 dev gpu0_eth proto kernel metric 256 pref medium
fe80::/64 dev gpu1_eth proto kernel metric 256 pref medium
fe80::/64 dev gpu2_eth proto kernel metric 256 pref medium
fe80::/64 dev gpu3_eth proto kernel metric 256 pref medium
fe80::/64 dev gpu4_eth proto kernel metric 256 pref medium
fe80::/64 dev gpu5_eth proto kernel metric 256 pref medium
fe80::/64 dev gpu6_eth proto kernel metric 256 pref medium
fe80::/64 dev gpu7_eth proto kernel metric 256 pref medium
default via fe80::9e5a:80ff:fec1:ae60 dev gpu0_eth proto ra metric 100 expires 1760sec pref medium
jnpr@stripe1-leaf1> show interfaces irb1 terse
Interface Admin Link Proto Local Remote
irb.1 up up
irb.1 up up inet6 fc00:1:1:1::1/64
fc00:1:1:2::1/64
fc00:1:1:3::1/64
fc00:1:1:4::1/64
fe80::9e5a:80ff:fec1:ae60/64
multiservice
また、以下を使用して受信 RA メッセージを監視することもできます。
sudo tcpdump -i <interface> -vv icmp6 and 'ip6[40] == 134'
例:
jnpr@H100-01:~$ sudo tcpdump -i gpu0_eth -vv icmp6 and 'ip6[40] == 134'
tcpdump: listening on gpu0_eth, link-type EN10MB (Ethernet), snapshot length 262144 bytes
18:34:50.515554 IP6 (flowlabel 0x9b92d, hlim 255, next-header ICMPv6 (58) payload length: 152) fe80::9e5a:80ff:fec1:ae60 > ip6-allnodes: [icmp6 sum ok] ICMP6, router advertisement, length 152
hop limit 64, Flags [none], pref medium, router lifetime 1800s, reachable time 0ms, retrans timer 0ms
source link-address option (1), length 8 (1): 9c:5a:80:c1:ae:60
0x0000: 9c5a 80c1 ae60
prefix info option (3), length 32 (4): fc00:1:1:1::/64, Flags [onlink, auto], valid time 2592000s, pref. time 604800s
0x0000: 40c0 0027 8d00 0009 3a80 0000 0000 fc00
0x0010: 0001 0004 0001 0000 0000 0000 0000
prefix info option (3), length 32 (4): fc00:1:1:2::/64, Flags [onlink, auto], valid time 2592000s, pref. time 604800s
0x0000: 40c0 0027 8d00 0009 3a80 0000 0000 fc00
0x0010: 0001 0003 0001 0000 0000 0000 0000
prefix info option (3), length 32 (4): fc00:1:1:3::/64, Flags [onlink, auto], valid time 2592000s, pref. time 604800s
0x0000: 40c0 0027 8d00 0009 3a80 0000 0000 fc00
0x0010: 0001 0002 0001 0000 0000 0000 0000
prefix info option (3), length 32 (4): fc00:1:1:4::/64, Flags [onlink, auto], valid time 2592000s, pref. time 604800s
0x0000: 40c0 0027 8d00 0009 3a80 0000 0000 fc00
0x0010: 0001 0001 0001 0000 0000 0000 0000
場合によっては、特に RA 設定を変更した後、または静的構成と動的構成を切り替えた後、アドレスの再割り当てをトリガーするためにインターフェイスをリセットする必要がある場合があります。
sudo ip addr flush dev <interface>
sudo ip link set <interface> down && sleep 1 && sudo ip link set <interface> up
インターフェイスを元に戻した後、数秒待ってから、IPv6アドレスを再確認します。
ip -6 addr show dev <interface>
これにより、古いアドレスが削除され、新しいRAが処理されます。
すべてのIPv6設定は、 /proc/sys/net/ipv6/conf にあります。
ルーターアドバタイズメントが送信されていることを確認するには、次のコマンドを使用できます。show ipv6 router-advertisement interface <interface>。
例:
jnpr@stripe1-leaf1> show ipv6 router-advertisement interface et-0/0/16:0 Interface: et-0/0/16:0.0 Advertisements sent: 2, last sent 00:02:17 ago Solicits sent: 1, last sent 00:02:46 ago Solicits received: 0 Advertisements received: 0 Solicited router advertisement unicast: Disable IPv6 RA Preference: DEFAULT/MEDIUM Passive mode: Disable Upstream mode: Disable Downstream mode: Disable Proxy blackout timer: Not Running
また、以下を使用して、インターフェイス上のルーターアドバタイズパケットをキャプチャすることもできます。
monitor traffic interface et-0/0/16:0.0 extensive matching "icmp6 and ip6[40] == 134"
例:
jnpr@stripe1-leaf1> monitor traffic interface et-0/0/16:0.0 extensive matching "icmp6 and ip6[40] == 134"
NOTE: MAC Addresses 00:00:00:00:00:00 are used when L2 header information in not available. For such packets, L2 headers are added by PFE when transmit and removed before being punted to RE
Local vib interface has IP 128.0.0.4.
reading from file -, link-type EN10MB (Ethernet)
18:37:24.682098 9c:5a:80:c1:ae:60 > 33:33:00:00:00:01, ethertype IPv6 (0x86dd), length 284: (flowlabel 0x9b92d, hlim 255, next-header ICMPv6 (58) payload length: 152) fe80::9e5a:80ff:fec1:ae60 > ff02::1: [icmp6 sum ok] ICMP6, router advertisement, length 152
hop limit 64, Flags [none], pref medium, router lifetime 1800s, reachable time 0ms, retrans timer 0ms
source link-address option (1), length 8 (1): 9c:5a:80:c1:ae:60
0x0000: 9c5a 80c1 ae60
prefix info option (3), length 32 (4): fc00:1:1:4::/64, Flags [onlink, auto], valid time 2592000s, pref. time 604800s
0x0000: 40c0 0027 8d00 0009 3a80 0000 0000 fc00
0x0010: 0001 0004 0001 0000 0000 0000 0000
prefix info option (3), length 32 (4): fc00:1:1:3::/64, Flags [onlink, auto], valid time 2592000s, pref. time 604800s
0x0000: 40c0 0027 8d00 0009 3a80 0000 0000 fc00
0x0010: 0001 0003 0001 0000 0000 0000 0000
prefix info option (3), length 32 (4): fc00:1:1:2::/64, Flags [onlink, auto], valid time 2592000s, pref. time 604800s
0x0000: 40c0 0027 8d00 0009 3a80 0000 0000 fc00
0x0010: 0001 0002 0001 0000 0000 0000 0000
prefix info option (3), length 32 (4): fc00:1:1:1::/64, Flags [onlink, auto], valid time 2592000s, pref. time 604800s
0x0000: 40c0 0027 8d00 0009 3a80 0000 0000 fc00
0x0010: 0001 0001 0001 0000 0000 0000 0000
ルーターアドバタイズメントは、送信元としてのリーフノードインターフェイスのリンクローカルアドレス、ipv6全ノードマルチキャストアドレス(FF02::1)、ネクストヘッダーICMPv6(58)を使用して送信されます。以下は、これらに最も関連性の高い属性です。
| パラメータ | 値 | の説明 |
|---|---|---|
| フラグ | オンリンク, 自動 | ホストは、このプレフィックスのアドレスがローカルリンク上にあると見なすことができます。 このプレフィックスは、 SLAAC (ステートレスアドレス自動設定)に使用できます。 |
| 有効期間 | 2592000 | プレフィックスは30日間有効です(到達可能性に使用)。 |
| 優先ライフタイム | 604800 | 7日間の推奨ライフタイム(その後、新しい接続では非推奨になります)。 |
| ルーターの寿命 | 1800年代 | ルーターは1800秒間デフォルトゲートウェイと見なされます |
ルーターアドバタイズを受信した後、サーバーのNICインターフェイスは、表4に示すように、リーフノードによるプレフィックスアドバタイズと、EUI-64アドレス形式(インターフェイスのMACアドレスに基づく)を使用して計算されたアドレスのホスト部分を連結して、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ネイバーディスカバリを使用したリーフツースパイン接続
リーフノードとスパインノード間のインターフェイスは、明示的に設定されたIPアドレスを必要とせず、IPv6トラフィックの処理を可能にするファミリーinet6のみを持つタグなしインターフェイスとして設定されます。インターフェイスは、 図4に示すように、EUI-64フォーマットを使用してリンクローカルアドレスを自動的に生成します。
リーフからスパインへの接続 設定
表:リーフからスパインへのインターフェイス設定例
インターフェイスでIPv6を有効にすると、リンクローカルIPv6アドレスが自動的に割り当てられます。スイッチは、表5に示すように、EUI-64アドレスフォーマット(インターフェイスのMACアドレスに基づく)を使用して、各インターフェイスのリンクローカルアドレスを自動生成します。
| リーフノードインターフェイス | リーフノードIPv6アドレス | スパインノードインターフェイス | スパインIPv6アドレス |
|---|---|---|---|
| ストライプ 1、リーフ 1 - et-0/0/0:0 | fe80::9e5a:80ff:fec1:ae00/64 | スパイン1 – et-0/0/0:0 | FE80::9E5A:80FF:FEEF:A28F/64 |
| ストライプ1リーフ1 - et-0/0/1:0 | fe80::9e5a:80ff:fec1:ae08/64 | スパイン2 – et-0/0/1:0 | fe80::5a86:70ff:fe7b:ced5/64 |
| ストライプ 1 リーフ 1 - et-0/0/2:0 | fe80::9e5a:80ff:fec1:af00/64 | スパイン3 – et-0/0/2:0 | fe80::5a86:70ff:fe78:e0d5/64 |
| ストライプ 1、リーフ 1 - et-0/0/3:0 | fe80::9e5a:80ff:fec1:af08/64 | スパイン4 – et-0/0/3:0 | fe80::5a86:70ff:fe79:3d5/64 |
| ストライプ1、リーフ2 - et-0/0/0:0 | fe80::5a86:70ff:fe79:dad5/64 | スパイン1 – et-0/0/0:0 | FE80::9e5a:80ff:feef:a297/64 |
| ストライプ 1、リーフ 2 - et-0/0/1:0 | fe80::5a86:70ff:fe79:dadd/64 | スパイン2 – et-0/0/1:0 | fe80::5a86:70ff:fe7b:cedd/64 |
| ストライプ 1、リーフ 2 - et-0/0/2:0 | fe80::5a86:70ff:fe79:dbd5/64 | スパイン3 – et-0/0/2:0 | fe80::5a86:70ff:fe78:e0dd/64 |
| ストライプ1リーフ2 - et-0/0/3:0 | fe80::5a86:70ff:fe79:dbdd/64 | スパイン4 – et-0/0/3:0 | fe80::5a86:70ff:fe79:3dd/64 |
| . . . |
これらのアドレスは、次に示すように、リーフとスパインノードの間のすべてのインターフェイスでルーターアドバタイズメントを有効にした後、IPv6ネイバーディスカバリープロセスの一部として、標準ルーターアドバタイズメントを通じてアドバタイズされます。
表:.リーフおよびスパインインターフェイスでのIPv6ルーターアドバタイズメント
リーフからスパインへの接続の検証
ルーターアドバタイズメントが送信されていることを確認するには、show ipv6 router-advertisement interface <interface> と show ipv6 neighborsを使用できます。
jnpr@stripe1-leaf1> show ipv6 router-advertisement interface et-0/0/0:0
Interface: et-0/0/0:0.0
Advertisements sent: 4, last sent 00:02:28 ago
Solicits sent: 1, last sent 00:08:06 ago
Solicits received: 0
Advertisements received: 3
Solicited router advertisement unicast: Disable
IPv6 RA Preference: DEFAULT/MEDIUM
Passive mode: Disable
Upstream mode: Disable
Downstream mode: Disable
Proxy blackout timer: Not Running
Advertisement from fe80::9e5a:80ff:feef:a28f, heard 00:01:57 ago
Managed: 0
Other configuration: 0
Reachable time: 0 ms
Default lifetime: 1800 sec
Retransmit timer: 0 ms
Current hop limit: 64
jnpr@stripe1-leaf1> show ipv6 neighbors
IPv6 Address Linklayer Address State Exp Rtr Secure Interface
fe80::5a86:70ff:fe78:e0d5 58:86:70:78:e0:d5 reachable 11 yes no et-0/0/30:0.0
fe80::5a86:70ff:fe79:3d5 58:86:70:79:03:d5 reachable 23 yes no et-0/0/3:0.0
fe80::5a86:70ff:fe7b:ced5 58:86:70:7b:ce:d5 reachable 13 yes no et-0/0/2:0.0
fe80::9e5a:80ff:feef:a28f 9c:5a:80:ef:a2:8f reachable 25 yes no et-0/0/31:0.0
Total entries: 4
IPv6ネイバーディスカバリを使用したBGP DPF(Deterministic Path Forwarding)
このセクションでは、IPv6ネイバーディスカバリを使用して、リーフとスパインノード間のピアリングセッションを自動的に確立するようにBGPを設定する方法と、決定論的パッチフォワーディングを有効にする方法について説明します。これには、他のBGP設定パラメーターも含まれています。
BGP自動検出
リーフとスパインノード間の各接続は異なるファブリックカラーにマッピングする必要があり、BGPは自動検出用に設定されているため、ネイバーごとに個別のBGPグループが必要です。これにより、動的に検出された各ピアが正しいカラーに関連付けられます。
各BGPグループは外部BGPセッションとして設定され、ローカルAS番号が割り当てられます。
set protocols bgp group <group-name> type external
set protocols bgp group <group-name> local-as <local-as#>
例:
BGPピアの自動検出を有効にするために、各グループには、検出が許可されるインターフェイスを指定する動的ネイバーテンプレートが含まれています。これは、静的ピアに使用されていた従来のネイバーa.b.c.d設定に置き換わります。自動検出は、peer-auto-discoveryおよびipv6-ndオプションを使用して有効にします。
set protocols bgp group <group-name> dynamic-neighbor <template-name> peer-auto-discovery interface <interface-name>
set protocols bgp group <group-name> dynamic-neighbor <template-name> peer-auto-discovery family inet6 ipv6-nd
例:
これにより、JunosはIPv6ネイバーディスカバリーを使用して、ネイバーアドレスを動的に決定できます。
ピア形成を安全にするために、各グループは peer-as-list ステートメントを使用して定義された AS 範囲を参照します。これにより、AS番号が一致するネイバーのみがBGPセッションを確立できるようになります。リスト自体は、ポリシーオプションで定義されています。
set protocols bgp group <group-name> peer-as-list <as-list-name>
set policy-options as-list <aslist-name> members <value> | <value1-valueN> | [value1,value2,…]
自動検出は、リーフノードとスパインノードの両方で有効にする必要があります。
例:
各グループには、ポリシーオプションでBGPコミュニティとして定義されるファブリックカラーも割り当てられます。
set protocols bgp group <group-name> fabric-color <color>
set policy-options community <community-name> members color:0:<#>
ここで、<community-name> = <color>
IPv6 NLRIのサポート
IPv6ルートのアドバタイズメントは、以下を使用してリーフノードとスパインノードの両方で有効にする必要があります。
set protocols bgp family inet6 unicast
ECMP マルチパス
BGPマルチパスは、保護されたパスを介したECMP(等価コストマルチパス)ルーティングを許可するように設定し、複数のスパインアップリンク間でロードバランシングとフェイルオーバーの両方を確保する必要があります。これは、以下を使用して実現されます。
set protocols bgp group multipath allow-protection
BGPマルチパスは、リーフノードとスパインノードの両方で設定する必要があります。
BFD(双方向フォワーディング検出)
BFDは、以下を使用して障害検出時間を短縮するように構成されています。
set protocols bgp group <group-name> bfd-liveness-detection minimum-interval <interval>
set protocols bgp group <group-name> bfd-liveness-detection multiplier <multiplier>
| オプションの | 説明 |
|---|---|
| 最小間隔 (必須) |
ローカルデバイスから送信されたBFD Helloパケットとネイバーから予想されるパケットの間の最小時間(ミリ秒単位)。 範囲:1-255,000 推奨値:1000 |
| 乗数 (オプション) |
発信元インターフェイスがダウンと宣言する原因となったネイバーによって受信されなかったHelloパケットの数。 範囲:1-255 推奨:3(デフォルト) |
BFDは、リーフノードとスパインノードの両方で設定する必要があります。
DPF(決定論的パスフォワーディング)
IPv6 SLAACを使用したGPUサーバーからリーフノードへの接続セクションで説明されているように、リーフノードは、ルーターアドバタイズメント(RA)を介してGPUサーバーにアドバタイズされるのと同じ個々の/64 IPv6プレフィックスをアドバタイズするように設定する必要があります。
プレフィックスは、fabric-advertiseステートメントを使用してアドバタイズされます。
set protocols bgp fabric-advertise route <ipv6-prefix> color <color>
set protocols bgp fabric-advertise route <ipv6-prefix> backup-color <backup-color>
fabric-advertiseコマンドは、リーフノードでのみ必要です。
colorオプションは、プレフィックスが<color>に一致するBGPピアにアドバタイズされるように指定します。プレフィックスは、<color>に関連付けられたコミュニティ値でタグ付けされ、AIGP属性が0に設定されてアドバタイズされます。backup-colorオプションは、プレフィックスが<backup-color>に一致するBGPピアにアドバタイズされるように指定します。アドバタイズされたプレフィックスには、ピアに関連付けられたコミュニティ値でタグ付けされますが、AIGP属性は付与されません。
例:
以下のコマンドは、各BGPピア(つまり、リーフノードに設定された場合は各SPINEノード)にファブリックカラーを割り当てます。
プレフィックス(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スパインごと、プレフィックスごとの例
例:
ネイバーが静的に設定されている場合、fabric-colorはneighborステートメントの直下で設定できるため、単一のBGPグループを持つことができます。
スパインへのルート再アドバタイズの防止
irb インターフェイスに関連付けられたプレフィックスのみをアドバタイズするようにリーフ ノードを設定し、一方のスパインから他方のスパインピアに学習したルートがアドバタイズされないようにするには、エクスポート ポリシーがすべてのBGPグループに適用されます。これにより、リーフがスパインツースパイントラフィックの非トランジットノードとして機能し、ファブリック内の適切なルーティングが維持されます。
set policy-options policy-statement local term 1 from protocol direct
set policy-options policy-statement local term 1 from prefix-list-filter local orlonger
set policy-options policy-statement local term 1 then community add local
set policy-options policy-statement local term 1 then accept
set policy-options policy-statement local term 2 then reject
set policy-options prefix-list local fc00::/16
set policy-options prefix-list local fd00::/16
set policy-options community local members 201:201
このポリシーは、プレフィックス長が16ビット以上のルート一致プレフィックスfc00::/16およびfd00::16に一致し、エクスポート時に拒否します。アドバタイズする追加のIPv6アドレスは、プレフィックスリスト ローカルに追加できます。
このポリシーがなければ、リーフノードは1つのスパインノードから学習したプレフィックスを他のすべてのノードに再アドバタイズし、望ましくないルーティング動作や、異なるパス間での非効率的なトラフィック分散につながる可能性があります。
jnpr@stripe1-leaf1> show route advertising-protocol bgp fe80::5a86:70ff:fe78:e0d5%et-0/0/1:0.0 inet6.0: 49 destinations, 85 routes (49 active, 0 holddown, 0 hidden) Restart Complete Prefix Nexthop MED Lclpref AS path * fc00:1:1:1::/64 Self I * fc00:1:1:2::/64 Self I * fc00:1:1:3::/64 Self I * fc00:1:1:4::/64 Self I * fc00:1:2:1::/64 Self 101 202 I * fc00:1:2:3::/64 Self 103 202 I * fc00:1:2:4::/64 Self 104 202 I * fc00:1:3:1::/64 Self 101 203 I * fc00:1:3:3::/64 Self 103 203 I * fc00:1:3:4::/64 Self 104 203 I * fc00:1:4:1::/64 Self 101 204 I * fc00:1:4:3::/64 Self 103 204 I * fc00:1:4:4::/64 Self 104 204 I [edit] jnpr@stripe1-leaf1# set protocols bgp export local [edit] jnpr@stripe1-leaf1# commit commit complete jnpr@stripe1-leaf1> show route advertising-protocol bgp fe80::5a86:70ff:fe78:e0d5%et-0/0/1:0.0 inet6.0: 49 destinations, 85 routes (49 active, 0 holddown, 0 hidden) Restart Complete Prefix Nexthop MED Lclpref AS path * fc00:1:1:1::/64 Self I * fc00:1:1:2::/64 Self I * fc00:1:1:3::/64 Self I * fc00:1:1:4::/64 Self I Additionally, routes are tagged with community local, which the spine nodes use to prevent
さらに、ルートにはコミュニティローカルのタグが付けられます。スパインノードはこれを使用して、プレフィックスがリーフノードに返送されないようにします。
[edit] jnpr@spine1# show policy-options policy-statement leaf1 | display set set policy-options policy-statement leaf1 term 1 from community leaf1 set policy-options policy-statement leaf1 term 1 then reject jnpr@spine1# show policy-options community leaf1 | display set set policy-options community leaf1 members 201:201
BGPセッションの自動検出とDPF検証
セッションが確立されたことは、 show bgp summary コマンドを使用して確認できます。
jnpr@stripe1-leaf1> show bgp summary fe80::5a86:70ff:fe78:e0d5%et-0/0/1:0.0 102 57 50 0 1 21:21 Establ inet6.0: 0/0/0/0 fe80::5a86:70ff:fe79:3d5%et-0/0/2:0.0 104 56 50 0 1 21:21 Establ inet6.0: 0/0/0/0 fe80::5a86:70ff:fe7b:ced5%et-0/0/3:0.0 103 56 50 0 1 21:21 Establ inet6.0: 0/0/0/0 fe80::9e5a:80ff:feef:a28f%et-0/0/0:0.0 101 24 18 0 2 6:55 Establ inet6.0: 0/0/0/0
リンクローカルアドレスを使用して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 を使用して、検出されたネイバーのステータスをすばやく確認できます。
jnpr@stripe1-leaf1> show bgp summary autodiscovered
Threading mode: BGP I/O
Default eBGP mode: advertise - accept, receive - accept
Groups: 4 Peers: 4 Down peers: 0
Auto-discovered peers: 4
Table Tot Paths Act Paths Suppressed History Damp State Pending
inet6.0
32 8 0 0 0 0
Peer AS InPkt OutPkt OutQ Flaps Last Up/Dwn State|#Active/Received/Accepted/Damped...
fe80::5a86:70ff:fe78:e0d5%et-0/0/1:0.0 102 176 179 0 0 1:17:12 Establ
inet6.0: 3/12/12/0
fe80::5a86:70ff:fe79:3d5%et-0/0/3:0.0 104 528 528 0 2 3:55:54 Establ
inet6.0: 3/12/12/0
fe80::5a86:70ff:fe7b:ced5%et-0/0/2:0.0 103 528 528 0 2 3:55:54 Establ
inet6.0: 3/12/12/0
fe80::9e5a:80ff:feef:a28f%et-0/0/0:0.0 101 536 536 0 0 4:00:02 Establ
inet6.0: 3/12/12/0
ファブリックカラーに基づいて特定のネイバーのステータスを検証できます。
jnpr@stripe1-leaf1> show bgp summary fabric-color green
Threading mode: BGP I/O
Default eBGP mode: advertise - accept, receive - accept
Groups: 4 Peers: 3 Down peers: 0
Auto-discovered peers: 3
Table Tot Paths Act Paths Suppressed History Damp State Pending
inet6.0
0 0 0 0 0 0
Peer AS InPkt OutPkt OutQ Flaps Last Up/Dwn State|#Active/Received/Accepted/Damped...
fe80::9e5a:80ff:feef:a28f%et-0/0/0:0.0 101 301 300 0 0 2:14:08 Establ
inet6.0: 3/12/12/0
jnpr@stripe1-leaf1> show bgp summary fabric-color blue
Threading mode: BGP I/O
Default eBGP mode: advertise - accept, receive - accept
Groups: 4 Peers: 4 Down peers: 0
Auto-discovered peers: 4
Table Tot Paths Act Paths Suppressed History Damp State Pending
inet6.0
32 8 0 0 0 0
Peer AS InPkt OutPkt OutQ Flaps Last Up/Dwn State|#Active/Received/Accepted/Damped...
fe80::5a86:70ff:fe78:e0d5%et-0/0/1:0.0 102 174 177 0 0 1:16:45 Establ
inet6.0: 3/12/12/0
jnpr@stripe1-leaf1> show bgp summary fabric-color red
Threading mode: BGP I/O
Default eBGP mode: advertise - accept, receive - accept
Groups: 4 Peers: 3 Down peers: 0
Auto-discovered peers: 3
Table Tot Paths Act Paths Suppressed History Damp State Pending
inet6.0
0 0 0 0 0 0
Peer AS InPkt OutPkt OutQ Flaps Last Up/Dwn State|#Active/Received/Accepted/Damped...
fe80::5a86:70ff:fe7b:ced5%et-0/0/2:0.0 103 292 291 0 2 2:10:08 Establ
inet6.0: 3/12/12/0
jnpr@stripe1-leaf1> show bgp summary fabric-color orange
Threading mode: BGP I/O
Default eBGP mode: advertise - accept, receive - accept
Groups: 4 Peers: 3 Down peers: 0
Auto-discovered peers: 3
Table Tot Paths Act Paths Suppressed History Damp State Pending
inet6.0
0 0 0 0 0 0
Peer AS InPkt OutPkt OutQ Flaps Last Up/Dwn State|#Active/Received/Accepted/Damped...
fe80::5a86:70ff:fe79:3d5%et-0/0/3:0.0 104 292 291 0 2 2:10:11 Establ
inet6.0: 3/12/12/0
jnpr@stripe1-leaf1> show bgp neighbor auto-discovered
Peer: fe80::5a86:70ff:fe78:e0d5%et-0/0/1:0.0+179 AS 102 Local: fe80::9e5a:80ff:fec1:ae08%et-0/0/1:0.0+38208 AS 201
Group: spine2 Routing-Instance: master
Forwarding routing-instance: master
Type: External State: Established Flags: <Sync PeerAsList AutoDiscoveredNdp>
Last State: OpenConfirm Last Event: RecvKeepAlive
Last Error: None
Export: [ local ]
Options: <GracefulRestart AddressFamily Multipath LocalAS Refresh>
Options: <BfdEnabled>
Options: <GracefulShutdownRcv MultipathAllowProtection>
Address families configured: inet6-unicast
Holdtime: 90 Preference: 170
Graceful Shutdown Receiver local-preference: 0
Local AS: 201 Local System AS: 201
Number of flaps: 0
Receive eBGP Origin Validation community: Reject
Peer ID: 10.0.0.2 Local ID: 10.0.1.1 Active Holdtime: 90
Keepalive Interval: 30 Group index: 5 Peer index: 0 SNMP index: 33
I/O Session Thread: bgpio-0 State: Enabled
BFD: enabled, up
Local Interface: et-0/0/1:0.0
Fabric color: blue [color:0:2 ]
NLRI for restart configured on peer: inet6-unicast
NLRI advertised by peer: inet6-unicast
NLRI for this session: inet6-unicast
Peer supports Refresh capability (2)
Restart time configured on the peer: 120
Stale routes from peer are kept for: 300
Restart time requested by this peer: 120
Restart flag received from the peer: Notification
NLRI that peer supports restart for: inet6-unicast
NLRI peer can save forwarding state: inet6-unicast
NLRI that peer saved forwarding for: inet6-unicast
NLRI that restart is negotiated for: inet6-unicast
NLRI of received end-of-rib markers: inet6-unicast
NLRI of all end-of-rib markers sent: inet6-unicast
Peer does not support LLGR Restarter functionality
Peer supports 4 byte AS extension (peer-as 102)
Peer does not support Addpath
NLRI(s) enabled for color nexthop resolution: inet6-unicast
Table inet6.0 Bit: 30003
RIB State: BGP restart is complete
Send state: in sync
Active prefixes: 3
Received prefixes: 12
Accepted prefixes: 12
Suppressed due to damping: 0
Advertised prefixes: 4
Last traffic (seconds): Received 1 Sent 3 Checked 10485
Input messages: Total 394 Updates 11 Refreshes 0 Octets 8605
Output messages: Total 398 Updates 14 Refreshes 0 Octets 8874
Output Queue[2]: 0 (inet6.0, inet6-unicast)
---more---
jnpr@stripe1-leaf1> show bgp neighbor fabric-color green
Peer: fe80::9e5a:80ff:feef:a28f%et-0/0/0:0.0+179 AS 101 Local: fe80::9e5a:80ff:fec1:ae00%et-0/0/0:0.0+49626 AS 201
Group: spine1 Routing-Instance: master
Forwarding routing-instance: master
Type: External State: Established Flags: <Sync PeerAsList AutoDiscoveredNdp>
Last State: OpenConfirm Last Event: RecvKeepAlive
Last Error: None
Options: <GracefulRestart AddressFamily Multipath LocalAS Refresh>
Options: <BfdEnabled>
Options: <GracefulShutdownRcv MultipathAllowProtection>
Address families configured: inet6-unicast
Holdtime: 90 Preference: 170
Graceful Shutdown Receiver local-preference: 0
Local AS: 201 Local System AS: 201
Number of flaps: 0
Receive eBGP Origin Validation community: Reject
Peer ID: 10.0.0.1 Local ID: 10.0.1.1 Active Holdtime: 90
Keepalive Interval: 30 Group index: 4 Peer index: 0 SNMP index: 30
I/O Session Thread: bgpio-0 State: Enabled
BFD: enabled, up
Local Interface: et-0/0/0:0.0
Fabric color: green [color:0:1 ]
NLRI for restart configured on peer: inet6-unicast
NLRI advertised by peer: inet6-unicast
NLRI for this session: inet6-unicast
Peer supports Refresh capability (2)
Restart time configured on the peer: 120
Stale routes from peer are kept for: 300
Restart time requested by this peer: 120
Restart flag received from the peer: Notification
NLRI that peer supports restart for: inet6-unicast
NLRI peer can save forwarding state: inet6-unicast
NLRI that peer saved forwarding for: inet6-unicast
NLRI that restart is negotiated for: inet6-unicast
NLRI of received end-of-rib markers: inet6-unicast
NLRI of all end-of-rib markers sent: inet6-unicast
Peer does not support LLGR Restarter functionality
Peer supports 4 byte AS extension (peer-as 101)
Peer does not support Addpath
NLRI(s) enabled for color nexthop resolution: inet6-unicast
Table inet6.0 Bit: 30001
RIB State: BGP restart is complete
Send state: in sync
Active prefixes: 0
Received prefixes: 0
Accepted prefixes: 0
Suppressed due to damping: 0
Advertised prefixes: 4
Last traffic (seconds): Received 14 Sent 2 Checked 7803
Input messages: Total 292 Updates 1 Refreshes 0 Octets 5607
Output messages: Total 291 Updates 3 Refreshes 0 Octets 5797
Output Queue[2]: 0 (inet6.0, inet6-unicast)
jnpr@stripe1-leaf1> show bfd session
Detect Transmit
Address State Interface Time Interval Multiplier
fe80::9e5a:80ff:feef:a28f Up et-0/0/0:0.0 3.000 1.000 3
1 sessions, 1 clients
Cumulative transmit rate 1.0 pps, cumulative receive rate 1.0 pps
プレフィックスがすべてのピアに正しくアドバタイズされていることを確認するには、 show route advertising-protocol bgp <peer-address>を使用します。
jnpr@stripe1-leaf1> show route advertising-protocol bgp fe80::9e5a:80ff:feef:a28f%et-0/0/0:0.0 extensive
この例では、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のアドレスです。
jnpr@stripe1-leaf1> show route fc00:1:1:1::/64 extensive advertising-protocol bgp fe80::9e5a:80ff:feef:a28f%et-0/0/0:0.0
inet6.0: 49 destinations, 85 routes (49 active, 0 holddown, 0 hidden)
Restart Complete
* fc00:1:1:1::/64 (1 entry, 1 announced)
BGP group spine1 type External
Nexthop: Self
AS path: [201] I
Communities: color:0:1
AIGP: 0
jnpr@stripe1-leaf1> show route fc00:1:1:1::/64 extensive advertising-protocol bgp fe80::5a86:70ff:fe78:e0d5%et-0/0/1:0.0
inet6.0: 49 destinations, 85 routes (49 active, 0 holddown, 0 hidden)
Restart Complete
* fc00:1:1:1::/64 (1 entry, 1 announced)
BGP group spine2 type External
Nexthop: Self
AS path: [201] I
Communities: color:0:2
jnpr@stripe1-leaf1> show route fc00:1:1:1::/64 extensive advertising-protocol bgp fe80::5a86:70ff:fe7b:ced5%et-0/0/2:0.0
inet6.0: 49 destinations, 85 routes (49 active, 0 holddown, 0 hidden)
Restart Complete
* fc00:1:1:1::/64 (1 entry, 1 announced)
BGP group spine3 type External
Nexthop: Self
AS path: [201] I
Communities: color:0:3
jnpr@stripe1-leaf1> show route fc00:1:1:1::/64 extensive advertising-protocol bgp fe80::5a86:70ff:fe79:3d5%et-0/0/3:0.0
inet6.0: 49 destinations, 85 routes (49 active, 0 holddown, 0 hidden)
Restart Complete
* fc00:1:1:1::/64 (1 entry, 1 announced)
BGP group spine4 type External
Nexthop: Self
AS path: [201] I
Communities: color: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 /
| コンポーネントの | 説明/使用法 |
|---|---|
| /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ルールを追加する必要があります。
の例
jnpr-nccl-net-setupユーティリティのlive-runオプションを使用して、各サーバーに必要なテーブル、ルート、IPルールを自動的に作成できます。
jnpr@H100-01:/home/ijohnson/2.23.4-1/usr/local/bin$ jnpr-nccl-net-setup -h
Usage: jnpr-nccl-net-setup <subcommand> [--live-run] [--help | -h]
Subcommands:
dual-stack Enable dual stack (ipv4/ipv6) and accept router advertisements
clos Configure routes and rules for CLOS network
rail Configure routes and rules for Rail optimized network
auto Automatically configure routes and rules based on current interface IPs
Options:
--live-run Forces the script to do changes in the host, script defaults to dry-run
--help, -h Show this help message and exit
Examples:
export NCCL_SOCKET_IFNAME="gpu0_eth,gpu1_eth,gpu2_eth,gpu3_eth,gpu4_eth,gpu5_eth,gpu6_eth,gpu7_eth"
python jnpr-nccl-net-setup dual-stack
export NCCL_SOCKET_IFNAME="gpu0_eth,gpu1_eth,gpu2_eth,gpu3_eth,gpu4_eth,gpu5_eth,gpu6_eth,gpu7_eth"
export SUBNETS_ALL="fd00:1:1::/64,fd00:1:2::/64,fd00:1:3::/64,fd00:1:4::/64,fd00:1:5::/64,fd00:1:6::/64,fd00:1:7::/64,fd00:1:8::/64"
python jnpr-nccl-net-setup clos
export NCCL_SOCKET_IFNAME="eth0,eth1"
export SUBNETS_ETH0="192.168.1.0/24,192.168.2.0/24"
export SUBNETS_ETH1="10.0.0.0/24,10.0.1.0/24"
python jnpr-nccl-net-setup rail
export NCCL_SOCKET_IFNAME="gpu0_eth,gpu1_eth,gpu2_eth,gpu3_eth,gpu4_eth,gpu5_eth,gpu6_eth,gpu7_eth"
export NCCL_IB_ADDR_FAMILY="AF_INET" # or export NCCL_IB_ADDR_FAMILY="AF_INET6"
python jnpr-nccl-net-setup auto
このコマンドでは、以下の例に示すように、NCCLソケットインターフェイスとアドレスファミリーをエクスポートする必要があります。
sudo
NCCL_SOCKET_IFNAME="gpu0_eth,gpu1_eth,gpu2_eth,gpu3_eth,gpu4_eth,
gpu5_eth,gpu6_eth,gpu7_eth"
NCCL_IB_ADDR_FAMILY="AF_INET6"jnpr-nccl-net-setup auto
--live-run
ルーティングテーブル、ルート、ルールを手動で作成する必要がある場合は、以下の手順に従って、必要に応じてすべてのGPUサーバー上のテーブル、ルート、ルールを手動で構成します。
- ルーティングテーブルの作成
各サーバーの/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 user@H100-01:/etc/iproute2/rt_tables.d$ more jnpr_nccl_net.conf 10000 gpu0_subnet1 10001 gpu0_subnet2 10002 gpu0_subnet3 10003 gpu0_subnet4 10004 gpu1_subnet1 10005 gpu1_subnet2 10006 gpu1_subnet3 10007 gpu1_subnet4 10008 gpu2_subnet1 10009 gpu2_subnet2 10010 gpu2_subnet3 10011 gpu2_subnet4 10012 gpu3_subnet1 10013 gpu3_subnet2 10014 gpu3_subnet3 10015 gpu3_subnet4 10016 gpu4_subnet1 10017 gpu4_subnet2 10018 gpu4_subnet3 10019 gpu4_subnet4 10020 gpu5_subnet1 10021 gpu5_subnet2 10022 gpu5_subnet3 10023 gpu5_subnet4 10024 gpu6_subnet1 10025 gpu6_subnet2 10026 gpu6_subnet3 10027 gpu6_subnet4 10028 gpu7_subnet1 10029 gpu7_subnet2 10030 gpu7_subnet3 10031 gpu7_subnet4
- テーブルが作成されたことを確認します。
user@H100-01:/$ cat /etc/iproute2/rt_tables.d/ jnpr_nccl_net.conf 10000 gpu0_subnet1 10001 gpu0_subnet2 10002 gpu0_subnet3 10003 gpu0_subnet4 10004 gpu1_subnet1 10005 gpu1_subnet2 10006 gpu1_subnet3 10007 gpu1_subnet4 10008 gpu2_subnet1 10009 gpu2_subnet2 10010 gpu2_subnet3 10011 gpu2_subnet4 10012 gpu3_subnet1 10013 gpu3_subnet2 10014 gpu3_subnet3 10015 gpu3_subnet4 10016 gpu4_subnet1 10017 gpu4_subnet2 10018 gpu4_subnet3 10019 gpu4_subnet4 10020 gpu5_subnet1 10021 gpu5_subnet2 10022 gpu5_subnet3 10023 gpu5_subnet4 10024 gpu6_subnet1 10025 gpu6_subnet2 10026 gpu6_subnet3 10027 gpu6_subnet4 10028 gpu7_subnet1 10029 gpu7_subnet2 10030 gpu7_subnet3 10031 gpu7_subnet4
- 各ルーティングテーブルにIPv6ルートを追加します。
例に示すように、以下のコマンドを使用して、各ルーティングテーブルにデフォルトルートとプレフィックスルートを設定します。
ip -6 route add <PREFIX> dev <INTERFACE> table <TABLE> ip -6 route add default via <DEFAULT GATEWAY> dev <INTERFACE> table <TABLE>
必要なルートを作成する前にすべてのルートを削除する必要がある場合は、以下を実行することができます。
sudo ip -6 rule show | grep -E 'from <prefix-expression>' | sed 's/^[0-9]*: *//' | while read -r rule; do sudo ip -6 rule del $rule done
例:
表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
user@H100-01:/$ sudo ip -6 route add default via fc00:1:1:1::1 dev gpu0_eth table gpu0_subnet1 user@H100-01:/$ sudo ip -6 route add fc00:1:1:2::/64 dev gpu0_eth table gpu0_subnet2 user@H100-01:/$ sudo ip -6 route add default via fc00:1:1:2::1 dev gpu0_eth table gpu0_subnet2 . . .
Stripe2:
user@H100-03:/$ sudo ip -6 route add fc00:2:1:1::/64 dev gpu0_eth table gpu0_subnet1 user@H100-03:/$ sudo ip -6 route add default via fc00:2:1:1::1 dev gpu0_eth table gpu0_subnet1 user@H100-03:/$ sudo ip -6 route add fc00:2:1:2::/64 dev gpu0_eth table gpu0_subnet2 user@H100-03:/$ sudo ip -6 route add default via fc00:2:1:2::1 dev gpu0_eth table gpu0_subnet2 . . .
- ルート作成
の確認user@H100-01:/$ sudo ip -6 route show table 10000 fc00:1:1:1::/64 dev gpu0_eth metric 1024 pref medium default via fc00:1:1:1::1 dev gpu0_eth metric 1024 pref medium user@H100-01:/$ sudo ip -6 route show table 10001 fc00:1:1:2::/64 dev gpu0_eth metric 1024 pref medium default via fc00:1:1:2::1 dev gpu0_eth metric 1024 pref medium user@H100-01:/$ sudo ip -6 route show table 10002 fc00:1:1:3::/64 dev gpu0_eth metric 1024 pref medium default via fc00:1:1:3::1 dev gpu0_eth metric 1024 pref medium user@H100-01:/$ sudo ip -6 route show table 10003 fc00:1:1:4::/64 dev gpu0_eth metric 1024 pref medium default via fc00:1:1:4::1 dev gpu0_eth metric 1024 pref medium user@H100-01:/$ sudo ip -6 route show table 10004 fc00:1:2:1::/64 dev gpu1_eth metric 1024 pref medium default via fc00:1:2:1::1 dev gpu1_eth metric 1024 pref medium user@H100-01:/$ sudo ip -6 route show table 10005 fc00:1:2:2::/64 dev gpu1_eth metric 1024 pref medium default via fc00:1:2:2::1 dev gpu1_eth metric 1024 pref medium . . . user@H100-01:~$ sudo ip -6 route show table 10031 fc00:1:8:4::/64 dev gpu7_eth metric 1024 pref medium default via fc00:1:8:4::1 dev gpu7_eth metric 1024 pref medium
すべてのルートを削除する必要がある場合は、以下を実行します。
for table in $(seq <first table#> <last-table#); do sudo ip -6 route flush table $table done
例:
jnpr@H100-03:/etc/iproute2/rt_tables.d$ cat jnpr_nccl_net.conf 1001 gpu0_eth_subnet1 1002 gpu0_eth_subnet2 1003 gpu0_eth_subnet3 ---more--- 1090 gpu7_eth_subnet10 1091 gpu7_eth_subnet11 1092 gpu7_eth_subnet12 jnpr@H100-03:/etc/iproute2/rt_tables.d$ ip -6 route show table 1010 fc00:2:2:2::/64 dev gpu1_eth metric 1024 pref medium default via fc00:2:2:2::1 dev gpu1_eth metric 1024 pref medium jnpr@H100-03:/etc/iproute2/rt_tables.d$ ip -6 route show table 1020 fc00:2:3:4::/64 dev gpu2_eth metric 1024 pref medium default via fc00:2:3:4::1 dev gpu2_eth metric 1024 pref medium jnpr@H100-03:/etc/iproute2/rt_tables.d for table in $(seq <first table#> <last-table#); do sudo ip -6 route flush table $table done Flush terminated jnpr@H100-03:/etc/iproute2/rt_tables.d$ ip -6 route show table 1010 jnpr@H100-03:/etc/iproute2/rt_tables.d$ ip -6 route show table 1020 jnpr@H100-03:/etc/iproute2/rt_tables.d$
- ルーティングポリシールールを追加します。
例に示すように、以下のコマンドを使用して、各ルーティングテーブルのルーティングポリシールールを設定します。
sudo ip -6 rule add from <PREFIX> lookup gpu0_<TABLE>
表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 例:
user@H100-01:/$ sudo ip -6 rule add from fc00:1:1:1::/64 lookup gpu0_subnet1 sudo ip -6 rule add from fc00:1:1:2::/64 lookup gpu0_subnet2 sudo ip -6 rule add from fc00:1:1:3::/64 lookup gpu0_subnet3 sudo ip -6 rule add from fc00:1:1:4::/64 lookup gpu0_subnet4 sudo ip -6 rule add from fc00:1:2:1::/64 lookup gpu1_subnet1 sudo ip -6 rule add from fc00:1:2:2::/64 lookup gpu1_subnet2 sudo ip -6 rule add from fc00:1:2:3::/64 lookup gpu1_subnet3 sudo ip -6 rule add from fc00:1:2:4::/64 lookup gpu1_subnet4 sudo ip -6 rule add from fc00:1:3:1::/64 lookup gpu2_subnet1 sudo ip -6 rule add from fc00:1:3:2::/64 lookup gpu2_subnet2 sudo ip -6 rule add from fc00:1:3:3::/64 lookup gpu2_subnet3 sudo ip -6 rule add from fc00:1:3:4::/64 lookup gpu2_subnet4 sudo ip -6 rule add from fc00:1:4:1::/64 lookup gpu3_subnet1 sudo ip -6 rule add from fc00:1:4:2::/64 lookup gpu3_subnet2 sudo ip -6 rule add from fc00:1:4:3::/64 lookup gpu3_subnet3 sudo ip -6 rule add from fc00:1:4:4::/64 lookup gpu3_subnet4 sudo ip -6 rule add from fc00:1:5:1::/64 lookup gpu4_subnet1 sudo ip -6 rule add from fc00:1:5:2::/64 lookup gpu4_subnet2 sudo ip -6 rule add from fc00:1:5:3::/64 lookup gpu4_subnet3 sudo ip -6 rule add from fc00:1:5:4::/64 lookup gpu4_subnet4 sudo ip -6 rule add from fc00:1:6:1::/64 lookup gpu5_subnet1 sudo ip -6 rule add from fc00:1:6:2::/64 lookup gpu5_subnet2 sudo ip -6 rule add from fc00:1:6:3::/64 lookup gpu5_subnet3 sudo ip -6 rule add from fc00:1:6:4::/64 lookup gpu5_subnet4 sudo ip -6 rule add from fc00:1:7:1::/64 lookup gpu6_subnet1 sudo ip -6 rule add from fc00:1:7:2::/64 lookup gpu6_subnet2 sudo ip -6 rule add from fc00:1:7:3::/64 lookup gpu6_subnet3 sudo ip -6 rule add from fc00:1:7:4::/64 lookup gpu6_subnet4 sudo ip -6 rule add from fc00:1:8:1::/64 lookup gpu7_subnet1 sudo ip -6 rule add from fc00:1:8:2::/64 lookup gpu7_subnet2 sudo ip -6 rule add from fc00:1:8:3::/64 lookup gpu7_subnet3 sudo ip -6 rule add from fc00:1:8:4::/64 lookup gpu7_subnet4 user@H100-03:/$ sudo ip -6 rule add from fc00:2:1:1::/64 lookup gpu0_subnet1 sudo ip -6 rule add from fc00:2:1:2::/64 lookup gpu0_subnet2 sudo ip -6 rule add from fc00:2:1:3::/64 lookup gpu0_subnet3 sudo ip -6 rule add from fc00:2:1:4::/64 lookup gpu0_subnet4 sudo ip -6 rule add from fc00:2:2:1::/64 lookup gpu1_subnet1 sudo ip -6 rule add from fc00:2:2:2::/64 lookup gpu1_subnet2 sudo ip -6 rule add from fc00:2:2:3::/64 lookup gpu1_subnet3 sudo ip -6 rule add from fc00:2:2:4::/64 lookup gpu1_subnet4 sudo ip -6 rule add from fc00:2:3:1::/64 lookup gpu2_subnet1 sudo ip -6 rule add from fc00:2:3:2::/64 lookup gpu2_subnet2 sudo ip -6 rule add from fc00:2:3:3::/64 lookup gpu2_subnet3 sudo ip -6 rule add from fc00:2:3:4::/64 lookup gpu2_subnet4 sudo ip -6 rule add from fc00:2:4:1::/64 lookup gpu3_subnet1 sudo ip -6 rule add from fc00:2:4:2::/64 lookup gpu3_subnet2 sudo ip -6 rule add from fc00:2:4:3::/64 lookup gpu3_subnet3 sudo ip -6 rule add from fc00:2:4:4::/64 lookup gpu3_subnet4 sudo ip -6 rule add from fc00:2:5:1::/64 lookup gpu4_subnet1 sudo ip -6 rule add from fc00:2:5:2::/64 lookup gpu4_subnet2 sudo ip -6 rule add from fc00:2:5:3::/64 lookup gpu4_subnet3 sudo ip -6 rule add from fc00:2:5:4::/64 lookup gpu4_subnet4 sudo ip -6 rule add from fc00:2:6:1::/64 lookup gpu5_subnet1 sudo ip -6 rule add from fc00:2:6:2::/64 lookup gpu5_subnet2 sudo ip -6 rule add from fc00:2:6:3::/64 lookup gpu5_subnet3 sudo ip -6 rule add from fc00:2:6:4::/64 lookup gpu5_subnet4 sudo ip -6 rule add from fc00:2:7:1::/64 lookup gpu6_subnet1 sudo ip -6 rule add from fc00:2:7:2::/64 lookup gpu6_subnet2 sudo ip -6 rule add from fc00:2:7:3::/64 lookup gpu6_subnet3 sudo ip -6 rule add from fc00:2:7:4::/64 lookup gpu6_subnet4 sudo ip -6 rule add from fc00:2:8:1::/64 lookup gpu7_subnet1 sudo ip -6 rule add from fc00:2:8:2::/64 lookup gpu7_subnet2 sudo ip -6 rule add from fc00:2:8:3::/64 lookup gpu7_subnet3 sudo ip -6 rule add from fc00:2:8:4::/64 lookup gpu7_subnet4
- ルール作成の確認:
user@H100-01:/$ ip -6 rule show 0: from all lookup local 0: from fc00:1:1:1::/64 lookup gpu0_subnet1 0: from fc00:1:1:2::/64 lookup gpu0_subnet2 0: from fc00:1:1:3::/64 lookup gpu0_subnet3 0: from fc00:1:1:4::/64 lookup gpu0_subnet4 0: from fc00:1:2:1::/64 lookup gpu1_subnet1 0: from fc00:1:2:2::/64 lookup gpu1_subnet2 0: from fc00:1:2:3::/64 lookup gpu1_subnet3 0: from fc00:1:2:4::/64 lookup gpu1_subnet4 0: from fc00:1:3:1::/64 lookup gpu2_subnet1 0: from fc00:1:3:2::/64 lookup gpu2_subnet2 0: from fc00:1:3:3::/64 lookup gpu2_subnet3 0: from fc00:1:3:4::/64 lookup gpu2_subnet4 0: from fc00:1:4:1::/64 lookup gpu3_subnet1 0: from fc00:1:4:2::/64 lookup gpu3_subnet2 0: from fc00:1:4:3::/64 lookup gpu3_subnet3 0: from fc00:1:4:4::/64 lookup gpu3_subnet4 0: from fc00:1:5:1::/64 lookup gpu4_subnet1 0: from fc00:1:5:2::/64 lookup gpu4_subnet2 0: from fc00:1:5:3::/64 lookup gpu4_subnet3 0: from fc00:1:5:4::/64 lookup gpu4_subnet4 0: from fc00:1:6:1::/64 lookup gpu5_subnet1 0: from fc00:1:6:2::/64 lookup gpu5_subnet2 0: from fc00:1:6:3::/64 lookup gpu5_subnet3 0: from fc00:1:6:4::/64 lookup gpu5_subnet4 0: from fc00:1:7:1::/64 lookup gpu6_subnet1 0: from fc00:1:7:2::/64 lookup gpu6_subnet2 0: from fc00:1:7:3::/64 lookup gpu6_subnet3 0: from fc00:1:7:4::/64 lookup gpu6_subnet4 0: from fc00:1:8:1::/64 lookup gpu7_subnet1 0: from fc00:1:8:2::/64 lookup gpu7_subnet2 0: from fc00:1:8:3::/64 lookup gpu7_subnet3 0: from fc00:1:8:4::/64 lookup gpu7_subnet4
すべてのルールを削除する必要がある場合は、以下を実行します。
sudo ip -6 rule show | grep -E 'from <prefix-expression>' | sed 's/^[0-9]*: *//' | while read -r rule; do sudo ip -6 rule del $rule
例:
jnpr@H100-03:~$ sudo ip -6 rule 0: from all lookup local 32738: from fc00:2:8:4::/64 lookup gpu7_eth_subnet4 32739: from fc00:2:8:3::/64 lookup gpu7_eth_subnet3 32740: from fc00:2:8:2::/64 lookup gpu7_eth_subnet2 32741: from fc00:2:8:1::/64 lookup gpu7_eth_subnet1 32742: from fc00:2:6:4::/64 lookup gpu5_eth_subnet4 32743: from fc00:2:6:3::/64 lookup gpu5_eth_subnet3 32744: from fc00:2:6:2::/64 lookup gpu5_eth_subnet2 32745: from fc00:2:6:1::/64 lookup gpu5_eth_subnet1 32746: from fc00:2:5:4::/64 lookup gpu4_eth_subnet4 32747: from fc00:2:5:3::/64 lookup gpu4_eth_subnet3 32748: from fc00:2:5:2::/64 lookup gpu4_eth_subnet2 32749: from fc00:2:5:1::/64 lookup gpu4_eth_subnet1 32750: from fc00:2:4:4::/64 lookup gpu3_eth_subnet4 32751: from fc00:2:4:3::/64 lookup gpu3_eth_subnet3 32752: from fc00:2:4:2::/64 lookup gpu3_eth_subnet2 32753: from fc00:2:4:1::/64 lookup gpu3_eth_subnet1 32754: from fc00:2:3:4::/64 lookup gpu2_eth_subnet4 32755: from fc00:2:3:3::/64 lookup gpu2_eth_subnet3 32756: from fc00:2:3:2::/64 lookup gpu2_eth_subnet2 32757: from fc00:2:3:1::/64 lookup gpu2_eth_subnet1 32758: from fc00:2:2:4::/64 lookup gpu1_eth_subnet4 32759: from fc00:2:2:3::/64 lookup gpu1_eth_subnet3 32760: from fc00:2:2:2::/64 lookup gpu1_eth_subnet2 32761: from fc00:2:2:1::/64 lookup gpu1_eth_subnet1 32762: from fc00:2:1:4::/64 lookup gpu0_eth_subnet4 32763: from fc00:2:1:3::/64 lookup gpu0_eth_subnet3 32764: from fc00:2:1:2::/64 lookup gpu0_eth_subnet2 32765: from fc00:2:1:1::/64 lookup gpu0_eth_subnet1 32766: from all lookup main jnpr@H100-03:~$ sudo ip -6 rule show | grep -E 'from fd00:|from fc00:' | sed 's/^[0-9]*: *//' | while read -r rule; do sudo ip -6 rule del $rule done jnpr@H100-03:~$ sudo ip -6 rule 0: from all lookup local 32766: from all lookup main
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 |
| 変数 | の説明 | 値がデフォルトで受け入れられます | |
|---|---|---|---|
| NCCL_NET_PLUGIN (2.11以降) |
接尾辞文字列またはライブラリ名のいずれかに設定して、複数のNCCLネットプラグインから選択します。この設定により、NCCL は次の戦略を使用して net プラグイン ライブラリを検索します。
たとえば、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の数が増えるにつれて改善し、アップリンクとキューペアの数が同じであれば最大値に達します。このポイントを超えて数を増やしても、何のメリットもなく、パフォーマンスが大幅に低下することさえあります。
| アップリンク数 | 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 で完了しました。