このページの内容
NVIDIAの設定
NVIDIA® ConnectX® ファミリーのネットワーク インターフェイス カード (NIC) は、高度なハードウェア オフロードおよびアクセラレーション機能と最大 400G の速度を提供し、イーサネット プロトコルと Infiniband プロトコルの両方をサポートします。
変更を行う際は、必ず製造元の公式ドキュメントを参照してください。このセクションでは、AI JVDラボテストに基づくガイドラインをいくつか示します。
NVIDIA ConnectX NIC を Infiniband からイーサネットに変換する
デフォルトでは、NVIDIA ConnectX NIC は Infiniband インターフェイスとして動作するように設定されており、mlxconfig ツールを使用してイーサネットに変換する必要があります。
1) sudo mst status を使用して ConnectX NIC のステータスを確認します。
-
user@A100-01:/dev/mst$ sudo mst -h Usage: /usr/bin/mst {start|stop|status|remote|server|restart|save|load|rm|add|help|version|gearbox|cable} Type "/usr/bin/mst help" for detailed help user@A100-01:/dev/mst$ sudo mst status | egrep "module|load" MST modules: MST PCI module loaded MST PCI configuration module loaded
必要に応じて、mstサービスを開始するか、mstモジュールをロードします。
例:
-
user@H100-01:~$ sudo mst start Starting MST (Mellanox Software Tools) driver set Loading MST PCI module - Success [warn] mst_pciconf is already loaded, skipping Create devices Unloading MST PCI module (unused) - Success user@A100-01:~/scripts$ sudo mst status MST modules: ------------ MST PCI module is not loaded MST PCI configuration module loaded
modprobe mst_pci.
-
user@A100-01:/dev/mst$ sudo modprobe mst_pci user@A100-01:/dev/mst$ sudo mst status MST modules: ------------ MST PCI module loaded MST PCI configuration module loaded
2)変換したいインターフェイスを特定し、
この sudo mst status -v コマンドは、以下の例に示すように、システムで検出された Mellanox デバイス (ConnectX-6 および ConnectX-7 NIC) のリストと、そのタイプ、Mellanox デバイス名、PCI アドレス、RDMA インターフェイス名、NET インターフェイス名、NUMA ID を提供します。
-
user@A100-01:/dev/mst$ sudo mst status -v MST modules: ------------ MST PCI module loaded MST PCI configuration module loaded PCI devices: ------------ DEVICE_TYPE MST PCI RDMA NET NUMA ConnectX7(rev:0) /dev/mst/mt4129_pciconf7.1 cb:00.1 mlx5_13 net-eth13 1 ConnectX7(rev:0) /dev/mst/mt4129_pciconf7 cb:00.0 mlx5_12 net-gpu6_eth 1 ConnectX7(rev:0) /dev/mst/mt4129_pciconf6.1 c8:00.1 mlx5_11 net-enp200s0f1np1 1 ConnectX7(rev:0) /dev/mst/mt4129_pciconf6 c8:00.0 mlx5_10 net-gpu7_eth 1 ConnectX7(rev:0) /dev/mst/mt4129_pciconf5.1 8e:00.1 mlx5_19 net-eth19 1 ConnectX7(rev:0) /dev/mst/mt4129_pciconf5 8e:00.0 mlx5_18 net-gpu5_eth 1 ConnectX7(rev:0) /dev/mst/mt4129_pciconf4.1 8b:00.1 mlx5_17 net-enp139s0f1np1 1 ConnectX7(rev:0) /dev/mst/mt4129_pciconf4 8b:00.0 mlx5_1 net-gpu4_eth 1 ConnectX7(rev:0) /dev/mst/mt4129_pciconf3.1 52:00.1 mlx5_3 net-enp82s0f1np1 0 ConnectX7(rev:0) /dev/mst/mt4129_pciconf3 52:00.0 mlx5_2 net-gpu3_eth 0 ConnectX7(rev:0) /dev/mst/mt4129_pciconf2.1 51:00.1 mlx5_1 net-enp81s0f1np1 0 ConnectX7(rev:0) /dev/mst/mt4129_pciconf2 51:00.0 mlx5_0 net-gpu2_eth 0 ConnectX7(rev:0) /dev/mst/mt4129_pciconf1.1 11:00.1 mlx5_9 net-enp17s0f1np1 0 ConnectX7(rev:0) /dev/mst/mt4129_pciconf1 11:00.0 mlx5_8 net-gpu1_eth 0 ConnectX7(rev:0) /dev/mst/mt4129_pciconf0.1 0e:00.1 mlx5_7 net-enp14s0f1np1 0 ConnectX7(rev:0) /dev/mst/mt4129_pciconf0 0e:00.0 mlx5_6 net-gpu0_eth 0 ConnectX6DX(rev:0) /dev/mst/mt4125_pciconf0.1 2c:00.1 mlx5_5 net-enp44s0f1np1 0 ConnectX6DX(rev:0) /dev/mst/mt4125_pciconf0 2c:00.0 mlx5_4 net-mgmt_eth 0 ConnectX6(rev:0) /dev/mst/mt4123_pciconf0.1 a9:00.1 mlx5_15 net-eth15 1 ConnectX6(rev:0) /dev/mst/mt4123_pciconf0 a9:00.0 mlx5_14 net-weka_eth 1 Cable devices: --------------- mt4129_pciconf7_cable_0 mt4129_pciconf6_cable_0 mt4129_pciconf5_cable_0 mt4129_pciconf4_cable_0 mt4129_pciconf3_cable_0 mt4129_pciconf2_cable_0 mt4129_pciconf1_cable_0 mt4129_pciconf0_cable_0 mt4125_pciconf0_cable_0 mt4123_pciconf0_cable_0
リストの最初のインターフェイスでは、以下を識別できます。
- タイプ = ConnectX7(rev:0)
- Mellanox デバイス名 = mt4129_pciconf7(/dev/mst/mt4129_pciconf7)
- PCIアドレス = cb:00.0
- RDMAインターフェイス名 = mlx5_12
- NET インターフェイス名 = net-gpu6_eth
- NUMA = 1
一部のインターフェイスでは、名前が標準のLinuxインターフェイス命名スキームに従っていますが(例:net-enp14s0f1np1)、他のインターフェイスではそうではないことに注意してください(例:net-gpu0_eth)。標準に準拠していないインターフェイス名は、簡単に識別できるようにユーザーが定義した名前です。つまり、デフォルト名が /etc/netplan/ で変更されました。このセクションの後半で、これを行う方法の例を示します。
3) 以下を使用して、特定のインターフェイスが実行されているモードを特定します。
mlxconfig -d <device>クエリ
例:
-
user@A100-01:~/scripts$ sudo mlxconfig -d /dev/mst/mt4129_pciconf7query | grep LINK_TYPE LINK_TYPE_P1 IB(1) LINK_TYPE_P2 IB(1) <= indicates link is operating in Infiniband mode
パス(/dev/mst/mt4129_pciconf7)を含むMellanoxデバイス名を使用する必要があることに注意してください。
また、LINK_TYPE_P1とLINK_TYPE_P2は、デュアルポートMellanoxアダプターの2つの物理ポートを指します。
4) インターフェイスがInfinibandモードで動作している場合、を使用してイーサネットモードのモードを変更できます。
mlxconfig -d <device> set [LINK_TYPE_P1=
例文
-
user@A100-01:~/scripts$ sudo mlxconfig -d /dev/mst/mt4129_pciconf7 set LINK_TYPE_P1=2 LINK_TYPE_P2=2 Device #1: ---------- Device type: ConnectX7 Name: MCX755106AS-HEA_Ax Description: NVIDIA ConnectX-7 HHHL Adapter Card; 200GbE (default mode) / NDR200 IB; Dual-port QSFP112; PCIe 5.0 x16 with x16 PCIe extension option; Crypto Disabled; Secure Boot Enabled Device: /dev/mst/mt4129_pciconf7 Configurations: Next Boot New LINK_TYPE_P1 ETH(2) ETH(2) LINK_TYPE_P2 ETH(2) ETH(2) Apply new Configuration? (y/n) [n] : y Applying... Done! -I- Please reboot machine to load new configurations. user@A100-01:~/scripts$ sudo mlxconfig -d /dev/mst/mt4129_pciconf7query | grep LINK_TYPE LINK_TYPE_P1 ETH(2) LINK_TYPE_P2 ETH(2) <= indicates link is operating in Ethernet mode
ここでも、パス(/dev/mst/mt4129_pciconf7)を含むMellanoxデバイス名を使用する必要があることに注意してください。
インターフェイスのステータスを確認するには、mlxlinkを使用できます。
-
user@A100-01:/dev/mst$ sudo mlxlink -d /dev/mst/mt4129_pciconf4 Operational Info ---------------- State : Active Physical state : LinkUp Speed : 200G Width : 4x FEC : Standard_RS-FEC - (544,514) Loopback Mode : No Loopback Auto Negotiation : ON Supported Info -------------- Enabled Link Speed (Ext.) : 0x00003ff2 (200G_2X,200G_4X,100G_1X,100G_2X,100G_4X,50G_1X,50G_2X,40G,25G,10G,1G) Supported Cable Speed (Ext.) : 0x000017f2 (200G_4X,100G_2X,100G_4X,50G_1X,50G_2X,40G,25G,10G,1G) Troubleshooting Info -------------------- Status Opcode : 0 Group Opcode : N/A Recommendation : No issue was observed Tool Information ---------------- Firmware Version : 28.39.2048 amBER Version : 2.22 MFT Version : mft 4.26.0-93
詳細については、以下を参照してください。
Mellanox アダプターの種類とファームウェア/ドライバーのバージョンを見つける方法 (Linux) (nvidia.com)
NICとGPUのマッピングの識別と適切なインターフェイス名の割り当て
NIC は、いつでもどの GPU でも使用できます。特定のGPUが特定のNICカードを使用して外部とのみ通信できることはハードコードされていません。ただし、GPU と NIC の間には優先される通信パスがあり、場合によっては 1:1 の対応と見なすことができます。これは、以下の手順で示されます。
NCCL(NVIDIA Collective Communications Library)は、特定のGPUからいずれかのNICへの接続が最適なパスを選択します。
NCCL によって選択されたパスと、GPU と NIC の間の最適なパスを特定するには、次の手順に従います。
システムに関するトポロジー情報を表示するnvidia-smi topo -mコマンドを使用して、GPUとNIC間の接続タイプを特定します。
例 :
- DGX H100:
図92.Nvidia H100システム管理インターフェイス(SMI)システムトポロジー情報
私たちの調査によると:
表26:接続タイプごとのパフォーマンス
| 接続タイプ | 説明 | パフォーマンス |
| PIX | 同じスイッチ上のPCIe | 良い |
| PXB | 複数のスイッチを介したPCIeだが、ホストブリッジではない | 良い |
| PHB | PCIeスイッチと同じNUMA上のホストブリッジ間 - CPUを使用 | OK |
| ノード | PCIeスイッチと複数のホストブリッジを同じNUMAにまたがる | 悪い |
| システム | PCIe スイッチと NUMA ノード間の QPI/UPI バス間 - CPU を使用 | 非常に悪い |
| ネバダ州# | NVLink | とても良い |
- HGX A100:
図93.Nvidia A100 システム管理インターフェイス(SMI)システムトポロジー情報
PBX接続を特定する
nvidia-smi 出力の強調表示されたセクションに注目すると、各 GPU に PXB タイプの NIC 接続が 1 つ以上あることがわかります。これは、各GPUから特定のNICへの優先される「直接」パスです。つまり、GPU がリモート デバイスと通信する必要がある場合、最初のオプションとしてこれらの特定の NIC の 1 つが使用されます。
- DGX H100:
図94.Nvidia H100システム管理インターフェイス(SMI)システムトポロジーPBX接続
図95.Nvidia H100 システム アーキテクチャ
- HGX A100:
図96.Nvidia A100システム管理インターフェイス(SMI)システムトポロジーPBX接続
図97.Nvidia A100システムアーキテクチャ
これらのマッピングは、Nvidia の A100 または H100 ユーザー ガイドでも見つけることができます。
たとえば、DGX H100/H200 システムでは、 NVIDIA の DGX H100/H200 システムユーザーガイドの表 5 および表 6 に従ったポートマッピングは次のとおりです。
表27:GPUからNICへのマッピング
| ポート | コネクトX | GPU | デフォルト | RDMA | NIC |
| OSFP4P2 | CX1 | 0 | IBP24S0 | mlx5_0 | NIC0 |
| OSFP3P2 | CX3 | 1 | IBP64S0 | mlx5_3 | NIC3 |
| OSFP3P1 | CX2 | 2 | IBP79S0 | mlx5_4 | NIC4 |
| OSFP4P1 | CX0 | 3 | IBP94S0 | mlx5_5 | NIC5 |
| OSFP1P2 | CX1 | 4 | IBP154S0 | mlx5_6 | NIC6 |
| OSFP2P2 | CX3 | 5 | IBP192S0 | mlx5_9 | NIC9 |
| OSFP2P1 | CX2 | 6 | IBP206S0 | mlx5_10 | NIC10 |
| OSFP1P1 | CX0 | 7 | IBP220S0 | mlx5_11 | NIC11 |
表28:GPUからNICへの接続
| NIC | GPU0 | GPU1 | GPU2 | GPU3 | GPU4 | GPU5 | GPU6 | GPU7 |
| NIC0 | PXB | システム | システム | システム | システム | システム | システム | システム |
| NIC3 | システム | PXB | システム | システム | システム | システム | システム | システム |
| NIC4 | システム | システム | PXB | システム | システム | システム | システム | システム |
| NIC5 | システム | システム | システム | PXB | システム | システム | システム | システム |
| NIC6 | システム | システム | システム | システム | PXB | システム | システム | システム |
| NIC9 | システム | システム | システム | システム | システム | PXB | システム | システム |
| NIC10 | システム | システム | システム | システム | システム | システム | PXB | システム |
| NIC11 | システム | システム | システム | システム | システム | システム | システム | PXB |
図98.Nvidia H100 フロント パネル
詳細およびA100システムのマッピングについては、以下を確認してください。
NVIDIA HGX A100 システムの紹介 — NVIDIA HGX A100 ユーザーガイド 1 ドキュメント
NVIDIA DGX H100/H200 システムの概要 — NVIDIA DGX H100/H200 ユーザー ガイド 1 ドキュメント
NICのインターフェイス名の変更、およびIPアドレスとルートの割り当て
IPアドレスやインターフェイス名などのNIC属性は、ネットプランを編集して再適用することで作成できます。
ネットワーク設定は、以下の表の例に示すように、ファイル/etc/netplan/01-netcfg.yamlに記述されています。属性の変更には、このセクションの後半の例で示すように、このファイルを編集し、ネットワークプランを再適用する必要があります。
表29:Nvidia HGX A100インターフェイス設定例:
| netcfg.yaml出力 | ||
| jvd@A100-01:/etc/netplan$ more 01-netcfg.yaml | ||
| # これは 'subiquity' によって書かれたネットワーク設定です | gpu0_eth: | gpu4_eth: |
| ネットワーク: | 一致: | 一致: |
| バージョン:2 | MACアドレス: 94:6D:AE:54:72:22 | MACアドレス: 94:6D:AE:5B:28:70 |
| イーサネット: | dhcp4:false | dhcp4:false |
| mgmt_eth: | MTU:9000 | MTU:9000 |
| 一致: | アドレス: | アドレス: |
| MACアドレス:7C:C2:55:42:B2:28 | - 10.200.0.8/24 | - 10.200.4.8/24 |
| dhcp4:false | ルート: | ルート: |
| アドレス: | - 宛先:10.200.0.0/16 | - 宛先:10.200.0.0/16 |
| - 10.10.1.0/31 | 経由: 10.200.0.254 | 経由:10.200.4.254 |
| ネームサーバー: | 送信元: 10.200.0.8 | 送信元: 10.200.4.8 |
| アドレス: | セット名:gpu0_eth | セット名:gpu4_eth |
| - 8.8.8.8 | gpu1_eth: | gpu5_eth: |
| ルート: | 一致: | 一致: |
| - to: デフォルト | MACアドレス: 94:6D:ae:5b:01:d0 | MACアドレス: 94:6D:ae:5b:27:f0 |
| 経由:10.10.1.1 | dhcp4:false | dhcp4:false |
| セット名:mgmt_eth | MTU:9000 | MTU:9000 |
| weka_eth: | アドレス: | アドレス: |
| 一致: | - 10.200.1.8/24 | - 10.200.5.8/24 |
| MACアドレス: B8:3F:D2:8B:68:E0 | ルート: | ルート: |
| dhcp4:false | - 宛先:10.200.0.0/16 | - 宛先:10.200.0.0/16 |
| MTU:9000 | 経由: 10.200.1.254 | 経由: 10.200.5.254 |
| アドレス: | 送信元: 10.200.1.8 | 送信元: 10.200.5.8 |
| - 10.100.1.0/31 | セット名:gpu1_eth | セット名:gpu5_eth |
| ルート: | gpu2_eth: | gpu6_eth: |
| - 宛先:10.100.0.0/22 | 一致: | 一致: |
| 経由:10.100.1.1 | MACアドレス:94:6D:AE:5B:28:60 | MACアドレス: 94:6D:AE:54:78:E2 |
| セット名:weka_eth | dhcp4:false | dhcp4:false |
| MTU:9000 | MTU:9000 | |
| アドレス: | アドレス: | |
| - 10.200.2.8/24 | - 10.200.6.8/24 | |
| ルート: | ルート: | |
| - 宛先:10.200.0.0/16 | - 宛先:10.200.0.0/16 | |
| 経由: 10.200.2.254 | 経由: 10.200.6.254 | |
| 送信元: 10.200.2.8 | 送信元: 10.200.6.8 | |
| セット名:gpu2_eth | セット名:gpu6_eth | |
| gpu3_eth: | gpu7_eth: | |
| 一致: | 一致: | |
| MACアドレス: 94:6D:AE:5B:01:E0 | MACアドレス:94:6D:AE:54:72:12 | |
| dhcp4:false | dhcp4:false | |
| MTU:9000 | MTU:9000 | |
| アドレス: | アドレス: | |
| - 10.200.3.8/24 | - 10.200.7.8/24 | |
| ルート: | ルート: | |
| - 宛先:10.200.0.0/16 | - 宛先:10.200.0.0/16 | |
| 経由:10.200.3.254 | 経由:10.200.7.254 | |
| 送信元: 10.200.3.8 | 送信元: 10.200.7.8 | |
| セット名:gpu3_eth | セット名:gpu7_eth | |
特定の NIC(物理インターフェイス)へのインターフェイス名のマッピング
設定ファイル内の物理インターフェイスのMACにインターフェイス名をマッピングします。
図99.Nvidia A100 物理インターフェイス識別例
ここで:
en = イーサネットネットワークインターフェイス。
P203S0 = ネットワークインターフェイスの物理的な場所。
203番のバス番号。
s0 = バス上のスロット番号 0。
f1 = ネットワークインターフェイスの関数番号1。
np1 = ネットワークポート1
関数0:プライマリイーサネットインターフェイスである可能性があります。
機能1: 2番目のイーサネットインターフェイスである可能性があります。
機能2:管理インターフェイスまたは診断インターフェイスである可能性があります。
図100.Nvidia A100 ネットプラン ファイル変更例
すべての論理インターフェイスの名前は、devnamesファイルにあります。
-
user@A100-01:/etc/network$ more devnames enp139s0f0np0:Mellanox Technologies MT2910 Family [ConnectX-7] enp139s0f1np1:Mellanox Technologies MT2910 Family [ConnectX-7] enp142s0f0np0:Mellanox Technologies MT2910 Family [ConnectX-7] enp142s0f1np1:Mellanox Technologies MT2910 Family [ConnectX-7] enp14s0f0np0:Mellanox Technologies MT2910 Family [ConnectX-7] enp14s0f1np1:Mellanox Technologies MT2910 Family [ConnectX-7] enp17s0f0np0:Mellanox Technologies MT2910 Family [ConnectX-7] enp17s0f1np1:Mellanox Technologies MT2910 Family [ConnectX-7] enp200s0f0np0:Mellanox Technologies MT2910 Family [ConnectX-7] enp200s0f1np1:Mellanox Technologies MT2910 Family [ConnectX-7] enp203s0f0np0:Mellanox Technologies MT2910 Family [ConnectX-7] enp203s0f1np1:Mellanox Technologies MT2910 Family [ConnectX-7] enp44s0f0:Intel Corporation Ethernet Controller X710 for 10GBASE-T enp44s0f1:Intel Corporation Ethernet Controller X710 for 10GBASE-T enp44s0f2:Intel Corporation Ethernet Controller X710 for 10 Gigabit SFP+ enp44s0f3:Intel Corporation Ethernet Controller X710 for 10 Gigabit SFP+ enp81s0f0np0:Mellanox Technologies MT2910 Family [ConnectX-7] enp81s0f1np1:Mellanox Technologies MT2910 Family [ConnectX-7] enp82s0f0np0:Mellanox Technologies MT2910 Family [ConnectX-7] enp82s0f1np1:Mellanox Technologies MT2910 Family [ConnectX-7] ibp169s0f0:Mellanox Technologies MT28908 Family [ConnectX-6] ibp169s0f1:Mellanox Technologies MT28908 Family [ConnectX-6]
netplan applyコマンドを使用して変更を適用します
図101.Nvidia A100 ネットプランの適用例
NIC名の変更
設定ファイルのset-nameの値を変更し、変更を保存します。
図102.Nvidia A100 ネットプラン インターフェイス名の変更例
netplan applyコマンドを使用して変更を適用する
図103.Nvidia A100ネットプランインターフェイス名変更アプリケーションと検証例
現在のIPアドレスを変更するか、IPアドレスをNICに割り当てるには
設定ファイルの適切なインターフェイスの下にアドレスを変更または追加し、変更を保存します。
図104.Nvidia A100 ネットプラン インターフェイスの IP アドレス変更例
先頭にハイフンを付けてインデントしたIPアドレスを入力します。サブネットマスクを必ず追加してください。
netplan applyコマンドを使用して変更を適用する
図105.Nvidia A100 netplanインターフェース、新規IPアドレスの適用および検証例
NICへのルートの変更または追加
設定ファイルの適切なインターフェイスでルートを変更または追加し、変更を保存します。
図106.Nvidia A100 netplan追加ルートの例
netplan applyコマンドを使用して変更を適用します
図107.Nvidia A100 netplan追加ルートアプリケーションと検証例:
NVIDIA DCQCNの設定 – ECN
図108:NVIDIA DCQCN – ECN
MLNX_OFED 4.1以降、ECNはデフォルトで(ファームウェア内)有効になっています。
ECNが有効になっていることを確認するには、次のコマンドを使用します: mlxconfig -d <device> q | grep ROCE_CC
例:
-
root@A100-01:/home/ylara# mlxconfig -d mlx5_0 q | grep ROCE_CC ROCE_CC_PRIO_MASK_P1 255 ROCE_CC_PRIO_MASK_P2 255
マスク255は、NICで設定されたすべてのTC(トラフィッククラス)でDCQCN(ECN)が有効であることを意味します。
ECNを無効にするには、次のコマンドを使用してマスクを変更できます: mlxconfig -d <device> s ROCE_CC_PRIO_MASK_P1=<mask>
例:
-
root@A100-01:/home/ylara# sudo mlxconfig -d mlx5_0 s ROCE_CC_PRIO_MASK_P1=0 Device #1: ---------- Device type: ConnectX7 Name: MCX755106AS-HEA_Ax Description: NVIDIA ConnectX-7 HHHL Adapter Card; 200GbE (default mode) / NDR200 IB; Dual-port QSFP112; PCIe 5.0 x16 with x16 PCIe extension option; Crypto Disabled; Secure Boot Enabled Device: mlx5_0 Configurations: Next Boot New ROCE_CC_PRIO_MASK_P1 0 0 Apply new Configuration? (y/n) [n] :
新しい設定を適用するかどうかを尋ねられないようにするには、次の例に示すように、-y オプションを含めます。
-
root@A100-01:/home/ylara# sudo mlxconfig -d mlx5_0 -y s ROCE_CC_PRIO_MASK_P1=0 Device #1: ---------- Device type: ConnectX7 Name: MCX755106AS-HEA_Ax Description: NVIDIA ConnectX-7 HHHL Adapter Card; 200GbE (default mode) / NDR200 IB; Dual-port QSFP112; PCIe 5.0 x16 with x16 PCIe extension option; Crypto Disabled; Secure Boot Enabled Device: mlx5_0 Configurations: Next Boot New ROCE_CC_PRIO_MASK_P1 0 0 Apply new Configuration? (y/n) [n] : y Applying... Done! -I- Please reboot machine to load new configurations.
出力には、サーバーの再起動が必要であることが示されています。別の方法として、mlxfwreset -d <device> -l 3 -y r コマンドを使用してインターフェイスをリセットすることもできます。
例:
-
root@A100-01:/home/ylara# mlxfwreset -d mlx5_0 -l 3 -y r Requested reset level for device, /dev/mst/mt4129_pciconf2: 3: Driver restart and PCI reset Continue with reset?[y/N] y -I- Sending Reset Command To Fw -Done -I- Stopping Driver -Done -I- Resetting PCI -Done -I- Starting Driver -Done -I- Restarting MST -Done -I- FW was loaded successfully.
ECN操作パラメーターは、次のパスにあります/sys/class/net/<interface>/ecn
インターフェイスを見つけるには、次のコマンドを使用します。
-
jvd@A100-01:~/$ ls /sys/class/net/ docker0 enp14s0f1np1 enp17s0f1np1 enp44s0f1np1 gpu0_eth gpu3_eth gpu6_eth mgmt_eth enp139s0f1np1 enp169s0f0np0 enp200s0f1np1 enp81s0f1np1 gpu1_eth gpu4_eth gpu7_eth usb0 enp142s0f1np1 enp169s0f1np1 enp203s0f1np1 enp82s0f1np1 gpu2_eth gpu5_eth lo jvd@A100-01:/sys/class/net/gpu0_eth/ecn$ ls roce_np roce_rp
通知ポイント(NP)パラメーター
ECN対応の受信側は、ECNでマークされたRoCEパケットを受信すると、CNP(Congestion Notification Packets)を送信して応答します。
以下のコマンドは、通知パラメーターを記述します。
-
jvd@A100-01:/sys/class/net/gpu0_eth/ecn$ ls /roce_np/ cnp_802p_prio cnp_dscp enable min_time_between_cnps
例:
-
jvd@A100-01:/sys/class/net/gpu0_eth/ecn$ cat roce_np/cnp_802p_prio 6
cnp_802p_prio = CNP パケットの PCP(プライオリティ コード ポイント)フィールドの値。
PCPは、IEEE 802.1Qで定義されているVLANタグ付きフレームを使用する場合のイーサネットフレームヘッダー内の3ビットフィールドです。
-
jvd@A100-01:/sys/class/net/gpu0_eth/ecn$ cat roce_np/cnp_dscp 48
cnp_dscp = CNPパケットのDSCP(Differentiated Services Code Point)フィールドの値。
-
jvd@A100-01:/sys/class/net/gpu0_eth/ecn$ cat roce_np/min_time_between_cnps 4
min_time_between_cnps = 連続して送信された 2 つの CNP 間の最小時間。ECNでマークされたRoCEパケットが、前回送信されたCNPからmin_time_between_cnps未満の期間に到着した場合、CNPは応答として送信されません。この値はマイクロ秒単位です。デフォルト = 0
-
jvd@A100-01:/sys/class/net/gpu0_eth/ecn$ cat roce_np/enable/* 1 1 1 1 1 1 1 1
出力は、すべての優先度値でroce_npが有効になっていることを示しています。
上記の属性を変更するには、 mlxconfig ユーティリティを使用します。
-
mlxconfig -d /dev/mst/<mst_module> -y s CNP_DSCP_P1=<value> CNP_802P_PRIO_P1=<value>
例:
-
jvd@A100-01:/dev/mst$ sudo mst start Starting MST (Mellanox Software Tools) driver set Loading MST PCI module - Success [warn] mst_pciconf is already loaded, skipping Create devices Unloading MST PCI module (unused) – Success jvd@A100-01:~/scripts$ ./map_full_mellanox.sh Mellanox Device to mlx and Network Interface Mapping: /dev/mst/mt4123_pciconf0 => mlx5_14 => enp169s0f0np0 (0000:a9:00.0) /dev/mst/mt4125_pciconf0 => mlx5_4 => mgmt_eth (0000:2c:00.0) /dev/mst/ mt4129_pciconf0 => mlx5_6 => gpu0_eth (0000:0e:00.0) /dev/mst/mt4129_pciconf1 => mlx5_8 => gpu1_eth (0000:11:00.0) /dev/mst/mt4129_pciconf2 => mlx5_0 => gpu2_eth (0000:51:00.0) /dev/mst/mt4129_pciconf3 => mlx5_2 => gpu3_eth (0000:52:00.0) /dev/mst/mt4129_pciconf4 => mlx5_16 => gpu4_eth (0000:8b:00.0) /dev/mst/mt4129_pciconf5 => mlx5_18 => gpu5_eth (0000:8e:00.0) /dev/mst/mt4129_pciconf6 => mlx5_10 => gpu7_eth (0000:c8:00.0) /dev/mst/mt4129_pciconf7 => mlx5_12 => gpu6_eth (0000:cb:00.0) jvd@A100-01:/sys/class/net/gpu0_eth/ecn$ sudo mlxconfig -d /dev/mst/ mt4129_pciconf0 -y set CNP_DSCP_P1=40 CNP_802P_PRIO_P1=7 Device #1: ---------- Device type: ConnectX7 Name: MCX755106AS-HEA_Ax Description: NVIDIA ConnectX-7 HHHL Adapter Card; 200GbE (default mode) / NDR200 IB; Dual-port QSFP112; PCIe 5.0 x16 with x16 PCIe extension option; Crypto Disabled; Secure Boot Enabled Device: /dev/mst/mt4129_pciconf0 Configurations: Next Boot New CNP_DSCP_P1 48 40 CNP_802P_PRIO_P1 6 7 Apply new Configuration? (y/n) [n] : y Applying... Done! -I- Please reboot machine to load new configurations.
反応点(RP)パラメータ
ECN対応送信者がCNPパケットを受信すると、指定されたフロー(優先度)の送信を遅くすることで応答します。
以下のパラメーターは、CNP パケット到着後のトラフィック フローのレート制限方法を定義します。
-
jvd@A100-01:/sys/class/net$ ls gpu0_eth/ecn/roce_rp/ clamp_tgt_rate enable rpg_ai_rate rpg_max_rate rpg_time_reset clamp_tgt_rate_after_time_inc initial_alpha_value rpg_byte_reset rpg_min_dec_fac dce_tcp_g rate_reduce_monitor_period rpg_gd rpg_min_rate dce_tcp_rtt rate_to_set_on_first_cnp rpg_hai_rate rpg_threshold
例:
-
jvd@A100-01:/sys/class/net/gpu0_eth/ecn$ cat roce_rp/enable/* 1 1 1 1 1 1 1 1 jvd@A100-01:/sys/class/net/gpu0_eth/ecn$ cat roce_rp/rpg_max_rate 0
rpg_max_rate = リアクションポイントノードが送信できる最大レート。この制限に達すると、RP はレート制限されなくなります。
この値はMbits/秒で設定されます。デフォルト = 0(フルスピード – 最大なし)
出力には、すべての優先度値でroce_rpが有効になっていることが示されています。
ECN統計情報を確認するには、ethtool -S <interface> |grep ecn
例:
-
jvd@A100-01:~/scripts$ ethtool -S gpu0_eth | grep ecn rx_ecn_mark: 0 rx_xsk_ecn_mark: 0 rx0_ecn_mark: 0 rx1_ecn_mark: 0 rx2_ecn_mark: 0 rx3_ecn_mark: 0 rx4_ecn_mark: 0 rx5_ecn_mark: 0 rx6_ecn_mark: 0 rx7_ecn_mark: 0 rx8_ecn_mark: 0 ---more---
NVIDIA DCQCN – PFC 構成
IEEE 802.1Qbbは、イーサネットリンク上の特定のクラスのトラフィックに一時停止機能を適用します。
図109:NVIDIA DCQCN – PFC構成
インターフェイスでPFCが有効になっているかどうかを確認するには、mlnx_qos -i <interface>を使用します。
例:
-
jvd@A100-01:/sys/class/net/gpu0_eth/ecn$ sudo mlnx_qos -i gpu0_eth DCBX mode: OS controlled Priority trust state: dscp dscp2prio mapping: prio:0 dscp:07,06,05,04,03,02,01,00, prio:1 dscp:15,14,13,12,11,10,09,08, prio:2 dscp:23,22,21,20,19,18,17,16, prio:3 dscp:31,30,29,28,27,26,25,24, prio:4 dscp:39,38,37,36,35,34,33,32, prio:5 dscp:47,46,45,44,43,42,41,40, prio:6 dscp:55,54,53,52,51,50,49,48, prio:7 dscp:63,62,61,60,59,58,57,56, default priority: Receive buffer size (bytes): 19872,243072,0,0,0,0,0,0,max_buffer_size=2069280 Cable len: 7 PFC configuration : priority 0 1 2 3 4 5 6 7 enabled 0 0 0 1 0 0 0 0 buffer 0 0 0 1 0 0 0 0 tc: 0 ratelimit: unlimited, tsa: vendor priority: 1 tc: 1 ratelimit: unlimited, tsa: vendor priority: 0 tc: 2 ratelimit: unlimited, tsa: vendor priority: 2 tc: 3 ratelimit: unlimited, tsa: vendor priority: 3 tc: 4 ratelimit: unlimited, tsa: vendor priority: 4 tc: 5 ratelimit: unlimited, tsa: vendor priority: 5 tc: 6 ratelimit: unlimited, tsa: vendor priority: 6 tc: 7 ratelimit: unlimited, tsa: vendor priority: 7
PFCを有効/無効にするには、次の手順に従います。 mlnx_qos -i <interface> --pfc <0/1>,<0/1>,<0/1>,<0/1>,<0/1>,<0/1>,<0/1>,<0/1>
例:
- 現在の設定を確認します。
-
jvd@A100-01:/sys/class/net/gpu0_eth/ecn$ sudo mlnx_qos -i gpu0_eth DCBX mode: OS controlled Priority trust state: dscp dscp2prio mapping: prio:0 dscp:07,06,05,04,03,02,01,00, prio:1 dscp:15,14,13,12,11,10,09,08, prio:2 dscp:23,22,21,20,19,18,17,16, prio:3 dscp:31,30,29,28,27,26,25,24, prio:4 dscp:39,38,37,36,35,34,33,32, prio:5 dscp:47,46,45,44,43,42,41,40, prio:6 dscp:55,54,53,52,51,50,49,48, prio:7 dscp:63,62,61,60,59,58,57,56, default priority: Receive buffer size (bytes): 19872,243072,0,0,0,0,0,0,max_buffer_size=2069280 Cable len: 7 PFC configuration : priority 0 1 2 3 4 5 6 7 enabled 0 0 0 1 0 0 0 0 buffer 0 0 0 1 0 0 0 0 ---more---
この例の出力は、PFCが優先度3に対して有効になっていることを示しています。
- 優先度2のPFCを有効にし、優先度3のPFCを無効にします。
-
jvd@A100-01:~/scripts$ sudo mlnx_qos -i gpu0_eth --pfc 0,0, 1 ,0,0,0,0,0 DCBX mode: OS controlled Priority trust state: dscp dscp2prio mapping: prio:0 dscp:07,06,05,04,03,02,01,00, prio:1 dscp:15,14,13,12,11,10,09,08, prio:2 dscp:23,22,21,20,19,18,17,16, prio:3 dscp:31,30,29,28,27,26,25,24, prio:4 dscp:39,38,37,36,35,34,33,32, prio:5 dscp:47,46,45,44,43,42,41,40, prio:6 dscp:55,54,53,52,51,50,49,48, prio:7 dscp:63,62,61,60,59,58,57,56, default priority: Receive buffer size (bytes): 19872,243072,0,0,0,0,0,0,max_buffer_size=2069280 Cable len: 7 PFC configuration: priority 0 1 2 3 4 5 6 7 enabled 0 0 1 0 0 0 0 0 buffer 0 0 1 0 0 0 0 0 ---more--- - PFC統計の確認:
jvd@A100-01:~/scripts$ ethtool -S gpu0_eth | grep pause rx_pause_ctrl_phy: 8143294 tx_pause_ctrl_phy: 502 rx_prio3 _pause: 8143294 rx_prio3 _pause_duration: 10848932 tx_prio3 _pause: 502 tx_prio3 _pause_duration: 30445 rx_prio3 _pause_transition: 4071126 tx_pause_storm_warning_events: 0 tx_pause_storm_error_events: 0
RDMA-CM QPS(RDMA トラフィック)の NVIDIA TOS/DSCP 設定
図110:NVIDIA TOS/DSCP
RDMAトラフィックを適切にマークして、スイッチが正しく分類し、適切に処理できるようにロスレスキューに入れる必要があります。マーキングは、IPヘッダー内のDSCP、またはイーサネットフレームのvlan-tagフィールド内のPCPのいずれかです。DSCP と PCP のどちらを使用するかは、GPU サーバーとスイッチ間のインターフェイスが VLAN タグ付け(802.1q)を行っているかどうかによって異なります。
現在の設定を確認し、RDMA アウトバウンドトラフィックの TOS の値を変更するには、MLNX_OFED 4.0 の一部である cma_roce_tos スクリプトを使用します。
-
jvd@A100-01:/sys/class/net/gpu0_eth/ecn$ sudo cma_roce_tos -h Set/Show RoCE default TOS of RDMA_CM applications Usage: cma_roce_tos OPTIONS Options: -h show this help -d <dev> use IB device <dev> (default mlx5_0) -p <port> use port <port> of IB device (default 1) -t <TOS> set TOS of RoCE RDMA_CM applications (0)
TOSフィールドの現在の値を確認するには、オプションなしでsudo cma_roce_tosを入力します。
例:
-
jvd@A100-01:/sys/class/net/gpu0_eth/ecn$ sudo cma_roce_tos 106
この例では、現在のTOS値= 106(DSCP値= 48)で、ECNビットは10に設定されています。
値を変更するには、cma_roce_tos –d
このコマンドにib_deviceを入力する必要があります。次のスクリプトは、物理インターフェイスとib_device間のマッピングを自動的に実行します。
-
map_full_mellanox.sh #!/bin/bash # Script to map Mellanox devices to mlx and network interfaces # Get Mellanox device PCI addresses mst_status=$(sudo mst status | awk ' //dev/mst/ { dev = $1 } /domain:bus:dev.fn/ { pci = $1 printf "%s: %s\n", dev, pci } ') # Get network interface PCI addresses iface_status=$(for iface in $(ls /sys/class/net/); do pci_addr=$(ethtool -i $iface 2>/dev/null | grep bus-info | awk '{print $2}') if [ ! -z "$pci_addr" ]; then echo "$iface: $pci_addr" fi done) # Get network interface to mlx interface mapping mlx_iface_status=$(for iface in $(ls /sys/class/net/); do if [ -d /sys/class/net/$iface/device/infiniband_verbs ]; then mlx_iface=$(cat /sys/class/net/$iface/device/infiniband_verbs/*/ibdev) echo "$iface: $mlx_iface" fi done) # Combine and print the mapping echo "Mellanox Device to mlx and Network Interface Mapping:" echo "$mst_status" | while read -r mst_line; do mst_dev=$(echo $mst_line | awk -F ': ' '{print $1}') mst_pci=$(echo $mst_line | awk -F '=| ' '{print $3}') iface=$(echo "$iface_status" | grep $mst_pci | awk -F ': ' '{print $1}') iface_pci=$(echo "$iface_status" | grep $mst_pci | awk -F ': ' '{print $2}') mlx_iface=$(echo "$mlx_iface_status" | grep $iface | awk -F ': ' '{print $2}') if [ ! -z "$iface" ] && [ ! -z "$mlx_iface" ]; then echo "$mst_dev => $mlx_iface => $iface ($iface_pci)" fi done
例:
図111.スクリプト結果の例
図112.参照TOS、DSCPマッピング:
NCCL 制御トラフィックに管理インターフェイスを使用するための NVIDIA の設定
NCCLはTCPセッションを使用してプロセスを相互に接続し、RoCE、GID(グローバルID)、ローカルおよびリモートバッファアドレス、RDMAキー(メモリアクセス許可のRKEY)のQP情報を交換します
これらのセッションはジョブの開始時に作成され、デフォルトではGPUインターフェイス(RoCEv2トラフィックに使用されるのと同じインターフェイス)の1つを使用します。
例:
-
ylara@A100-01:~$ netstat -atn | grep 10.200 | grep "ESTABLISHED" tcp 0 0 10.200.4.8:47932 10.200.4.2:43131 ESTABLISHED tcp 0 0 10.200.4.8:46699 10.200.4.2:37236 ESTABLISHED tcp 0 0 10.200.2.8:60502 10.200.13.2:35547 ESTABLISHED tcp 0 0 10.200.4.8:37330 10.200.4.2:55355 ESTABLISHED tcp 0 0 10.200.4.8:56438 10.200.4.2:53947 ESTABLISHED ---more---
ジョブを開始するときに、次のパラメーターを含めて管理インターフェイス((フロントエンドファブリックに接続)に移動することをお勧めします: export NCCL_SOCKET_IFNAME="mgmt_eth"
例:
-
ylara@A100-01:~$ netstat -atn | grep 10.10.1 | grep "ESTABLISHED" tcp 0 0 10.10.1.0:44926 10.10.1.2:33149 ESTABLISHED tcp 0 0 10.10.1.0:46705 10.10.1.0:40320 ESTABLISHED tcp 0 0 10.10.1.0:54661 10.10.1.10:52452 ESTABLISHED ---more---