SUR CETTE PAGE
Conversion des cartes réseau NVIDIA ConnectX d’Infiniband vers Ethernet
Identification des mappages de cartes réseau et GPU et attribution du nom d’interface approprié
Modification du nom de l’interface d’un NIC et attribution d’adresses IP et de routes
Mappage d’un nom d’interface à un NIC spécifique (interface physique)
Pour modifier l’adresse IP actuelle ou attribuer une adresse IP à la NIC
Configuration NVIDIA TOS/DSCP pour RDMA-CM QPS (trafic RDMA)
Configuration de NVIDIA pour utiliser l’interface de gestion du trafic de contrôle NCCL
NVIDIA Configuration
® La famille de cartes d’interface réseau (NIC) NVIDIA ConnectX® offre des fonctionnalités avancées de déchargement matériel et d’accélération et des vitesses allant jusqu’à 400G, prenant en charge les protocoles Ethernet et Infiniband.
Référez-vous toujours à la documentation officielle du fabricant lorsque vous effectuez des modifications. Cette section fournit quelques instructions basées sur les tests en laboratoire des JVD IA.
Conversion des cartes réseau NVIDIA ConnectX d’Infiniband vers Ethernet
Par défaut, les cartes réseau NVIDIA ConnectX sont configurées pour fonctionner en tant qu’interfaces Infiniband et doivent être converties en Ethernet à l’aide de l’outil mlxconfig.
1) Vérifiez l’état des cartes réseau ConnectX à l’aide de sudo mst status.
-
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
Démarrez le service mst ou chargez les modules mst si nécessaire.
Exemple :
-
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) Identifiez l’interface que vous souhaitez convertir,
Cette commande sudo mst status -v fournit une liste des périphériques Mellanox (NIC ConnectX-6 et ConnectX-7) détectés sur le système, ainsi que leur type, le nom du périphérique Mellanox, les adresses PCI, le nom de l’interface RDMA, le nom de l’interface NET et l’ID NUMA, comme indiqué dans l’exemple ci-dessous :
-
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
Pour la première interface de la liste, vous pouvez identifier les éléments suivants :
- Type = ConnectX7(rev :0)
- Nom du périphérique Mellanox = mt4129_pciconf7 (/dev/mst/mt4129_pciconf7)
- Adresses PCI = cb :00.0
- Nom de l’interface RDMA = mlx5_12
- Nom de l’interface NET = net-gpu6_eth
- NUMA = 1
Notez que pour certaines interfaces, le nom suit le schéma de nommage standard des interfaces Linux (par exemple, net-enp14s0f1np1), tandis que d’autres ne le font pas (par exemple, net-gpu0_eth). Les noms d’interface qui ne respectent pas la norme sont des noms définis par l’utilisateur à des fins d’identification facile. Cela signifie que le nom par défaut a été modifié dans le fichier /etc/netplan/. Nous montrerons un exemple de la façon de le faire plus tard dans cette section.
3) Identifiez le mode d’exécution d’une interface donnée à l’aide de
mlxconfig -d <device> query
Exemple :
-
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
Notez que vous devez utiliser le nom du périphérique Mellanox, y compris le chemin d’accès (/dev/mst/mt4129_pciconf7).
De plus, LINK_TYPE_P1 et LINK_TYPE_P2 font référence aux deux ports physiques d’un adaptateur Mellanox à deux ports.
4) Si une interface fonctionne en mode Infiniband, vous pouvez changer le mode pour le mode Ethernet en utilisant
mlxconfig -d <périphérique> set [LINK_TYPE_P1=<link_type>] [LINK_TYPE_P2=<link_type>]
Exemple
-
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
Encore une fois, notez que vous devez utiliser le nom du périphérique Mellanox, y compris le chemin (/dev/mst/mt4129_pciconf7).
Pour vérifier l’état de l’interface, vous pouvez utiliser le 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
Pour plus de détails, vous pouvez vous référer à :
Prise en charge et téléchargements de firmwares - Identification des cartes adaptateurs (nvidia.com)
Identification des mappages de cartes réseau et GPU et attribution du nom d’interface approprié
Les cartes réseau peuvent être utilisées par n’importe quel GPU à tout moment ; il n’est pas codé en dur qu’un GPU donné ne peut communiquer avec le monde extérieur qu’à l’aide d’une carte NIC spécifique. Cependant, il existe des chemins de communication privilégiés entre les GPU et les cartes réseau, qui dans certains cas peuvent être considérés comme une correspondance 1:1 entre eux. Cela sera montré dans les étapes ci-dessous.
NCCL (NVIDIA Collective Communications Library) choisira le chemin qui offre la meilleure connexion d’un GPU donné à l’une des cartes réseau.
Pour identifier les chemins sélectionnés par NCCL et le meilleur chemin entre un GPU et une NIC, procédez comme suit :
Utilisez la commande nvidia-smi topo -m, qui affiche des informations topologiques sur le système, pour identifier le type de connexion entre les GPU et les cartes réseau :
EXEMPLES :
- DGX H100 :
Graphique 92. Informations sur la topologie
du système de l’interface de gestion du système (SMI) Nvidia H100
Interface de gestion du système SMI | Développeur NVIDIA
D’après nos recherches :
Tableau 26 : Performances par type de connexion
| Type de connexion | Descriptif | Performances |
| PIX | PCIe sur le même commutateur | Bon |
| PXB | PCIe via plusieurs commutateurs, mais pas le pont hôte | Bon |
| PHB | Commutateur PCIe et sur un pont hôte sur le même NUMA - utilise le processeur | D’accord |
| NŒUD | Commutateur PCIe et sur plusieurs ponts hôtes sur le même NUMA | Mauvais |
| SYS | Commutateur PCIe et sur le bus QPI/UPI entre les nœuds NUMA - utilise le processeur | Très mauvais |
| NV# | NVLink | Très bien |
- HGX A100 :
Graphique 93. Informations sur la topologie du système de l’interface de gestion du système (SMI) Nvidia A100
Identifier les connexions PBX
Si vous vous concentrez sur les sections en surbrillance de la sortie nvidia-smi, vous pouvez voir que pour chaque GPU, il existe une ou plusieurs connexions NIC de type PXB. Il s’agit du chemin « direct » préféré de chaque GPU à une NIC donnée. Cela signifie que lorsque le GPU doit communiquer avec un périphérique distant, il utilisera l’une de ces cartes réseau spécifiques comme première option.
- DGX H100 :
Graphique 94. Topologie du système Nvidia H100 System Management Interface (SMI) Connexions
PBX
Graphique 95. Architecture système Nvidia H100
- HGX A100 :
Graphique 96. Topologie du système d’interface de gestion du système (SMI) Nvidia A100 Connexions
PBX
Figure 97. Architecture système Nvidia A100
Vous pouvez également trouver ces correspondances dans les guides de l’utilisateur A100 ou H100 de Nvidia.
Par exemple, sur un système DGX H100/H200, les mappages de ports selon les tableaux 5 et 6 du Guide de l'utilisateur du système DGX H100/H200 de NVIDIA sont les suivants :
Tableau 27 : mappages GPU à NIC
| Port | ConnectX | Processeur graphique | Par défaut | RDMA | NIC |
| OSFP4P2 | CX1 | 0 | iBP24S0 | mlx5_0 | NIC0 |
| OSFP3P2 | CX3 | 1 | iBP64S0 | mlx5_3 | Carte réseau3 |
| OSFP3P1 | CX2 | 2 | IBP79S0 | mlx5_4 | Carte réseau4 |
| OSFP4P1 | CX0 | 3 | IBP94S0 | mlx5_5 | Carte réseau5 |
| OSFP1P2 | CX1 | 4 | IBP154S0 | mlx5_6 | Carte réseau6 |
| OSFP2P2 | CX3 | 5 | IBP192S0 | mlx5_9 | Carte réseau9 |
| OSFP2P1 | CX2 | 6 | IBP206S0 | mlx5_10 | Carte réseau10 |
| OSFP1P1 | CX0 | 7 | IBP220S0 | mlx5_11 | Carte réseau 11 |
Tableau 28 : connexions GPU à NIC
| NIC | GPU0 | GPU1 | Processeur graphique 2 | Processeur GPU3 | Processeur graphique 4 | Processeur graphique 5 | Processeur graphique 6 | Processeur GPU7 |
| NIC0 | PXB | SYS | SYS | SYS | SYS | SYS | SYS | SYS |
| Carte réseau3 | SYS | PXB | SYS | SYS | SYS | SYS | SYS | SYS |
| Carte réseau4 | SYS | SYS | PXB | SYS | SYS | SYS | SYS | SYS |
| Carte réseau5 | SYS | SYS | SYS | PXB | SYS | SYS | SYS | SYS |
| Carte réseau6 | SYS | SYS | SYS | SYS | PXB | SYS | SYS | SYS |
| Carte réseau9 | SYS | SYS | SYS | SYS | SYS | PXB | SYS | SYS |
| Carte réseau10 | SYS | SYS | SYS | SYS | SYS | SYS | PXB | SYS |
| Carte réseau 11 | SYS | SYS | SYS | SYS | SYS | SYS | SYS | PXB |
Graphique 98. Panneau avant Nvidia H100
Pour plus d’informations et pour les mappings sur les systèmes A100, vérifiez :
Introduction au système NVIDIA HGX A100 — Guide de l’utilisateur NVIDIA HGX A100 1 Documentation
Modification du nom de l’interface d’un NIC et attribution d’adresses IP et de routes
NIC attributs tels que l’adresse IP ou le nom de l’interface peuvent être définis en modifiant et en réappliquant au netplan.
La configuration réseau est décrite dans le fichier : /etc/netplan/01-netcfg.yaml comme indiqué dans l’exemple de tableau ci-dessous. Toute modification d’attribut implique de modifier ce fichier et de réappliquer le plan de réseau, comme indiqué dans les exemples plus loin dans cette section.
Tableau 29 : Exemple de configuration de l’interface Nvidia HGX A100 :
| Sortie netcfg.yaml | ||
| jvd@A100-01 :/etc/netplan$ plus 01-netcfg.yaml | ||
| # Il s'agit de la configuration réseau écrite par 'subiquity' | gpu0_eth : | gpu4_eth : |
| Réseau : | Match : | Match : |
| Version : 2 | Adresse MAC : 94:6D :AE :54:72:22 | Adresse MAC : 94:6D :AE :5B :28:70 |
| Ethernet : | DHCP4 : faux | DHCP4 : faux |
| mgmt_eth : | MTU : 9000 | MTU : 9000 |
| Match : | Adresses : | Adresses : |
| Adresse MAC : 7C :C2:55:42 :B2:28 | - 10.200.0.8/24 | - 10.200.4.8/24 |
| DHCP4 : faux | Itinéraires : | Itinéraires : |
| Adresses : | - au : 10.200.0.0/16 | - au : 10.200.0.0/16 |
| - 10.10.1.0/31 | via : 10.200.0.254 | via : 10.200.4.254 |
| Serveurs de noms : | à partir de : 10.200.0.8 | de : 10.200.4.8 |
| Adresses : | nom de l’ensemble : gpu0_eth | nom de l’ensemble : gpu4_eth |
| - 8.8.8.8 | gpu1_eth : | gpu5_eth : |
| Itinéraires : | Match : | Match : |
| - à : par défaut | Adresse MAC : 94:6D :AE :5B :01 :D0 | Adresse MAC : 94:6D :AE :5B :27 :F0 |
| via : 10.10.1.1 | DHCP4 : faux | DHCP4 : faux |
| nom de l’ensemble : mgmt_eth | MTU : 9000 | MTU : 9000 |
| weka_eth : | Adresses : | Adresses : |
| Match : | - 10.200.1.8/24 | - 10.200.5.8/24 |
| adresse MAC : B8:3F :D2:8B :68 :E0 | Itinéraires : | Itinéraires : |
| DHCP4 : faux | - au : 10.200.0.0/16 | - au : 10.200.0.0/16 |
| MTU : 9000 | via : 10.200.1.254 | via : 10.200.5.254 |
| Adresses : | à partir de : 10.200.1.8 | à partir de : 10.200.5.8 |
| - 10.100.1.0/31 | nom_ensemble : gpu1_eth | nom de l’ensemble : gpu5_eth |
| Itinéraires : | gpu2_eth : | gpu6_eth : |
| - au : 10.100.0.0/22 | Match : | Match : |
| via : 10.100.1.1 | Adresse MAC : 94:6D :AE :5B :28:60 | Adresse MAC : 94:6D :AE :54:78 :E2 |
| nom de l’ensemble : weka_eth | DHCP4 : faux | DHCP4 : faux |
| MTU : 9000 | MTU : 9000 | |
| Adresses : | Adresses : | |
| - 10.200.2.8/24 | - 10.200.6.8/24 | |
| Itinéraires : | Itinéraires : | |
| - au : 10.200.0.0/16 | - au : 10.200.0.0/16 | |
| via : 10.200.2.254 | via : 10.200.6.254 | |
| à partir de : 10.200.2.8 | à partir de : 10.200.6.8 | |
| nom_ensemble : gpu2_eth | nom de l’ensemble : gpu6_eth | |
| gpu3_eth : | gpu7_eth : | |
| Match : | Match : | |
| Adresse MAC : 94:6D :AE :5B :01 :E0 | Adresse MAC : 94:6D :AE :54:72:12 | |
| DHCP4 : faux | DHCP4 : faux | |
| MTU : 9000 | MTU : 9000 | |
| Adresses : | Adresses : | |
| - 10.200.3.8/24 | - 10.200.7.8/24 | |
| Itinéraires : | Itinéraires : | |
| - au : 10.200.0.0/16 | - au : 10.200.0.0/16 | |
| via : 10.200.3.254 | via : 10.200.7.254 | |
| à partir de : 10.200.3.8 | de : 10.200.7.8 | |
| nom de l’ensemble : gpu3_eth | nom de l’ensemble : gpu7_eth | |
Mappage d’un nom d’interface à un NIC spécifique (interface physique)
Mappez le nom de l’interface à l’adresse MAC de l’interface physique dans le fichier de configuration :
Graphique 99. Exemple
d’identification d’interface physique Nvidia A100
où :
EN = Interface réseau Ethernet.
p203s0 = emplacement physique de l’interface réseau.
Numéro de bus 203.
s0 = emplacement numéro 0 dans le bus.
F1 = fonction numéro 1 de l’interface réseau.
np1 = Port réseau 1
Fonction 0 : Peut être l’interface Ethernet principale.
Fonction 1 : Il peut s’agir d’une deuxième interface Ethernet.
Fonction 2 : peut être une interface de gestion ou de diagnostic.
Figure 100. Exemple de modification de fichier Netplan Nvidia A100
Vous pouvez trouver les noms de toutes les interfaces logiques sur le fichier 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]
Application des modifications à l’aide de la commande netplan apply
Figure 101. Exemple d’application Netplan Nvidia A100
Modification du nom de la carte NIC
Modifiez la valeur de set-name dans le fichier de configuration et enregistrez les modifications :
Graphique 102. Exemple de changement de nom d’interface Netplan Nvidia A100
Application des modifications à l’aide de la commande netplan apply
Graphique 103. Exemple d’application et de vérification de changement de nom d’interface Netplan Nvidia A100
Pour modifier l’adresse IP actuelle ou attribuer une adresse IP à la NIC
Modifiez ou ajoutez l’adresse sous l’interface appropriée dans le fichier de configuration, et enregistrez les modifications :
Graphique 104. Exemple de changement d’adresse IP de l’interface Netplan Nvidia A100
Entrez les adresses IP précédées d’un trait d’union et en retrait ; Assurez-vous d’ajouter le masque de sous-réseau.
Application des modifications à l’aide de la commande netplan apply
Graphique 105. Nvidia A100, interface netplan, nouvel exemple d’application et de vérification d’adresse IP
Modification ou ajout de routes à la carte NIC
Modifiez ou ajoutez les routes sous l’interface appropriée dans le fichier de configuration et enregistrez les modifications.
Figure 106. Exemple de routes supplémentaires netplan Nvidia A100
Application des modifications à l’aide de la commande netplan apply
Graphique 107. Exemple d’application et de vérification des routes supplémentaires Nvidia A100 netplan :
Configuration de NVIDIA DCQCN – ECN
Figure 108 : NVIDIA DCQCN – ECN
À partir de MLNX_OFED 4.1, ECN est activé par défaut (dans le firmware).
Pour confirmer que ECN est activé, utilisez la commande suivante : mlxconfig -d <device> q | grep ROCE_CC
Exemple :
-
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
Un masque de 255 signifie que DCQCN (ECN) est activé pour toutes les TC (classes de trafic) configurées sur la carte NIC.
Pour désactiver ECN, vous pouvez modifier le masque à l’aide de la commande suivante : mlxconfig -d <device> s ROCE_CC_PRIO_MASK_P1=<mask>
Exemple :
-
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] :
Si vous voulez éviter qu’on vous demande si vous souhaitez appliquer la nouvelle configuration, vous pouvez inclure l’option -y comme indiqué dans l’exemple suivant :
-
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.
La sortie indique qu’un redémarrage du serveur est nécessaire. Vous pouvez également réinitialiser l’interface à l’aide de la commande : mlxfwreset -d <périphérique> -l 3 -y r.
Exemple :
-
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.
Les paramètres des opérations ECN se trouvent sur le chemin d’accès suivant /sys/class/net/<interface>/ecn
Utilisez la commande suivante pour trouver l’interface :
-
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
Paramètres du point de notification (NP)
Lorsque le récepteur compatible ECN reçoit des paquets RoCE marqués ECN, il répond en envoyant des CNP (Congestion Notification Packets).
Les commandes suivantes décrivent les paramètres de notification :
-
jvd@A100-01:/sys/class/net/gpu0_eth/ecn$ ls /roce_np/ cnp_802p_prio cnp_dscp enable min_time_between_cnps
Exemples :
-
jvd@A100-01:/sys/class/net/gpu0_eth/ecn$ cat roce_np/cnp_802p_prio 6
cnp_802p_prio = la valeur du champ PCP (Priority Code Point) des paquets CNP.
PCP est un champ de 3 bits dans un en-tête de trame Ethernet lors de l’utilisation de trames balisées VLAN telles que définies par l’IEEE 802.1Q.
-
jvd@A100-01:/sys/class/net/gpu0_eth/ecn$ cat roce_np/cnp_dscp 48
cnp_dscp = valeur du champ DSCP (Differentiated Services Code Point) des paquets CNP.
-
jvd@A100-01:/sys/class/net/gpu0_eth/ecn$ cat roce_np/min_time_between_cnps 4
min_time_between_cnps = temps minimal entre deux CNP consécutifs envoyés. Si le paquet RoCE marqué ECN arrive dans une période inférieure à min_time_between_cnps depuis l’envoi précédent du CNP, aucun CNP ne sera envoyé en réponse. Cette valeur est exprimée en microsecondes. Valeur par défaut = 0
-
jvd@A100-01:/sys/class/net/gpu0_eth/ecn$ cat roce_np/enable/* 1 1 1 1 1 1 1 1
La sortie montre que roce_np est activé pour toutes les valeurs de priorité.
Pour modifier les attributs décrits ci-dessus, utilisez l’utilitaire mlxconfig :
-
mlxconfig -d /dev/mst/<mst_module> -y s CNP_DSCP_P1=<value> CNP_802P_PRIO_P1=<value>
Exemple :
-
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.
Paramètres du point de réaction (PR)
Lorsque l’expéditeur compatible ECN reçoit des paquets CNP, il répond en ralentissant la transmission des flux spécifiés (priorité).
Les paramètres suivants définissent la manière dont les flux de trafic seront limités après l’arrivée des paquets 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
Exemples :
-
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 = vitesse maximale à laquelle le nœud du point de réaction peut transmettre. Une fois cette limite atteinte, les RP ne sont plus limités par le débit.
Cette valeur est configurée en Mbits/s. Valeur par défaut = 0 (pleine vitesse – pas de max)
La sortie montre que roce_rp est activé pour toutes les valeurs de priorité.
Pour vérifier les statistiques ECN, utilisez : ethtool -S <interface> | grep ecn
Exemple :
-
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 Configuration
La norme IEEE 802.1Qbb applique la fonctionnalité de pause à des classes de trafic spécifiques sur la liaison Ethernet.
Figure 109 : Configuration DCQCN NVIDIA – PFC
Pour vérifier si PFC est activé sur une interface, utilisez : mlnx_qos -i <interface>
Exemple :
-
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
Pour activer/désactiver PFC, utilisez : mlnx_qos -i <interface> --pfc <0/1>,<0/1>,<0/1>,<0/1>,<0/1>,<0/1>,<0/1>,<0/1>
Exemple :
- Vérifiez la configuration actuelle :
-
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---
La sortie de l’exemple indique que PFC est activé pour la priorité 3.
- Activer PFC pour la priorité 2 et désactiver PFC pour la priorité 3 :
-
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--- - Consultez les statistiques 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
Configuration NVIDIA TOS/DSCP pour RDMA-CM QPS (trafic RDMA)
Figure 110 : CONDITIONS D’UTILISATION/DSCP DE NVIDIA
Le trafic RDMA doit être correctement marqué pour permettre au commutateur de le classer correctement et de le placer dans la file d’attente sans perte pour un traitement approprié. Le marquage peut être DSCP dans l’en-tête IP ou PCP dans le champ vlan-tag de trame Ethernet. L’utilisation de DSCP ou de PCP dépend de l’interopérabilité VLAN (802.1q) ou non de l’interface entre le serveur GPU et le commutateur.
Pour vérifier la configuration actuelle et modifier les valeurs de TOS pour le trafic sortant RDMA, utilisez le script cma_roce_tos qui fait partie de MLNX_OFED 4.0.
-
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)
Pour vérifier la valeur actuelle du champ TOS, entrez sudo cma_roce_tos sans aucune option.
Exemple :
-
jvd@A100-01:/sys/class/net/gpu0_eth/ecn$ sudo cma_roce_tos 106
Dans l’exemple, la valeur TOS actuelle = 106, ce qui signifie une valeur DSCP = 48 et les bits ECN définis sur 10.
Pour modifier la valeur, utilisez : cma_roce_tos –d <ib_device> -t <TOS>
Vous devez entrer le ib_device dans cette commande. Le script suivant réalise automatiquement le mappage entre les interfaces physiques et le 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
Exemple :
Graphique 111. Exemple de résultats de script
Graphique 112. Référencez les conditions d’utilisation et les mappages DSCP :
Configuration de NVIDIA pour utiliser l’interface de gestion du trafic de contrôle NCCL
Le NCCL utilise les sessions TCP pour connecter les processus entre eux et échanger des informations QP pour RoCE, les GID (ID globaux), les adresses tampons locales et distantes, les clés RDMA (RKEYS pour les autorisations d’accès à la mémoire)
Ces sessions sont créées au démarrage du travail et utilisent par défaut l’une des interfaces GPU (mêmes que celles utilisées pour le trafic RoCEv2).
Exemple :
-
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---
Il est recommandé, de passer à l’interface de gestion (connectée au (Frontend fabric) incluant le paramètre suivant lors du démarrage d’un job : export NCCL_SOCKET_IFNAME="mgmt_eth »
Exemple :
-
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---