AUF DIESER SEITE
AMD MI300x GPU-Server und NIC Firmware- und RCCL-Bibliotheken
Kommunikation zwischen GPUs auf demselben NUMA-Knoten (z. B. GPU1 ↔, GPU2):
Kommunikation zwischen GPUs auf verschiedenen NUMA-Knoten (z. B. GPU1 ↔, GPU4):
Bearbeiten und erneutes Anwenden der Netzwerkkonfigurationsdatei (Netplan)
Broadcom BCM957608 Thor2 DCQCN-Konfiguration für RDMA-Datenverkehr
DCQN-ECN/PFC und TOS/DSCP für RDMA-Datenverkehrsattribute direkt konfigurieren
Konfigurieren von DCQN-ECN/PFC und TOS/DSCP für RDMA-Datenverkehrsattribute mithilfe von niccli
Optionen für nichtflüchtigen Speicher (NVM) in Bezug auf die Serviceklasse.
Konfigurieren von DCQCN- und RoCE-Datenverkehrsmarkierungswerten mithilfe von bnxt_setupcc.sh
AMD Konfiguration
Zu den KI-Servern, die als Teil des JVD abgedeckt werden, gehören 2 Supermicro AS-8125GS-TNMR2 Dual AMD EPYC 8U GPU und 2 Dell PowerEdge XE9680.
Dieser Abschnitt enthält einige Richtlinien für die Installation und Konfiguration der Schnittstellen und anderer relevanter Parameter, die auf den Labortests von KI JVD basieren. Lesen Sie bei Änderungen und für weitere Details immer die offizielle Dokumentation des Herstellers.
AMD MI300X Einstellen von BIOS-Parametern
Jeder Anbieter hat unterschiedliche BIOS-Einstellungen, die auf Unterschieden in den UI- und GPU-Zuordnungen und der internen Architektur der Server basieren.
SuperMicro AS-8125GS-TNMR2
Booten Sie den Server im Setup-Modus (das Booten von Supermicro Splash dauert einige Minuten, bis es angezeigt wird):
| UEFI/BIOS-Bereichswert | |
|---|---|
| Erweiterte -> NB-Konfiguration | ACS aktivieren = deaktivieren |
| Erweitert -> NB-Konfiguration -> xGMI | xGMI Verbindungsbreitenregelung = Manuell |
| xGMI Force Link Width Control = Kraft | |
| xGMI Verbindungsbreite erzwingen = 2 | |
| xGMI Steuerung der maximalen Verbindungsbreite = Manuell | |
| xGMI Link Maximale Geschwindigkeit = Auto | |
| Erweiterte -> PCIe/PCI/PnP-Konfiguration | Über 4G-Kodierung: Aktiviert |
| Unterstützung für Größenänderung der BAR: Aktiviert | |
| SR-IOV-Unterstützung: Aktiviert | |
| Arbeitsauslastung = nicht konfiguriert |
DELL XE9680
Die folgenden BIOS-Einstellungen werden von Dell für den XE9680 KI/ML-Server empfohlen. Die BIOS-Einstellungen deaktivieren IOMMU und ACS auch auf dem Host.
| UEFI/BIOS-Bereichswert | |
|---|---|
| BIOS -> Prozessoreinstellungen | Logischer Prozessor = Deaktivieren |
| Virtualisierungstechnologie = deaktivieren | |
| SubNumaCluster = Deaktivieren | |
| MADt-Core-Cluster = linear | |
| 1 BIOS -> Integrierte Geräte | Global SRIOV = Deaktivieren 1 |
| BIOS -> Systemprofileinstellung | Server-Systemprofil = Leistung |
| Arbeitsauslastung = nicht konfiguriert | |
| BIOS -> System Sicherheit | AC-Wiederherstellungsverzögerung = Zufällig (dringend empfohlen) |
1 Dell empfiehlt die "Aktivierung" von Global SR-IOV, aber bei den Dell DUTs in diesem Labor-Setup war diese Einstellung nicht mit dem Thor2 NIC-Portmodus 0 für die Speicher- und Frontend-Fabrics (2 x 200 GB vs. 1 x 400 Gb) kompatibel, was dazu führte, dass der Testobjekt beim Booten fehlerhaft war. Wenden Sie sich an Ihr Dell Account-Team, um Empfehlungen zu dieser Einstellung in Ihrem Setup zu erhalten."
Befolgen Sie die Konfigurationsschritte, die in der Dokumentation Netzwerkkonfiguration mit einem Knoten für AMD Instinct-Beschleuniger – GPU-Cluster-Netzwerk beschrieben sind. Beachten Sie, dass das in Schritt 6 verwendete Skript zum Deaktivieren von ACS auch vor Workloads ausgeführt werden muss, nachdem ein Server neu gestartet wurde.
Ethernet-Netzwerkadapter (NICs) für KI-Datencenter
KI/ML-Workloads haben an Komplexität und Umfang zugenommen. Das Netzwerk wird entscheidend für effiziente Job-Abschlusszeiten. Die Netzwerkadapter (Network Adapters, NIC) sind die Verbindungspunkte, die die GPUs mit den Datencenter-Fabrics verbinden. Daher sollten diese NICs in der Lage sein, große Datenmengen zu verarbeiten und eine Hochgeschwindigkeitskommunikation mit niedriger Latenz zwischen GPU-Servern zu unterstützen. Aus diesem Grund sollten die NICs mindestens einige der wichtigsten KI/ML-Funktionen unterstützen können, wie z. B.:
- RDMA over Converged Ethernet (RoCE) und Überlastungskontrolle.
- Fähigkeit, 400G-Daten bidirektional mit geringer Latenz zu verarbeiten.
- Fortschrittliche Mechanismen zur Überlastungskontrolle, die sensibel und in der Lage sind, auf Netzwerküberlastungen zu reagieren und den Datenverkehrsfluss zu optimieren.
- Unterstützung der GPU-Skalierbarkeit, die auch bei steigenden GPUs eine robuste Leistung gewährleistet.
Für Server-NICs haben wir zwei Optionen:
- Broadcom Thor2: Die Broadcom Thor2-Netzwerkadapter wurden für KI/ML-Workloads und Job-Abschlusszeiten validiert.
- AMD Pollara – AMD Pollara 400 Ethernet-Netzwerkadapter
Weitere Informationen zum AMD Pensando Pollara 400 (Ethernet-Adapter) finden Sie unter diesem Link.
Identifizieren von NICs- und GPUs-Zuordnungen
Neben der Einrichtung der Fabric und des GPU-Servers behandelt dieses JVD auch die Konfiguration und Einrichtung von Ethernet-Netzwerkadaptern (oder NIC) wie folgt. Der Ethernet-Netzwerkadapter Broadcom BCM957608 (Thor2) wurde in Phase 1 validiert. Und in Phase 2 werden die AMD Pollara 400 NIC-Karten validiert.
Alle 4 Server sind ausgestattet mit:
und eine der unten aufgeführten NICs
- 8 x Single-Port 400/200/100/50/25/10 GbE Broadcom BCM957608 (Thor2) Adapter mit 400 Gbit/s QDD-400G-DR4-Transceivern zur Verbindung mit dem GPU-Backend-Fabric .
oder
- 8 x Single-Port 400G und 2 Ports 200G und 4 Ports 100/50/25G AMD Pensando Pollara 400 Ethernet-Netzwerkadapter mit Q112-400G-DR4-Transceivern zur Verbindung mit der GPU-Backend-Fabric .
Dell-Geräte:
- 1 x Mellanox MT2910 Familie NVIDIA® ConnectX-7® SmartNIC mit 100 Gbit/s QSFP28 Transceivern zur Verbindung mit der Frontend Fabric
- 2 x Mellanox MT2910 Familie NVIDIA® ConnectX-7® SmartNIC mit 200 Gbit/s QDD-2X200G-AOC-5M-Transceivern zur Verbindung mit der Frontend Fabric
AMD MI300x GPU-Server und NIC Firmware- und RCCL-Bibliotheken
Für die Zwecke der Broadcom Thor 2 NIC-Validierung sind im Folgenden die wichtigsten Betriebssystem- und Firmwareversionen aufgeführt, die auf den MI300x-GPU-Servern konfiguriert sind:
Broadcom Thor 2 Ethernet-Adapter
Nachfolgend finden Sie die Details des Betriebssystems (OS), der Firmware und der installierten AMD-Bibliotheken:
| Betriebssystem-/Firmware-Version | |
|---|---|
| Ubuntu | Ubuntu 24.04.2 LTS |
| Broadcom Thor2 NIC Firmware-Version | 231.2.63.0 |
Im Folgenden sind die Bibliotheken installiert, die für den RCCL-Test für den Thor2-Netzwerkadapter installiert sind:
| RCCL-Testbibliotheken | Versionsbefehl | |
|---|---|---|
| Rocm/edel | 6.4.0.60400-47~24.04 amd64 | APT-Liste ROCM |
| Rccl 1 | 2.22.3.60400-47~24.04 amd64 | apt list rccl |
| MPI (Offenes MPI) | 5.0.8a1 | mpirun –version |
| UCX |
1.15.0 | /opt/ucx/bin/ucx_info -v |
AMD Pensando Pollara 400 Ethernet-Adapter
Für die Zwecke der AMD Pollara 400 NIC-Validierung sind die folgenden Hauptbetriebssystem- und Firmwareversionen auf den MI300x GPU-Servern konfiguriert:
| Betriebssystem-/Firmware-Version | |
|---|---|
| Ubuntu | Ubuntu 22.04.5 LTS |
| AMD Pollara NIC Firmware-Version | 1.110.0-a-79 |
Ausgabe der Ubuntu Version 22.04 auf den MI300-Servern installiert.
-
jnpr@mi300-01:~$ cat /etc/os-release PRETTY_NAME="Ubuntu 22.04.5 LTS" NAME="Ubuntu" VERSION_ID="22.04" VERSION="22.04.5 LTS (Jammy Jellyfish)" VERSION_CODENAME=jammy ID=ubuntu ID_LIKE=debian HOME_URL="https://www.ubuntu.com/" SUPPORT_URL="https://help.ubuntu.com/" BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/" PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
Ausgabe der AMD Pollara 400 NIC-Karte Firmware-Version
-
jnpr@mi300-01:~$ sudo nicctl show card --detail | grep Firmware Firmware version : 1.110.0-a-79 Firmware version : 1.110.0-a-79 Firmware version : 1.110.0-a-79 Firmware version : 1.110.0-a-79 Firmware version : 1.110.0-a-79 Firmware version : 1.110.0-a-79 Firmware version : 1.110.0-a-79 Firmware version : 1.110.0-a-79
Im Folgenden sind die Bibliotheken installiert, die für den RCCL-Test für den AMD Pollara 400 NIC-Adapter installiert sind:
| RCCL-Testbibliotheken | Versionsbefehl | |
|---|---|---|
| Rocm/Jammy | 6.3.3.60303-74~22.04 amd64 | APT-Liste ROCM |
| Rccl 1 | 7961624 | |
| MPI (Offenes MPI) | 5.1.0a1 | /opt/ompi/bin/mpirun –version |
| UCX |
1.20.0 | /opt/ucx/bin/ucx_info -v |
| rccl-tests | REVISION 6704FC6 | Git Branch https://github.com/ROCm/rccl-tests.git |
| ANP-Plugin2 |
Weitere Informationen zur Installation dieser Software und abhängigen Bibliotheken finden Sie weiter unten im Abschnitt AMD Pollara-Firmware und abhängige Bibliotheken, da diese Schritte erst ausgeführt werden können, nachdem die NICs und GPUs wie in den folgenden Abschnitten beschrieben zugeordnet wurden.
In diesem Abschnitt werden einige der Optionen erläutert, um Informationen zu den NICs und GPUs zu finden und diese zu konfigurieren.
ROCm Communication Collectives Library (RCCL)
In AMD-Servern bietet das ROCm kollektive Kommunikationsprimitive für mehrere GPUs und mehrere Knoten, die für AMD-GPUs optimiert sind. Diese Verbundvorgänge implementieren Sende- und Empfangsvorgänge wie all-reduce, all-gather, reduce, broadcast, all-to-all usw. über mehrere GPUs in einem oder mehreren GPU-Servern.
Die Kommunikation zwischen GPUs auf einem einzelnen Server wird mithilfe von xGMI (Inter-Chip Global Memory Interconnect) realisiert, einem Teil der Infinity Fabric-Technologie von AMD. Die Infinity Fabric ist eine Verbindung mit hoher Bandbreite und niedriger Latenz für die verschiedenen Komponenten innerhalb eines Systems, einschließlich CPUs, GPUs, Speicher, NICs und andere Geräte. xGMI bietet eine Socket-to-Socket-Kommunikation, die eine direkte CPU-zu-CPU- oder GPU-zu-GPU-Kommunikation ermöglicht.
Die Kommunikation zwischen verschiedenen Servern wird von RDMA-fähigen NICs (z. B. RoCEv2 über Ethernet) verarbeitet und über die GPU-Backend-Fabric geroutet. Diese NICs können von jeder GPU jederzeit verwendet werden, da es keine fest codierte 1-zu-1-Zuordnung von GPU zu NIC gibt. Durch die Nutzung bevorzugter Kommunikationswege zwischen GPUs und NICs entsteht jedoch der Anschein einer 1:1-Entsprechung.
RCCL wählt immer den Pfad mit der besten Verbindung zwischen GPUs sowie zwischen GPUs und NICs, um Bandbreite und Latenz zu optimieren. Der optimierte knoteninterne Pfad wird vor der Weiterleitung zwischen den Knoten genommen.
Die rocm-smi CLI (Radeon Open Compute Platform System Management Interface) bietet Tools zur Konfiguration und Überwachung von AMD-GPUs. Es kann verwendet werden, um GPUs, Hardwaredetails sowie Topologieinformationen zu identifizieren, indem folgende Optionen verwendet werden:
--showproductname: Produktdetails anzeigen
--showtopo : Informationen zur Hardware-Topologie anzeigen
--showtopoaccess : zeigt die Link-Zugänglichkeit zwischen GPUs an
--showtopohops : zeigt die Anzahl der Hops zwischen GPUs an
--showtopotype : zeigt den Verbindungstyp zwischen GPUs an
--showtoponuma : Zeigt die NUMA-Knoten an
--shownodesbw: Zeigt die Bandbreite der NUMA-Knoten an
--showhw: Zeigt die Hardwaredetails an
Beispiele aus AMD Instinct MI300X OAM:
Der --showproductname zeigt die GPU-Serie, das Modell und den Anbieter zusammen mit weiteren Details. Die Beispielausgabe zeigt, dass GPUs der AMD Instinct™ MI300X-Plattform auf dem Server installiert sind.
-
jnpr@MI300X-01:/proc$ rocm-smi --showproductname ============================ ROCm System Management Interface ============================ ====================================== Product Info ====================================== GPU[0] : Card Series: AMD Instinct MI300X OAM GPU[0] : Card Model: 0x74a1 GPU[0] : Card Vendor: Advanced Micro Devices, Inc. [AMD/ATI] GPU[0] : Card SKU: M3000100 GPU[0] : Subsystem ID: 0x74a1 GPU[0] : Device Rev: 0x00 GPU[0] : Node ID: 2 GPU[0] : GUID: 28851 GPU[0] : GFX Version: gfx942 GPU[1] : Card Series: AMD Instinct MI300X OAM GPU[1] : Card Model: 0x74a1 GPU[1] : Card Vendor: Advanced Micro Devices, Inc. [AMD/ATI] GPU[1] : Card SKU: M3000100 GPU[1] : Subsystem ID: 0x74a1 GPU[1] : Device Rev: 0x00 GPU[1] : Node ID: 3 GPU[1] : GUID: 51499 GPU[1] : GFX Version: gfx942 ---more--
Die --showhw Optionen zeigen Informationen über die GPUs im System an, einschließlich ID
-
root@MI300X-01:/sys/kernel/config/bnxt_re/bnxt_re0/ports/1/cc# rocm-smi --showhw -v ====================================== ROCm System Management Interface ================================= =========================================== Concise Hardware Info ======================================= GPU NODE DID GUID GFX VER GFX RAS SDMA RAS UMC RAS VBIOS BUS PARTITION ID 0 2 0x74a1 28851 gfx942 ENABLED ENABLED ENABLED 113-M3000100-102 0000:05:00.0 0 1 3 0x74a1 51499 gfx942 ENABLED ENABLED ENABLED 113-M3000100-102 0000:27:00.0 0 2 4 0x74a1 57603 gfx942 ENABLED ENABLED ENABLED 113-M3000100-102 0000:47:00.0 0 3 5 0x74a1 22683 gfx942 ENABLED ENABLED ENABLED 113-M3000100-102 0000:65:00.0 0 4 6 0x74a1 53458 gfx942 ENABLED ENABLED ENABLED 113-M3000100-102 0000:85:00.0 0 5 7 0x74a1 26954 gfx942 ENABLED ENABLED ENABLED 113-M3000100-102 0000:A7:00.0 0 6 8 0x74a1 16738 gfx942 ENABLED ENABLED ENABLED 113-M3000100-102 0000:C7:00.0 0 7 9 0x74a1 63738 gfx942 ENABLED ENABLED ENABLED 113-M3000100-102 0000:E5:00.0 0 ========================================================================================================== ============================================ End of ROCm SMI Log ========================================= ========================================= VBIOS ========================================== GPU[0] : VBIOS version: 113-M3000100-102 GPU[1] : VBIOS version: 113-M3000100-102 GPU[2] : VBIOS version: 113-M3000100-102 GPU[3] : VBIOS version: 113-M3000100-102 GPU[4] : VBIOS version: 113-M3000100-102 GPU[5] : VBIOS version: 113-M3000100-102 GPU[6] : VBIOS version: 113-M3000100-102 GPU[7] : VBIOS version: 113-M3000100-102 ==========================================================================================
Die Felder sind wie folgt definiert:
| GPU | Index der GPU auf dem System, beginnend bei 0. |
| KNOTEN | NUMA-Knoten-ID (Non-Uniform Memory Access), die mit der GPU verknüpft ist. Hilft bei der Identifizierung der Erinnerungslokalität. Optimales GPU/NIC-Mapping hängt oft von der NUMA-Nähe ab |
| DID | Geräte-ID der GPU. Dies ist eine eindeutige Kennung für das jeweilige GPU-Modell. Nützlich für die Überprüfung des genauen GPU-Modells. 0x74a1 entspricht beispielsweise einer GPU der MI300X-Serie. |
| GUID | Eindeutige GPU-Kennung. Dieser Wert ist für jede GPU spezifisch und kann sich auf ihr PCIe-Gerät beziehen. Nützlich zur Unterscheidung von GPUs in einer Umgebung mit mehreren GPUs. |
| GFX VER | Die Version der GPU-Architektur (z. B. gfx942 ist Teil der RDNA2-Familie von AMD). Bei AMD-GPUs ist das GFX-Präfix Teil der internen Namenskonvention von AMD für die GPU-Mikroarchitekturfamilien. Hardwarespezifikationen für die GPU-Architektur — ROCm Documentation |
| GFX RAS | Status der GPU-RAS-Funktionen (Zuverlässigkeit, Verfügbarkeit, Wartungsfreundlichkeit). Gibt die Fehlerbehandlung an. |
| SDMA RAS | Status der SDMA-RAS-Funktionen (System Direct Memory Access). |
| UMC RAS | Status der RAS-Funktionen des Unified Memory Controller (UMC). |
| VBIOS | VBIOS (Video BIOS) Version. Gibt die Firmwareversion an, die auf der GPU ausgeführt wird. Identische Firmware-Version (113-M3000100-102) für alle GPUs zeigt eine einheitliche Konfiguration an. |
| BUS | PCIe-Busadresse der GPU. Hilft bei der Zuordnung der GPU zu ihrem physischen Steckplatz. Beispielsweise ist 0000:05:00.0 die PCIe-Adresse. Es ermöglicht Ihnen, GPUs mit physischen Steckplätzen oder NUMA-Knoten in Beziehung zu setzen. |
| PARTITIONS-ID | GPU-Partitions- oder Instanz-ID. Bei Multi-Instanz-GPUs (z. B. MI300X) würde dies Instanzen identifizieren. Alle Werte sind 0 und geben an, dass für diese GPUs keine Multi-Instanz-Partitionierung aktiviert ist. |
Die --showbus Optionen zeigen PCI-Bus-bezogene Informationen an, einschließlich der Entsprechung zwischen GPU-IDs und PCI-Bus-IDs.
-
root@MI300X-01:/sys/kernel/config/bnxt_re/bnxt_re0/ports/1/cc# rocm-smi --showbus -i ============================ ROCm System Management Interface ============================ =========================================== ID =========================================== GPU[0] : Device Name: AMD Instinct MI300X OAM GPU[0] : Device ID: 0x74a1 GPU[0] : Device Rev: 0x00 GPU[0] : Subsystem ID: 0x74a1 GPU[0] : GUID: 28851 GPU[1] : Device Name: AMD Instinct MI300X OAM GPU[1] : Device ID: 0x74a1 GPU[1] : Device Rev: 0x00 GPU[1] : Subsystem ID: 0x74a1 GPU[1] : GUID: 51499 GPU[2] : Device Name: AMD Instinct MI300X OAM GPU[2] : Device ID: 0x74a1 GPU[2] : Device Rev: 0x00 GPU[2] : Subsystem ID: 0x74a1 GPU[2] : GUID: 57603 ---more--- ========================================================================================== ======================================= PCI Bus ID ======================================= GPU[0] : PCI Bus: 0000:05:00.0 GPU[1] : PCI Bus: 0000:27:00.0 GPU[2] : PCI Bus: 0000:47:00.0 GPU[3] : PCI Bus: 0000:65:00.0 GPU[4] : PCI Bus: 0000:85:00.0 GPU[5] : PCI Bus: 0000:A7:00.0 GPU[6] : PCI Bus: 0000:C7:00.0 GPU[7] : PCI Bus: 0000:E5:00.0 ========================================================================================== ================================== End of ROCm SMI Log ===================================
Die --showmetrics Option bietet umfassende Informationen über den GPU-Status und die Leistung, einschließlich Metriken wie Temperatur, Taktfrequenz, Leistung und PCIe-Bandbreite.
-
root@MI300X-01:/sys/kernel/config/bnxt_re/bnxt_re0/ports/1/cc# rocm-smi --showmetrics | grep GPU.0 GPU[0] : Metric Version and Size (Bytes): 1.6 1664 GPU[0] : temperature_edge (C): N/A GPU[0] : temperature_hotspot (C): 42 GPU[0] : temperature_mem (C): 35 GPU[0] : temperature_vrgfx (C): N/A GPU[0] : temperature_vrsoc (C): 41 GPU[0] : temperature_vrmem (C): N/A GPU[0] : average_gfx_activity (%): 0 GPU[0] : average_umc_activity (%): 0 GPU[0] : average_mm_activity (%): N/A GPU[0] : average_socket_power (W): N/A GPU[0] : energy_accumulator (15.259uJ (2^-16)): 4291409153508 GPU[0] : system_clock_counter (ns): 508330314785091 GPU[0] : average_gfxclk_frequency (MHz): N/A GPU[0] : average_socclk_frequency (MHz): N/A GPU[0] : average_uclk_frequency (MHz): N/A GPU[0] : average_vclk0_frequency (MHz): N/A GPU[0] : average_dclk0_frequency (MHz): N/A GPU[0] : average_vclk1_frequency (MHz): N/A GPU[0] : average_dclk1_frequency (MHz): N/A GPU[0] : current_gfxclk (MHz): 134 GPU[0] : current_socclk (MHz): 28 GPU[0] : current_uclk (MHz): 900 GPU[0] : current_vclk0 (MHz): 29 GPU[0] : current_dclk0 (MHz): 22 GPU[0] : current_vclk1 (MHz): 29 GPU[0] : current_dclk1 (MHz): 22 GPU[0] : throttle_status: N/A GPU[0] : current_fan_speed (rpm): N/A GPU[0] : pcie_link_width (Lanes): 16 GPU[0] : pcie_link_speed (0.1 GT/s): 320 GPU[0] : gfx_activity_acc (%): 682809151 GPU[0] : mem_activity_acc (%): 60727622 GPU[0] : temperature_hbm (C): ['N/A', 'N/A', 'N/A', 'N/A'] GPU[0] : firmware_timestamp (10ns resolution): 507863813273800 GPU[0] : voltage_soc (mV): N/A GPU[0] : voltage_gfx (mV): N/A GPU[0] : voltage_mem (mV): N/A GPU[0] : indep_throttle_status: N/A GPU[0] : current_socket_power (W): 123 GPU[0] : vcn_activity (%): [0, 0, 0, 0] GPU[0] : gfxclk_lock_status: 0 GPU[0] : xgmi_link_width: 0 GPU[0] : xgmi_link_speed (Gbps): 0 GPU[0] : pcie_bandwidth_acc (GB/s): 626812796806 GPU[0] : pcie_bandwidth_inst (GB/s): 18 ---more---
Die --showtopo Optionen zeigen, wie die GPUs in den Systemen über XGMI (Link Type) miteinander kommunizieren können, was einem Hop zwischen zwei beliebigen GPUs entspricht. Die Gewichtung von 15 zeigt an, dass diese direkte Kommunikation der bevorzugte Weg ist.
-
jnpr@MI300X-01:~$ rocm-smi --showtopo ============================ ROCm System Management Interface ============================ ================================ Weight between two GPUs ================================= GPU0 GPU1 GPU2 GPU3 GPU4 GPU5 GPU6 GPU7 GPU0 0 15 15 15 15 15 15 15 GPU1 15 0 15 15 15 15 15 15 GPU2 15 15 0 15 15 15 15 15 GPU3 15 15 15 0 15 15 15 15 GPU4 15 15 15 15 0 15 15 15 GPU5 15 15 15 15 15 0 15 15 GPU6 15 15 15 15 15 15 0 15 GPU7 15 15 15 15 15 15 15 0 ================================= Hops between two GPUs ================================== GPU0 GPU1 GPU2 GPU3 GPU4 GPU5 GPU6 GPU7 GPU0 0 1 1 1 1 1 1 1 GPU1 1 0 1 1 1 1 1 1 GPU2 1 1 0 1 1 1 1 1 GPU3 1 1 1 0 1 1 1 1 GPU4 1 1 1 1 0 1 1 1 GPU5 1 1 1 1 1 0 1 1 GPU6 1 1 1 1 1 1 0 1 GPU7 1 1 1 1 1 1 1 0 =============================== Link Type between two GPUs =============================== GPU0 GPU1 GPU2 GPU3 GPU4 GPU5 GPU6 GPU7 GPU0 0 XGMI XGMI XGMI XGMI XGMI XGMI XGMI GPU1 XGMI 0 XGMI XGMI XGMI XGMI XGMI XGMI GPU2 XGMI XGMI 0 XGMI XGMI XGMI XGMI XGMI GPU3 XGMI XGMI XGMI 0 XGMI XGMI XGMI XGMI GPU4 XGMI XGMI XGMI XGMI 0 XGMI XGMI XGMI GPU5 XGMI XGMI XGMI XGMI XGMI 0 XGMI XGMI GPU6 XGMI XGMI XGMI XGMI XGMI XGMI 0 XGMI GPU7 XGMI XGMI XGMI XGMI XGMI XGMI XGMI 0 ======================================= Numa Nodes ======================================= GPU[0] : (Topology) Numa Node: 0 GPU[0] : (Topology) Numa Affinity: 0 GPU[1] : (Topology) Numa Node: 0 GPU[1] : (Topology) Numa Affinity: 0 GPU[2] : (Topology) Numa Node: 0 GPU[2] : (Topology) Numa Affinity: 0 GPU[3] : (Topology) Numa Node: 0 GPU[3] : (Topology) Numa Affinity: 0 GPU[4] : (Topology) Numa Node: 1 GPU[4] : (Topology) Numa Affinity: 1 GPU[5] : (Topology) Numa Node: 1 GPU[5] : (Topology) Numa Affinity: 1 GPU[6] : (Topology) Numa Node: 1 GPU[6] : (Topology) Numa Affinity: 1 GPU[7] : (Topology) Numa Node: 1 GPU[7] : (Topology) Numa Affinity: 1 ================================== End of ROCm SMI Log =================================== 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)
Der Verbindungstyp, die Anzahl der Hops und das Gewicht können auch mit den spezifischen Optionen --showtopoweight , --showtopotypeund –showtopoweighterhalten werden:
-
jnpr@MI300X-01:~/SCRIPTS$ rocm-smi --showtopoweight ============================ ROCm System Management Interface ============================ ================================ Weight between two GPUs ================================= GPU0 GPU1 GPU2 GPU3 GPU4 GPU5 GPU6 GPU7 GPU0 0 15 15 15 15 15 15 15 GPU1 15 0 15 15 15 15 15 15 GPU2 15 15 0 15 15 15 15 15 GPU3 15 15 15 0 15 15 15 15 GPU4 15 15 15 15 0 15 15 15 GPU5 15 15 15 15 15 0 15 15 GPU6 15 15 15 15 15 15 0 15 GPU7 15 15 15 15 15 15 15 0 ================================== End of ROCm SMI Log =================================== jnpr@MI300X-01:~/SCRIPTS$ rocm-smi --showtopohops ============================ ROCm System Management Interface ============================ ================================= Hops between two GPUs ================================== GPU0 GPU1 GPU2 GPU3 GPU4 GPU5 GPU6 GPU7 GPU0 0 1 1 1 1 1 1 1 GPU1 1 0 1 1 1 1 1 1 GPU2 1 1 0 1 1 1 1 1 GPU3 1 1 1 0 1 1 1 1 GPU4 1 1 1 1 0 1 1 1 GPU5 1 1 1 1 1 0 1 1 GPU6 1 1 1 1 1 1 0 1 GPU7 1 1 1 1 1 1 1 0 ================================== End of ROCm SMI Log =================================== jnpr@MI300X-01:~/SCRIPTS$ rocm-smi --showtopotype ============================ ROCm System Management Interface ============================ =============================== Link Type between two GPUs =============================== GPU0 GPU1 GPU2 GPU3 GPU4 GPU5 GPU6 GPU7 GPU0 0 XGMI XGMI XGMI XGMI XGMI XGMI XGMI GPU1 XGMI 0 XGMI XGMI XGMI XGMI XGMI XGMI GPU2 XGMI XGMI 0 XGMI XGMI XGMI XGMI XGMI GPU3 XGMI XGMI XGMI 0 XGMI XGMI XGMI XGMI GPU4 XGMI XGMI XGMI XGMI 0 XGMI XGMI XGMI GPU5 XGMI XGMI XGMI XGMI XGMI 0 XGMI XGMI GPU6 XGMI XGMI XGMI XGMI XGMI XGMI 0 XGMI GPU7 XGMI XGMI XGMI XGMI XGMI XGMI XGMI 0 ================================== End of ROCm SMI Log ===================================
Die --shownodesbw zeigt die Bandbreite an, die intern für die interne Kommunikation zwischen GPUs verfügbar ist:
-
jnpr@MI300X-01:/home/ben$ rocm-smi --shownodesbw ============================ ROCm System Management Interface ============================ ======================================= Bandwidth ======================================== GPU0 GPU1 GPU2 GPU3 GPU4 GPU5 GPU6 GPU7 GPU0 N/A 50000-50000 50000-50000 50000-50000 50000-50000 50000-50000 50000-50000 50000-50000 GPU1 50000-50000 N/A 50000-50000 50000-50000 50000-50000 50000-50000 50000-50000 50000-50000 GPU2 50000-50000 50000-50000 N/A 50000-50000 50000-50000 50000-50000 50000-50000 50000-50000 GPU3 50000-50000 50000-50000 50000-50000 N/A 50000-50000 50000-50000 50000-50000 50000-50000 GPU4 50000-50000 50000-50000 50000-50000 50000-50000 N/A 50000-50000 50000-50000 50000-50000 GPU5 50000-50000 50000-50000 50000-50000 50000-50000 50000-50000 N/A 50000-50000 50000-50000 GPU6 50000-50000 50000-50000 50000-50000 50000-50000 50000-50000 50000-50000 N/A 50000-50000 GPU7 50000-50000 50000-50000 50000-50000 50000-50000 50000-50000 50000-50000 50000-50000 N/A Format: min-max; Units: mps "0-0" min-max bandwidth indicates devices are not connected directly ================================== End of ROCm SMI Log ===================================
rocm-smi -h
Weitere Informationen zu ROCm-SMI sowie zur neueren AMD-SMI CLI finden Sie unter: ROCm-Dokumentation, AMD SMI-Dokumentation, ROCm und AMD SMI
NICs und GPUs-Mappings
Als Nächstes führen Sie die Zuordnung der NIC zu GPUs durch, wie in den folgenden Schritten gezeigt. Diese werden sowohl für Thor2 als auch für AMD Pollara 400 NIC gleich sein.
Die Informationen aus anderen Befehlen können mit einigen der oben genannten Optionen kombiniert werden, um eine Korrelation zwischen GPU und NICs zu finden, indem Sie die folgenden Schritte ausführen:
- NUMA-Knoten und GPUs identifizieren
Verwenden Sie die Ausgabe von
rocm-smi --showtoponumaoder nurrocm-smi --showtopo, um Zuordnungen zwischen GPUs und NUMA-Knoten zu finden.Suchen Sie in der Ausgabe nach NUMA-Affinität für jede GPU. Eine Beschreibung der Bedeutung dieses Attributs finden Sie weiter unten in diesem Abschnitt.
Notieren Sie, welche GPUs welchen NUMA-Knoten zugeordnet sind.
Beispiel:
-
jnpr@MI300X-01:/proc$ rocm-smi --showtoponuma ============================ ROCm System Management Interface ============================ ======================================= Numa Nodes ======================================= GPU[0] : (Topology) Numa Node: 0 GPU[0] : (Topology) Numa Affinity: 0 GPU[1] : (Topology) Numa Node: 0 GPU[1] : (Topology) Numa Affinity: 0 GPU[2] : (Topology) Numa Node: 0 GPU[2] : (Topology) Numa Affinity: 0 GPU[3] : (Topology) Numa Node: 0 GPU[3] : (Topology) Numa Affinity: 0 GPU[4] : (Topology) Numa Node: 1 GPU[4] : (Topology) Numa Affinity: 1 GPU[5] : (Topology) Numa Node: 1 GPU[5] : (Topology) Numa Affinity: 1 GPU[6] : (Topology) Numa Node: 1 GPU[6] : (Topology) Numa Affinity: 1 GPU[7] : (Topology) Numa Node: 1 GPU[7] : (Topology) Numa Affinity: 1 ================================== End of ROCm SMI Log ===================================
GPU 0–3 → NUMA-Knoten 0
GPU 4–7 → NUMA Knoten 1
-
- Identifizieren von NUMA-Knoten für NICs
Navigieren Sie zum Verzeichnis,
/sys/class/net/und überprüfen Sie die NUMA-Knotenaffinität für jede Netzwerkschnittstelle (mit Ausnahme von Lo- oder Docker-Schnittstellen):-
for iface in $(ls /sys/class/net/ | grep -Ev '^(lo|docker)'); do numa_node=$(cat /sys/class/net/$iface/device/numa_node 2>/dev/null) echo "Interface: $iface, NUMA Node: $numa_node" done
Beachten Sie die NUMA-Knotenaffinität für jede NIC-Schnittstelle.
BEISPIEL:
-
jnpr@MI300X-01:~/SCRIPTS$ for iface in $(ls /sys/class/net/ | grep -Ev '^(lo|docker)'); do numa_node=$(cat /sys/class/net/$iface/device/numa_node 2>/dev/null) echo "Interface: $iface, NUMA Node: $numa_node" done Interface: ens61f1np1, NUMA Node: 1 Interface: enxbe3af2b6059f, NUMA Node: Interface: gpu0_eth, NUMA Node: 0 Interface: gpu1_eth, NUMA Node: 0 Interface: gpu2_eth, NUMA Node: 0 Interface: gpu3_eth, NUMA Node: 0 Interface: gpu4_eth, NUMA Node: 1 Interface: gpu5_eth, NUMA Node: 1 Interface: gpu6_eth, NUMA Node: 1 Interface: gpu7_eth, NUMA Node: 1 Interface: mgmt_eth, NUMA Node: 1 Interface: stor0_eth, NUMA Node: 0 Interface: stor1_eth, NUMA Node: 0
-
- Korrelation von GPUs zu NICs basierend auf NUMA-Affinität
Verwenden der NUMA-Knotenaffinität aus Schritt 1 (GPUs) und Schritt 2 (NICs), um jede GPU NICs innerhalb desselben NUMA-Knotens zuzuordnen:
BEISPIEL:
-
GPU0 (NUMA 0): - NIC: gpu0_eth (NUMA 0) - NIC: gpu1_eth (NUMA 0) - NIC: gpu2_eth (NUMA 0) - NIC: gpu3_eth (NUMA 0) - NIC: stor0_eth (NUMA 0) - NIC: stor1_eth (NUMA 0) GPU4 (NUMA 1): - NIC: gpu4_eth (NUMA 1) - NIC: gpu5_eth (NUMA 1) - NIC: gpu6_eth (NUMA 1) - NIC: gpu7_eth (NUMA 1) - NIC: mgmt_eth (NUMA 1)
-
jnpr@MI300X-01:~/SCRIPTS$ cat GPU-to-NIC_YL.sh #!/bin/bash # Temporary data files gpu_to_numa_file="GPU-to-NUMA.tmp" nic_to_numa_file="NIC-to-NUMA.tmp" output_file="NIC-to-GPU.txt" # Clear or create the output file > "$output_file" # Step 1: Parse GPUs and NUMA nodes echo "Step 1: Parsing GPUs and NUMA Nodes..." rocm-smi --showtoponuma > /tmp/rocm_smi_output.tmp 2>/dev/null if [[ $? -ne 0 ]]; then echo "Error: rocm-smi is not installed or failed to run." exit 1 fi # Extract GPU and NUMA information grep "GPU" /tmp/rocm_smi_output.tmp | grep "Numa Node" | awk -F'[ :]' '{print $2, $NF}' | sed 's/^/GPU /' > "$gpu_to_numa_file" # Step 2: Parse NICs and NUMA nodes echo "Step 2: Parsing NICs and NUMA Nodes..." > "$nic_to_numa_file" for iface in $(ls /sys/class/net/ | grep -Ev '^(lo|docker)'); do numa_node=$(cat /sys/class/net/$iface/device/numa_node 2>/dev/null) if [[ $numa_node -ge 0 ]]; then echo "NIC $iface, NUMA Node: $numa_node" >> "$nic_to_numa_file" fi done # Step 3: Match GPUs to NICs based on NUMA affinity echo "Step 3: Mapping GPUs to NICs..." while read -r gpu_entry; do gpu=$(echo "$gpu_entry" | awk '{print $2}') gpu_numa=$(echo "$gpu_entry" | awk '{print $NF}') echo "GPU$gpu (NUMA $gpu_numa):" >> "$output_file" while read -r nic_entry; do nic=$(echo "$nic_entry" | awk '{print $2}' | sed 's/,//') nic_numa=$(echo "$nic_entry" | awk '{print $NF}') if [[ "$gpu_numa" == "$nic_numa" ]]; then echo " - NIC: $nic" >> "$output_file" fi done < "$nic_to_numa_file" done < "$gpu_to_numa_file" # Output the result echo "Mapping complete! Results saved in $output_file." cat "$output_file"
BEISPIEL:
-
jnpr@MI300X-01:~/SCRIPTS$ ./GPU-to-NIC_YL.sh Step 1: Parsing GPUs and NUMA Nodes... Step 2: Parsing NICs and NUMA Nodes... Step 3: Mapping GPUs to NICs... Mapping complete! Results saved in NIC-to-GPU.txt. GPU0 (NUMA 0): - NIC: gpu0_eth - NIC: gpu1_eth - NIC: gpu2_eth - NIC: gpu3_eth - NIC: stor0_eth - NIC: stor1_eth GPU0 (NUMA 0): - NIC: gpu0_eth - NIC: gpu1_eth - NIC: gpu2_eth - NIC: gpu3_eth - NIC: stor0_eth - NIC: stor1_eth GPU0 (NUMA 0): - NIC: gpu0_eth - NIC: gpu1_eth - NIC: gpu2_eth - NIC: gpu3_eth - NIC: stor0_eth - NIC: stor1_eth GPU0 (NUMA 0): - NIC: gpu0_eth - NIC: gpu1_eth - NIC: gpu2_eth - NIC: gpu3_eth - NIC: stor0_eth - NIC: stor1_eth GPU1 (NUMA 1): - NIC: ens61f1np1 - NIC: gpu4_eth - NIC: gpu5_eth - NIC: gpu6_eth - NIC: gpu7_eth - NIC: mgmt_eth GPU1 (NUMA 1): - NIC: ens61f1np1 - NIC: gpu4_eth - NIC: gpu5_eth - NIC: gpu6_eth - NIC: gpu7_eth - NIC: mgmt_eth GPU1 (NUMA 1): - NIC: ens61f1np1 - NIC: gpu4_eth - NIC: gpu5_eth - NIC: gpu6_eth - NIC: gpu7_eth - NIC: mgmt_eth GPU1 (NUMA 1): - NIC: ens61f1np1 - NIC: gpu4_eth - NIC: gpu5_eth - NIC: gpu6_eth - NIC: gpu7_eth - NIC: mgmt_eth
Sie werden feststellen, dass es keine 1:1-Verbindung zwischen GPU und NIC gibt. Stattdessen sind der GPU mehrere NIC-Schnittstellen zugeordnet. Dies liegt daran, dass sie zur gleichen NUMA-Knotenaffinität (Non-Uniform Memory Access) gehören.
Systeme, die eine NUMA-Architektur verwenden, enthalten Sammlungen von Hardwareressourcen, einschließlich CPUs, GPUs, Arbeitsspeicher und PCIe-Geräten (einschließlich NICs), die in einem so genannten "NUMA-Knoten" gruppiert sind. Diese Ressourcen werden gegenseitig als "lokal" betrachtet. Aus Sicht einer GPU sind Geräte im selben NUMA-Knoten am engsten mit dieser GPU verknüpft. Der NUMA-Knoten wird durch die NUMA-Affinität identifiziert.
Mehrere NICs und GPUs können mit demselben PCIe-Komplex oder Switch innerhalb eines NUMA-Knotens verbunden sein. Dadurch werden die NICs für alle GPUs zugänglich, die diesen Komplex teilen. Während jedoch jede GPU im selben Knoten auf alle NICs in einem NUMA-Knoten zugreifen kann, werden die NICs dynamisch für die Verwendung durch eine bestimmte GPU zugewiesen, basierend auf Verfügbarkeit, Datenverkehrstyp, Latenz usw.
Kommunikation zwischen GPUs auf demselben NUMA-Knoten (z. B. GPU1 ↔, GPU2):
GPUs auf demselben NUMA-Knoten (z. B. GPU1 und GPU2) kommunizieren direkt über die Verbindung mit hoher Bandbreite und niedriger Latenz, wie z. B. Infinity Fabric (in AMD-Systemen).
Diese Verbindungen vermeiden CPU und Hauptspeicher vollständig und bieten eine viel schnellere Kommunikation im Vergleich zur NUMA-übergreifenden Kommunikation. Da beide GPUs "lokal" für denselben Speichercontroller und dieselbe CPU sind, ist der Kommunikationspfad hochgradig optimiert.
Kommunikation zwischen GPUs auf verschiedenen NUMA-Knoten (z. B. GPU1 ↔, GPU4):
Die Kommunikation zwischen GPUs auf verschiedenen NUMA-Knoten (z. B. GPU1 auf NUMA 0 und GPU4 auf NUMA 1) muss zusätzliche Schichten der Systemarchitektur durchlaufen, was zu einer höheren Latenz führt. Der Pfad sieht in der Regel wie folgt aus:
- GPU1 → CPU (NUMA 0): Daten werden von GPU1 an die CPU auf NUMA 0 gesendet.
- Inter-NUMA Link: Die CPUs in NUMA 0 und NUMA 1 sind über einen Interconnect wie Infinity Fabric oder UPI (Ultra Path Interconnect) verbunden.
- CPU (NUMA 1) → GPU4: Die Daten werden von der CPU auf NUMA 1 an GPU4 weitergeleitet.
Ändern von NIC-Attributen
In diesem Abschnitt erfahren Sie, wie Sie den Schnittstellennamen, die MTU, das DNS, die IP-Adressen und die Routing-Tabelleneinträge einer NIC hinzufügen oder ändern.
Bearbeiten und erneutes Anwenden der Netzwerkkonfigurationsdatei (Netplan)
Die Netzwerkkonfiguration wird in der netplan *.yaml-Datei beschrieben unter: /etc/netplan/.
Beachten Sie, dass der tatsächliche Dateiname variieren kann. Beispiele:
/etc/netplan/01-netcfg.yaml
/etc/netplan/00-installer-config.yaml
Das Ändern eines Schnittstellenattributs umfasst das Bearbeiten dieser Datei und das erneute Anwenden des Netzwerkplans wie unten gezeigt:
- Suchen Sie die Standardnamen der logischen Schnittstellen.
Dazu können Sie die folgenden Schritte ausführen:
Thor2 NIC Ausgang:
-
jnpr@MI300X-01:~$ > devnames1; for iface in $(ls /sys/class/net/ | grep -Ev '^(lo|docker|virbr)'); do device=$(ethtool -i $iface 2>/dev/null | grep 'bus-info' | awk '{print $2}'); if [[ $device != 0000:* ]]; then device="0000:$device"; fi; model=$(lspci -s $device 2>/dev/null | awk -F ': ' '{print $2}'); echo "$iface:$model" >> devnames1; done jnpr@MI300X-01:~$ cat devnames1 ens61f1np1:Mellanox Technologies MT2910 Family [ConnectX-7] enxbe3af2b6059f: ens41np0:Broadcom Inc. and subsidiaries BCM957608 25Gb/50Gb/100Gb/200Gb/400Gb Ethernet (rev 11) ens42np0:Broadcom Inc. and subsidiaries BCM957608 25Gb/50Gb/100Gb/200Gb/400Gb Ethernet (rev 11) ens32np0:Broadcom Inc. and subsidiaries BCM957608 25Gb/50Gb/100Gb/200Gb/400Gb Ethernet (rev 11) ens31np0:Broadcom Inc. and subsidiaries BCM957608 25Gb/50Gb/100Gb/200Gb/400Gb Ethernet (rev 11) ens21np0:Broadcom Inc. and subsidiaries BCM957608 25Gb/50Gb/100Gb/200Gb/400Gb Ethernet (rev 11) ens22np0:Broadcom Inc. and subsidiaries BCM957608 25Gb/50Gb/100Gb/200Gb/400Gb Ethernet (rev 11) ens12np0:Broadcom Inc. and subsidiaries BCM957608 25Gb/50Gb/100Gb/200Gb/400Gb Ethernet (rev 11) ens11np0:Broadcom Inc. and subsidiaries BCM957608 25Gb/50Gb/100Gb/200Gb/400Gb Ethernet (rev 11) ens61f0np0:Mellanox Technologies MT2910 Family [ConnectX-7] ens50f0np0:Mellanox Technologies MT2910 Family [ConnectX-7] ens50f1np1:Mellanox Technologies MT2910 Family [ConnectX-7]
Schnittstelle
ens31np0:Wo
- DE: Ethernet-Netzwerkschnittstelle.
- S31: Gibt die physische Position der Netzwerkschnittstelle auf dem Systembus an. Steckplatz Nummer 31 auf dem Bus.
- NP0:
- n: Netzwerk (zeigt an, dass es sich um einen Netzwerkport handelt).
- p0: Port 0 (zeigt an, dass es sich um den ersten Port dieser Netzwerkschnittstelle handelt).
AMD Pollara 400 NIC-Ausgang
-
jnpr@mi300-01:~# > devnames1; for iface in $(ls /sys/class/net/ | grep -Ev '^(lo|docker|virbr)'); do device=$(ethtool -i $iface 2>/dev/null | grep 'bus-info' | awk '{print $2}'); if [[ $device != 0000:* ]]; then device="0000:$device"; fi; model=$(lspci -s $device 2>/dev/null | awk -F ': ' '{print $2}'); echo "$iface:$model" >> devnames1; done jnpr@mi300-01:~# cat devnames1 ens61f1np1:Mellanox Technologies MT2910 Family [ConnectX-7] eth3: gpu0_eth:Pensando Systems DSC Ethernet Controller gpu1_eth:Pensando Systems DSC Ethernet Controller gpu2_eth:Pensando Systems DSC Ethernet Controller gpu3_eth:Pensando Systems DSC Ethernet Controller gpu4_eth:Pensando Systems DSC Ethernet Controller gpu5_eth:Pensando Systems DSC Ethernet Controller gpu6_eth:Pensando Systems DSC Ethernet Controller gpu7_eth:Pensando Systems DSC Ethernet Controller mgmt_eth:Mellanox Technologies MT2910 Family [ConnectX-7] stor0_eth:Mellanox Technologies MT2910 Family [ConnectX-7] stor1_eth:Mellanox Technologies MT2910 Family [ConnectX-7]
Sie können das Skript
gpunic.pyverwenden, um Zuordnungen zwischen GPUs und NIC pro PCIe-Bus zu finden, um zu ermitteln, wie die NICS aus Gründen der Konsistenz umbenannt werden müssen.BEISPIEL:
-
jnpr@MI300X-01:~/SCRIPTS$ sudo python3 amd_map_nic_gpu.py bus 0000:00:01.1: 0000:05:00.0 (gpu) - GPU0 0000:08:00.0 (gpu) - - 0000:08:00.1 (gpu) - - 0000:08:00.2 (gpu) - - 0000:09:00.0 (nic) - gpu0_eth bus 0000:20:01.1: 0000:25:00.0 (gpu) - - 0000:25:00.1 (gpu) - - 0000:25:00.2 (gpu) - - 0000:26:00.0 (nic) - gpu1_eth 0000:29:00.0 (gpu) - GPU1 bus 0000:20:03.1: 0000:31:00.0 (nic) - stor0_eth 0000:31:00.1 (nic) - stor1_eth bus 0000:40:01.1: 0000:45:00.0 (gpu) - - 0000:45:00.1 (gpu) - - 0000:45:00.2 (gpu) - - 0000:46:00.0 (nic) - gpu2_eth 0000:49:00.0 (gpu) - GPU2 bus 0000:60:01.1: 0000:65:00.0 (gpu) - GPU3 0000:68:00.0 (gpu) - - 0000:68:00.1 (gpu) - - 0000:68:00.2 (gpu) - - 0000:69:00.0 (nic) - gpu3_eth bus 0000:60:05.4: 0000:6e:00.0 (gpu) - - bus 0000:80:01.1: 0000:85:00.0 (gpu) - GPU4 0000:88:00.0 (gpu) - - 0000:88:00.1 (gpu) - - 0000:88:00.2 (gpu) - - 0000:89:00.0 (nic) - gpu4_eth bus 0000:a0:01.1: 0000:a5:00.0 (gpu) - - 0000:a5:00.1 (gpu) - - 0000:a5:00.2 (gpu) - - 0000:a6:00.0 (nic) - gpu5_eth 0000:a9:00.0 (gpu) - GPU5 bus 0000:c0:01.1: 0000:c5:00.0 (gpu) - - 0000:c5:00.1 (gpu) - - 0000:c5:00.2 (gpu) - - 0000:c6:00.0 (nic) - gpu6_eth 0000:c9:00.0 (gpu) - GPU6 bus 0000:c0:03.1: 0000:d2:00.0 (nic) - mgmt_eth 0000:d2:00.1 (nic) - ens61f1np1 bus 0000:e0:01.1: 0000:e5:00.0 (gpu) - GPU7 0000:e8:00.0 (gpu) - - 0000:e8:00.1 (gpu) - - 0000:e8:00.2 (gpu) - - 0000:e9:00.0 (nic) - gpu7_eth
Um die Schnittstellen weiter zu identifizieren, können Sie den Befehl verwenden.sudo ethtool <device> | grep Speed
-
jnpr@MI300X-01:~/SCRIPTS$ sudo ethtool ens61f0np0| grep Speed Speed: 400000Mb/s jnpr@MI300X-01:~/SCRIPTS$ sudo ethtool enp47s0f0np0| grep Speed Speed: 200000Mb/s jnpr@MI300X-01:~/SCRIPTS$ sudo ethtool enp208s0f0np0| grep Speed Speed: 100000Mb/s
Sie möchten sicherstellen, dass die mit der GPU-Backend-Fabric, der Speicher-Back-End-Fabric und der Front-End-Fabric verbundenen NICs 400GE-Schnittstellen, 200GE-Schnittstellen bzw. 100GE-Schnittstellen sind.
NAME DER STANDARDSCHNITTSTELLE NEUER NAME Geschwindigkeit ENP6S0NP0 gpu0_eth 400GE ENP35S0NP0 gpu1_eth 400GE ENP67S0NP0 gpu2_eth 400GE ENP102S0NP0 gpu3_eth 400GE ENP134S0NP0 gpu4_eth 400GE ENP163S0NP0 gpu5_eth 400GE ENP195S0NP0 gpu6_eth 400GE ENP230S0NP0 gpu7_eth 400GE ENP47S0F0NP0 stor0_eth 200 GE ENP47S0F0NP1 stor1_eth 200 GE ENP208S0F0NP0 mgmt_eth 100 GE -
- Suchen Sie die MAC-Adresse der Schnittstelle:
Sie können den
ip linkshow <device>Befehl verwenden.BEISPIEL:
-
jnpr@MI300X-01:~/SCRIPTS$ ip link show ens61f0np0 | grep "link/ether" link/ether 5c:25:73:66:c3:ee brd ff:ff:ff:ff:ff:ff jnpr@MI300X-01:~/SCRIPTS$ ip link show enp35s0np0 | grep "link/ether" link/ether 5c:25:73:66:bc:5e brd ff:ff:ff:ff:ff:ff
NAME DER STANDARDSCHNITTSTELLE NEUER NAME MAC-Adresse ENP6S0NP0 gpu0_eth 7c:c2:55:bd:75:d0 ENP35S0NP0 gpu1_eth 7c:c2:55:bd:79:20 ENP67S0NP0 gpu2_eth 7c:c2:55:bd:7d:f0 ENP102S0NP0 gpu3_eth 7c:c2:55:bd:7e:20 ENP134S0NP0 gpu4_eth 7c:c2:55:bd:75:10 ENP163S0NP0 gpu5_eth 7c:c2:55:bd:7d:c0 ENP195S0NP0 gpu6_eth 7c:c2:55:bd:84:90 ENP230S0NP0 gpu7_eth 7c:c2:55:bd:83:10 ENP47S0F0NP0 stor0_eth 5C:25:73:66:BC:5E ENP47S0F0NP1 stor1_eth 5c:25:73:66:bc:5f ENP208S0F0NP0 mgmt_eth 5c:25:73:66:c3:ee -
- Ändern Sie die Netplan-Konfigurationsdatei mit dem neuen Namen und den neuen MAC-Adressen, die in den vorherigen Schritten festgelegt wurden.
BEISPIEL:
-
network: version: 2 ethernets: gpu0_eth: match: macaddress: 7c:c2:55:bd:75:d0 <= MAC address associated to the original ens61f0np0. Will become gpu0_eth. dhcp4: false mtu: 9000 <= Interface’s MTU (default = 1500) addresses: - 10.200.16.18/24 <= New IP address(s) routes: - to: 10.200.0.0/16 <= New route(s). Example shows route for 10.200.0.0/16 via 10.200.16.254 via: 10.200.16.254 from: 10.200.16.18 set-name: gpu0_eth <= New interface name ---more---
Achten Sie darauf, dass die korrekte Einrückung beibehalten wird und Bindestriche beim Bearbeiten der Datei angemessen sind (z. B. vor IP-Adressen, Routen usw.). Achten Sie bei den IP-Adressen darauf, die Subnetzmaske anzugeben.
Im Folgenden finden Sie ein Beispiel für die Netplan-Konfigurationsdatei für einen der MI300X-Server im Labor:
-
jnpr@MI300X-01:/etc/netplan$ cat 00-installer-config.yaml network: version: 2 ethernets: mgmt_eth: match: macaddress: 5c:25:73:66:c3:ee dhcp4: false addresses: - 10.10.1.25/31 nameservers: addresses: - 8.8.8.8 routes: - to: default via: 10.10.1.24 set-name: mgmt_eth stor0_eth: match: macaddress: 5c:25:73:66:bc:5e dhcp4: false mtu: 9000 addresses: - 10.100.5.3/31 routes: - to: 10.100.0.0/21 via: 10.100.5.2 set-name: stor0_eth stor1_eth: match: macaddress: 5c:25:73:66:bc:5f dhcp4: false mtu: 9000 addresses: - 10.100.5.5/31 routes: - to: 10.100.0.0/21 via: 10.100.5.4 set-name: stor1_eth gpu0_eth: match: macaddress: 7c:c2:55:bd:75:d0 dhcp4: false mtu: 9000 addresses: - 10.200.16.18/24 routes: - to: 10.200.0.0/16 via: 10.200.16.254 from: 10.200.16.18 set-name: gpu0_eth gpu1_eth: match: macaddress: 7c:c2:55:bd:79:20 dhcp4: false mtu: 9000 addresses: - 10.200.17.18/24 routes: - to: 10.200.0.0/16 via: 10.200.17.254 from: 10.200.17.18 set-name: gpu1_eth gpu2_eth: match: macaddress: 7c:c2:55:bd:7d:f0 dhcp4: false mtu: 9000 addresses: - 10.200.18.18/24 routes: - to: 10.200.0.0/16 via: 10.200.18.254 from: 10.200.18.18 set-name: gpu2_eth gpu3_eth: match: macaddress: 7c:c2:55:bd:7e:20 dhcp4: false mtu: 9000 addresses: - 10.200.19.18/24 routes: - to: 10.200.0.0/16 via: 10.200.19.254 from: 10.200.19.18 set-name: gpu3_eth gpu4_eth: match: macaddress: 7c:c2:55:bd:75:10 dhcp4: false mtu: 9000 addresses: - 10.200.20.18/24 routes: - to: 10.200.0.0/16 via: 10.200.20.254 from: 10.200.20.18 set-name: gpu4_eth gpu5_eth: match: macaddress: 7c:c2:55:bd:7d:c0 dhcp4: false mtu: 9000 addresses: - 10.200.21.18/24 routes: - to: 10.200.0.0/16 via: 10.200.21.254 from: 10.200.21.18 set-name: gpu5_eth gpu6_eth: match: macaddress: 7c:c2:55:bd:84:90 dhcp4: false mtu: 9000 addresses: - 10.200.22.18/24 routes: - to: 10.200.0.0/16 via: 10.200.22.254 from: 10.200.22.18 set-name: gpu6_eth gpu7_eth: match: macaddress: 7c:c2:55:bd:83:10 dhcp4: false mtu: 9000 addresses: - 10.200.23.18/24 routes: - to: 10.200.0.0/16 via: 10.200.23.254 from: 10.200.23.18 set-name: gpu7_eth
-
-
Speichern Sie die Datei und wenden Sie die Änderungen mit dem Befehl netplan apply an.
jnpr@MI300X-01:/etc/netplan$ sudo netplan anwenden
jnpr@MI300X-01:/etc/netplan$
- Stellen Sie sicher, dass die Änderungen korrekt übernommen wurden.
Überprüfen Sie, ob die neuen Schnittstellennamen korrekt sind:
Thor2 NIC Ausgang:
-
root@MI300X-01:/home/jnpr/SCRIPTS# > devnames; for iface in $(ls /sys/class/net/ | grep -Ev '^(lo|docker|virbr)'); do device=$(ethtool -i $iface 2>/dev/null | grep 'bus-info' | awk '{print $2}'); if [[ $device != 0000:* ]]; then device="0000:$device"; fi; model=$(lspci -s $device 2>/dev/null | awk -F ': ' '{print $2}'); echo "$iface:$model" >> devnames; done root@MI300X-01:/home/jnpr/SCRIPTS# cat devnames ens61f1np1:Mellanox Technologies MT2910 Family [ConnectX-7] enxbe3af2b6059f: gpu0_eth:Broadcom Inc. and subsidiaries BCM957608 25Gb/50Gb/100Gb/200Gb/400Gb Ethernet (rev 11) gpu1_eth:Broadcom Inc. and subsidiaries BCM957608 25Gb/50Gb/100Gb/200Gb/400Gb Ethernet (rev 11) gpu2_eth:Broadcom Inc. and subsidiaries BCM957608 25Gb/50Gb/100Gb/200Gb/400Gb Ethernet (rev 11) gpu3_eth:Broadcom Inc. and subsidiaries BCM957608 25Gb/50Gb/100Gb/200Gb/400Gb Ethernet (rev 11) gpu4_eth:Broadcom Inc. and subsidiaries BCM957608 25Gb/50Gb/100Gb/200Gb/400Gb Ethernet (rev 11) gpu5_eth:Broadcom Inc. and subsidiaries BCM957608 25Gb/50Gb/100Gb/200Gb/400Gb Ethernet (rev 11) gpu6_eth:Broadcom Inc. and subsidiaries BCM957608 25Gb/50Gb/100Gb/200Gb/400Gb Ethernet (rev 11) gpu7_eth:Broadcom Inc. and subsidiaries BCM957608 25Gb/50Gb/100Gb/200Gb/400Gb Ethernet (rev 11) mgmt_eth:Mellanox Technologies MT2910 Family [ConnectX-7] stor0_eth:Mellanox Technologies MT2910 Family [ConnectX-7] stor1_eth:Mellanox Technologies MT2910 Family [ConnectX-7]
AMD Pollara NIC-Ausgabe für denselben Befehl:
-
jnpr@mi300-01:~$ > devnames; for iface in $(ls /sys/class/net/ | grep -Ev '^(lo|docker|virbr)'); do device=$(ethtool -i $iface 2>/dev/null | grep 'bus-info' | awk '{print $2}'); if [[ $device != 0000:* ]]; then device="0000:$device"; fi; model=$(lspci -s $device 2>/dev/null | awk -F ': ' '{print $2}'); echo "$iface:$model" >> devnames; done jnpr@mi300-01:~$ cat devnames ens61f1np1:Mellanox Technologies MT2910 Family [ConnectX-7] eth3: gpu0_eth:Pensando Systems DSC Ethernet Controller gpu1_eth:Pensando Systems DSC Ethernet Controller gpu2_eth:Pensando Systems DSC Ethernet Controller gpu3_eth:Pensando Systems DSC Ethernet Controller gpu4_eth:Pensando Systems DSC Ethernet Controller gpu5_eth:Pensando Systems DSC Ethernet Controller gpu6_eth:Pensando Systems DSC Ethernet Controller gpu7_eth:Pensando Systems DSC Ethernet Controller mgmt_eth:Mellanox Technologies MT2910 Family [ConnectX-7] stor0_eth:Mellanox Technologies MT2910 Family [ConnectX-7] stor1_eth:Mellanox Technologies MT2910 Family [ConnectX-7]
Überprüfen Sie, ob die IP-Adressen richtig konfiguriert wurden:
-
user@MI300X-03:~/scripts$ ip address show gpu0_eth 4: gpu0_eth: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc mq state UP group default qlen 1000 link/ether 6c:92:cf:87:cc:00 brd ff:ff:ff:ff:ff:ff inet 10.200.24.22/24 brd 10.200.24.255 scope global gpu0_eth valid_lft forever preferred_lft forever inet6 fe80::6e92:cfff:fe87:cc00/64 scope link valid_lft forever preferred_lft forever
ODER
-
jnpr@MI300X-01:/etc/netplan$ ifconfig gpu0_eth gpu0_eth: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 9000 inet 10.200.16.18 netmask 255.255.255.0 broadcast 10.200.16.255 inet6 fe80::7ec2:55ff:febd:75d0 prefixlen 64 scopeid 0x20<link> ether 7c:c2:55:bd:75:d0 txqueuelen 1000 (Ethernet) RX packets 253482 bytes 28518251 (28.5 MB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 38519 bytes 10662707 (10.6 MB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Prüfen Sie, ob die Routen korrekt zur Routing-Tabelle hinzugefügt wurden:
-
jnpr@MI300X-01:/etc/netplan$ route | grep mgmt_eth default _gateway 0.0.0.0 UG 0 0 0 mgmt_eth 10.10.1.24 0.0.0.0 255.255.255.254 U 0 0 0 mgmt_eth jnpr@MI300X-01:/etc/netplan$ route | grep gpu0_eth 10.200.0.0 10.200.16.254 255.255.0.0 UG 0 0 0 gpu0_eth 10.200.16.0 0.0.0.0 255.255.255.0 U 0 0 0 gpu0_eth
ODER
-
user@MI300X-03:~/scripts$ ip route show | grep gpu0_eth 10.200.24.0/24 dev gpu0_eth proto kernel scope link src 10.200.24.22
Überprüfen Sie die Adressauflösung:
-
jnpr@MI300X-01:/etc/netplan$ ping google.com -c 5 -n PING google.com (142.250.188.14) 56(84) bytes of data. 64 bytes from 142.250.188.14: icmp_seq=1 ttl=113 time=2.16 ms 64 bytes from 142.250.188.14: icmp_seq=2 ttl=113 time=2.43 ms 64 bytes from 142.250.188.14: icmp_seq=3 ttl=113 time=191 ms 64 bytes from 142.250.188.14: icmp_seq=4 ttl=113 time=50.6 ms 64 bytes from 142.250.188.14: icmp_seq=5 ttl=113 time=12.0 ms --- google.com ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4005ms rtt min/avg/max/mdev = 2.158/51.596/190.818/71.851 ms
AMD Pollara Firmware und abhängige Bibliotheken
Der Kürze halber beziehen sich die hier beschriebenen Schritte nur auf die Aktivierung des RCCL-Tests für AMD Pollara 400 NIC und daher müssen alle erforderlichen abhängigen Software und Bibliotheken installiert werden, damit der RCCL-Test ausgeführt werden kann. Die erforderlichen Schritte beziehen sich auf die Bibliotheken, die in der Tabelle AMD Server und NIC-Firmware und RCCL-unterstützende Bibliotheken aufgeführt sind.
- Stellen Sie sicher, dass die Ubuntu OS-Version 22.04 ist, wie im Abschnitt AMD Server and NIC Firmware and RCCL unterstützende Bibliotheken empfohlen
-
Install ROCm library as suggested in below steps. wget https://repo.radeon.com/amdgpu-install/6.3.3/ubuntu/jammy/amdgpu-install_6.3.60303-1_all.deb sudo apt install ./amdgpu-install_6.3.60303-1_all.deb sudo apt update sudo apt install amdgpu-dkms rocm sudo apt install cmake libstdc++-12-dev
-
- Installieren Sie die RCCL-Bibliothek wie in den folgenden Schritten vorgeschlagen. Beachten Sie, dass RCCL und ANP private Bibliotheken sind, die von AMD bereitgestellt werden.
-
tar xf rccl-7961624_may21.tgz cd rccl-7961624 ./install.sh -l --prefix=build --disable-mscclpp --disable-msccl-kernel
-
- Installieren Sie Unified Communication Framework (UCX). Das Unified Communication Framework (UCX) ist ein plattformübergreifendes Open-Source-Framework, das entwickelt wurde, um einen gemeinsamen Satz von Kommunikationsschnittstellen für verschiedene Netzwerkprogrammiermodelle und -schnittstellen bereitzustellen. Weitere Informationen finden Sie in der AMD-Dokumentation .
-
sudo apt install libtool git clone https://github.com/openucx/ucx.git cd ucx ./autogen.sh mkdir build cd build ../configure --prefix=/opt/ucx --with-rocm=/opt/rocm ../configure --prefix=/opt/ucx make -j $(nproc) sudo make -j $(nproc) install
-
- Installieren Sie als Nächstes OpenMPI. Beachten Sie, dass OpenMPI ein GitHub-Link ist und daher möglicherweise GitHub-Anmeldeinformationen erforderlich sind. Das Open MPI-Projekt ist eine Open-Source-Implementierung für die Nachrichtenübergabeschnittstelle, die von einem Konsortium aus akademischen, Forschungs- und Industriepartnern entwickelt und gepflegt wird. Open MPI ist daher in der Lage, das Fachwissen, die Technologien und die Ressourcen aus der gesamten High Performance Computing-Community zu kombinieren, um die beste verfügbare MPI-Bibliothek zu erstellen.
-
sudo apt install flex git clone --recursive https://github.com/open-mpi/ompi.git cd ompi ./autogen.pl mkdir build cd build ../configure --prefix=/opt/ompi --with-ucx=/opt/ucx --with-rocm=/opt/rocm make -j $(nproc) sudo make install
-
- Installieren Sie Pollara-Treiber und -Firmware. Dies ist ein von AMD bereitgestelltes Firmware-Bundle. Diese Firmware installiert auch das Befehlszeilenprogramm 'nicctl', um mit den Pollara-NICs zu interagieren und Befehle zum Zurücksetzen von Karten oder zum Konfigurieren von Qos usw. auszuführen.
-
# Prerequisites sudo apt install device-tree-compiler policycoreutils ninja-build jq pkg-config libnl-3-dev libnl-route-3-dev libpci-dev # Untar the bundle itself tar xf ainic_bundle_1.113.0-a-2.tar.gz # cd into the bundle directory cd ainic_bundle_1.113.0-a-2 # untar the host software tar xf host_sw_pkg.tar.gz # cd into the host software directory cd host_sw_pkg # install the drivers and software sudo ./install.sh
Ausgabe der Firmware-Version:
-
jnpr@MI300-01:~/ainic_bundle_1.110.0-a-79$ sudo nicctl update firmware --image ./ainic_fw_salina.tar --log-file /tmp/amd_ainic_upgrade.log ---------------------------------------------------------------------------------- Card Id Stage Progress ---------------------------------------------------------------------------------- 42424650-4c32-3530-3130-313346000000 Done 100% [02:50.941] 42424650-4c32-3530-3130-313844000000 Done 100% [02:41.200] 42424650-4c32-3530-3130-313242000000 Done 100% [02:51.584] 42424650-4c32-3530-3130-304341000000 Done 100% [02:51.281] 42424650-4c32-3530-3130-313434000000 Done 100% [02:31.062] 42424650-4c32-3530-3130-314537000000 Done 100% [02:51.480] 42424650-4c32-3530-3130-314436000000 Done 100% [02:51.077] 42424650-4c32-3530-3130-304435000000 Done 100% [02:51.367] NIC 42424650-4c32-3530-3130-313346000000 (0000:06:00.0) : Successful NIC 42424650-4c32-3530-3130-313844000000 (0000:23:00.0) : Successful NIC 42424650-4c32-3530-3130-313242000000 (0000:43:00.0) : Successful NIC 42424650-4c32-3530-3130-304341000000 (0000:66:00.0) : Successful NIC 42424650-4c32-3530-3130-313434000000 (0000:86:00.0) : Successful NIC 42424650-4c32-3530-3130-314537000000 (0000:a3:00.0) : Successful NIC 42424650-4c32-3530-3130-314436000000 (0000:c3:00.0) : Successful NIC 42424650-4c32-3530-3130-304435000000 (0000:e6:00.0) : Successful
-
- Führen Sie nach Abschluss der Firmware-Installation die Reset-Karte aus, um die Firmware-Version widerzuspiegeln.
Pollara NIC-Ausgabe des Firmware-Updates
-
jnpr@mi300-01:~$ sudo nicctl reset card --all NIC 42424650-4c32-3530-3130-313346000000 (0000:06:00.0) : Card reset triggered, wait for completion (75 secs) NIC 42424650-4c32-3530-3130-313844000000 (0000:23:00.0) : Card reset triggered, wait for completion (75 secs) NIC 42424650-4c32-3530-3130-313242000000 (0000:43:00.0) : Card reset triggered, wait for completion (75 secs) NIC 42424650-4c32-3530-3130-304341000000 (0000:66:00.0) : Card reset triggered, wait for completion (75 secs) NIC 42424650-4c32-3530-3130-313434000000 (0000:86:00.0) : Card reset triggered, wait for completion (75 secs) NIC 42424650-4c32-3530-3130-314537000000 (0000:a3:00.0) : Card reset triggered, wait for completion (75 secs) NIC 42424650-4c32-3530-3130-314436000000 (0000:c3:00.0) : Card reset triggered, wait for completion (75 secs) NIC 42424650-4c32-3530-3130-304435000000 (0000:e6:00.0) : Card reset triggered, wait for completion (75 secs) NIC 42424650-4c32-3530-3130-313346000000 (0000:06:00.0) : Card reset successful NIC 42424650-4c32-3530-3130-313844000000 (0000:23:00.0) : Card reset successful NIC 42424650-4c32-3530-3130-313242000000 (0000:43:00.0) : Card reset successful NIC 42424650-4c32-3530-3130-304341000000 (0000:66:00.0) : Card reset successful NIC 42424650-4c32-3530-3130-313434000000 (0000:86:00.0) : Card reset successful NIC 42424650-4c32-3530-3130-314537000000 (0000:a3:00.0) : Card reset successful NIC 42424650-4c32-3530-3130-314436000000 (0000:c3:00.0) : Card reset successful NIC 42424650-4c32-3530-3130-304435000000 (0000:e6:00.0) : Card reset successful jnpr@mi300-01:~$ sudo nicctl show card --detail | grep Firm Firmware version : 1.110.0-a-79 Firmware version : 1.110.0-a-79 Firmware version : 1.110.0-a-79 Firmware version : 1.110.0-a-79 Firmware version : 1.110.0-a-79 Firmware version : 1.110.0-a-79 Firmware version : 1.110.0-a-79 Firmware version : 1.110.0-a-79
-
- Installieren Sie das ANP-Plugin. ANP ist eine Plugin-Bibliothek, die entwickelt wurde, um die kollektive RCCL-Kommunikationsbibliothek mit erweiterter Unterstützung für Netzwerktransport zu erweitern. Die ANP-Plugin-Bibliothek ist eine private AMD-Bibliothek.
-
sudo apt install libboost-dev export RCCL_BUILD=/home/${User}/pollara/rccl-7961624/build/release export MPI_INCLUDE=/opt/ompi/include export MPI_LIB_PATH=/opt/ompi/lib make RCCL_BUILD=$RCCL_BUILD MPI_INCLUDE=$MPI_INCLUDE MPI_LIB_PATH=$MPI_LIB_PATH
-
- Zum Schluss erstellen Sie die RCCL-Tests.
Build rccl-tests git clone https://github.com/ROCm/rccl-tests.git cd rccl-tests make MPI=1 MPI_HOME=/opt/ompi NCCL_HOME=/home/${User}/pollara/rccl-7961624/build/release CUSTOM_RCCL_LIB=/home/${User}/pollara/rccl-7961624/build/release/librccl.so -j $(nproc) make MPI=1 MPI_HOME=/opt/ompi NCCL_HOME=/home/dbarmann/pollara/rccl-7961624/build/release HIP_HOME=/home/${User}/pollara/rccl-7961624/build/release CUSTOM_RCCL_LIB=/home/${User}/pollara/rccl-7961624/build/release/librccl.so -j $(nproc)
Broadcom BCM957608 Thor2 DCQCN-Konfiguration für RDMA-Datenverkehr
Standardmäßige DCQN-ECN/PFC-Attribute in AMD-Servern.
Die Netzwerkschnittstellenadapter sind mit den folgenden Class-of-Service-Parametern (einschließlich DCQCN-ECN) für RoCE-Datenverkehr konfiguriert:
Für Thor2 NIC Adapter:
- RoCEv2 (RDMA über IPv4) aktiviert
- Überlastungskontrolle (ECN) und PFC-fähig
- RoCE-Datenverkehr, der mit DSCP 26 auf PRIORITÄT 3 gekennzeichnet ist
- RoCE CNP-Datenverkehr mit DSCP 48 und PRIORITÄT 7
Zuordnung von Broadcom- und logischen Schnittstellennamen zur Konfiguration von DCQN-ECN/PFC und TOS/DSCP für RDMA-Datenverkehrsattribute auf AMD-Servern
DCQCN, ECN, PFC und Datenverkehrsmarkierungen müssen auf den Schnittstellen konfiguriert werden, die mit dem GPU-Backend verbunden sind. Das gilt nur für die GPU#_eth Schnittstellen (#=0-7).
Im Abschnitt Ändern von NIC-Attributen dieses Dokuments haben wir festgestellt, dass es sich bei den gpu#_eth-Schnittstellen in unseren Servern um NICs von Broadcom BCM957608 (siehe unten) handelt.
-
root@MI300X-01:/home/jnpr/SCRIPTS# cat devnames | grep gpu gpu0_eth:Broadcom Inc. and subsidiaries BCM957608 25Gb/50Gb/100Gb/200Gb/400Gb Ethernet (rev 11) gpu1_eth:Broadcom Inc. and subsidiaries BCM957608 25Gb/50Gb/100Gb/200Gb/400Gb Ethernet (rev 11) gpu2_eth:Broadcom Inc. and subsidiaries BCM957608 25Gb/50Gb/100Gb/200Gb/400Gb Ethernet (rev 11) gpu3_eth:Broadcom Inc. and subsidiaries BCM957608 25Gb/50Gb/100Gb/200Gb/400Gb Ethernet (rev 11) gpu4_eth:Broadcom Inc. and subsidiaries BCM957608 25Gb/50Gb/100Gb/200Gb/400Gb Ethernet (rev 11) gpu5_eth:Broadcom Inc. and subsidiaries BCM957608 25Gb/50Gb/100Gb/200Gb/400Gb Ethernet (rev 11) gpu6_eth:Broadcom Inc. and subsidiaries BCM957608 25Gb/50Gb/100Gb/200Gb/400Gb Ethernet (rev 11) gpu7_eth:Broadcom Inc. and subsidiaries BCM957608 25Gb/50Gb/100Gb/200Gb/400Gb Ethernet (rev 11)
Alle Schritte zur Konfiguration der Class of Service in diesem Abschnitt konzentrieren sich auf diese Broadcom-Schnittstellen.
Wir werden eine Kombination aus Linux-Systembefehlen und Broadcom-Tools verwenden, um DCQCN ECN/PFC-Betrieb und RoCE-Datenverkehrskennzeichnung zu aktivieren, abzustimmen und zu überwachen. Für einige dieser Befehle müssen wir den Namen der Broadcom-Schnittstelle finden, der jeder GPU-Schnittstelle zugeordnet ist. Führen Sie die folgenden Schritte aus, um diese Zuordnungen zu finden:
- Ermitteln Sie die PCI-Adressen jeder gpu#_eth Schnittstelle mithilfe der folgenden Logik:
-
for iface in $(ls /sys/class/net | grep -E 'gpu[0-9]+_eth'); do pci_addr=$(readlink -f /sys/class/net/$iface/device | awk -F '/' '{print $NF}') echo "$iface => $pci_addr" done1
BEISPIEL:
-
root@MI300X-01:/home/jnpr/SCRIPTS# for iface in $(ls /sys/class/net | grep -E 'gpu[0-9]+_eth'); do pci_addr=$(readlink -f /sys/class/net/$iface/device | awk -F '/' '{print $NF}') echo "$iface => $pci_addr" done gpu0_eth => 0000:06:00.0 gpu1_eth => 0000:23:00.0 gpu2_eth => 0000:43:00.0 gpu3_eth => 0000:66:00.0 gpu4_eth => 0000:86:00.0 gpu5_eth => 0000:a3:00.0 gpu6_eth => 0000:c3:00.0 gpu7_eth => 0000:e6:00.0
-
- Suchen Sie die bnxt_re# (#=0-7)-Geräte, die jeder PCI-Adresse entsprechen, indem Sie die folgende Logik verwenden:
-
for pci in $(find /sys/class/infiniband -type l -exec basename {} \;); do pci_addr=$(readlink -f /sys/class/infiniband/$pci/device | awk -F '/' '{print $NF}') echo "$pci => $pci_addr" |grep bnxt done
BEISPIEL:
-
root@MI300X-01:/home/jnpr/SCRIPTS# for pci in $(find /sys/class/infiniband -type l -exec basename {} \;); do pci_addr=$(readlink -f /sys/class/infiniband/$pci/device | awk -F '/' '{print $NF}') echo "$pci => $pci_addr" |grep bnxt done bnxt_re5 => 0000:a3:00.0 bnxt_re3 => 0000:66:00.0 bnxt_re1 => 0000:23:00.0 bnxt_re6 => 0000:c3:00.0 bnxt_re4 => 0000:86:00.0 bnxt_re2 => 0000:43:00.0 bnxt_re0 => 0000:06:00.0 bnxt_re7 => 0000:e6:00.0
-
- ORDNEN Sie die Namen der GPU-Schnittstelle bnxt_re# oder mlx5_# Schnittstellen zu.
Kombinieren Sie die Ausgaben aus Schritt 1 und 2, um eine vollständige Zuordnung von GPU#_eth zu bnxt_re# oder mlx5_# zu erstellen. Sie können den Ausgaben entnehmen, dass z.B. gpu0_eth bnxt_re3 (0000:66:00.0) entspricht
Sie können die folgende Logik verwenden, um den Prozess zu vereinfachen:
-
echo "GPU-to-NIC Mapping:" for iface in $(ls /sys/class/net | grep -E 'gpu[0-9]+_eth'); do pci_addr=$(readlink -f /sys/class/net/$iface/device | awk -F '/' '{print $NF}') rdma_dev=$(find /sys/class/infiniband -type l -exec basename {} \; | while read rdma; do rdma_pci=$(readlink -f /sys/class/infiniband/$rdma/device | awk -F '/' '{print $NF}') if [[ "$pci_addr" == "$rdma_pci" ]]; then echo "$rdma"; fi done) echo "$iface => $pci_addr => $rdma_dev" done
BEISPIEL:
-
root@MI300X-01:/home/jnpr/SCRIPTS# echo "GPU-to-NIC Mapping:" for iface in $(ls /sys/class/net | grep -E 'gpu[0-9]+_eth'); do pci_addr=$(readlink -f /sys/class/net/$iface/device | awk -F '/' '{print $NF}') rdma_dev=$(find /sys/class/infiniband -type l -exec basename {} \; | while read rdma; do rdma_pci=$(readlink -f /sys/class/infiniband/$rdma/device | awk -F '/' '{print $NF}') if [[ "$pci_addr" == "$rdma_pci" ]]; then echo "$rdma"; fi done) echo "$iface => $pci_addr => $rdma_dev" done GPU-to-NIC Mapping: gpu0_eth => 0000:06:00.0 => bnxt_re0 gpu1_eth => 0000:23:00.0 => bnxt_re1 gpu2_eth => 0000:43:00.0 => bnxt_re2 gpu3_eth => 0000:66:00.0 => bnxt_re3 gpu4_eth => 0000:86:00.0 => bnxt_re4 gpu5_eth => 0000:a3:00.0 => bnxt_re5 gpu6_eth => 0000:c3:00.0 => bnxt_re6 gpu7_eth => 0000:e6:00.0 => bnxt_re7
Konfiguration von DCQN-ECN/PFC und TOS/DSCP für RDMA Datenverkehrsattribute in AMD-Servern (Broadcom-Schnittstellen)
Einige der Parameter für DCQN-ECN/PFC und TOS/DSCP sind in der folgenden Tabelle aufgeführt:
Tabelle 25. DCQCN-Konfigurationsparameter des Servers
| PARAMETERBESCHREIBUNG | STANDARD | |
|---|---|---|
| cc_mode | 1 | |
| cnp_ecn | ECN aktiviert/deaktiviert | 0x1 (aktiviert) |
| cnp_dscp | DSCP-Wert für RoCE-Überlastungsbenachrichtigungspakete | 48 |
| cnp_prio | Priorität für RoCE-Überlastungsbenachrichtigungspakete | 7 |
| cnp_ratio_th | Definiert das Schwellenwertverhältnis für die Generierung von CNPs. Es bestimmt die Rate, mit der CNPs als Reaktion auf Überlastung gesendet werden, und hilft, die Aggressivität des Feedback-Mechanismus zu kontrollieren. | 0x0 |
| ecn_enable | Aktivieren Sie die Überlastungskontrolle. | 0x1 (aktiviert) |
| ecn_marking | Ermöglicht das Tagging von Paketen als ECN-aktiviert. ECN = 01 | 0x1 (aktiviert) |
| default_roce_mode | Legt den RoCE-Standardmodus für RDMA fest | RoCE v2 |
| default_roce_tos | Legt den Standard-ToS-Wert für RDMA-Datenverkehr fest | 104 |
| roce_dscp | DSCP-Wert für RoCE-Pakete. | 26 |
| roce_prio | Priorität für RoCE-Pakete. | 3 |
| RTT | Zeitraum (μs), in dem sich die Anzahl der CNP und der übertragenen Pakete ansammelt. Am Ende von rtt wird das Verhältnis zwischen CNPs und TxPkts berechnet und der CP aktualisiert. | 40 μs. |
BCM95741X Ethernet-Netzwerkadapter unterstützen drei Sende- und Empfangswarteschlangen für jeden Ethernet-Port: 0, 4 und 5.
BCM95750X Ethernet-Netzwerkadapter unterstützen acht Sende- und Empfangswarteschlangen für jeden Ethernet-Port: 0 bis 7.
Standardmäßig sind alle Warteschlangen für Weighted-Fair-Queueing (WFQ) konfiguriert, wobei Datenverkehr der Priorität 0 Warteschlange 4 zugeordnet wird.
Wenn der RoCE bnxt_re Treiber geladen wird, wird CoSQ 0 für verlustfreien Datenverkehr konfiguriert, und CoSQ 5 wird von WFQ auf strikte Priorität (SP) für die CNP-Verarbeitung geändert.
RoCE- und CNP-Datenverkehr kann mit unterschiedlichen DSCP-Werten gekennzeichnet werden oder stattdessen VLAN-Tags verwenden.
Standardmäßig ist das ToS-Feld auf 104 festgelegt, was bedeutet, dass DSCP auf 48 und die ECN-Bits auf 10 (ECN-aktiviert) eingestellt sind.
Diese Parameter können mit drei verschiedenen Methoden eingestellt werden:
- DCQCN/RDMA-Markierungswerte direkt konfigurieren
- Konfigurieren von DCQCN/RDMA-Markierungswerten mit Broadcom-Tools wie
niccli,oderlldptooldirekt - Konfigurieren von DCQCN/RDMA-Markierungswerten mithilfe
thebnxt_setupcc.shdes Dienstprogramms, das hinter den Kulissen entwedernicclioder (lldptoolStandard) verwendet.
In den folgenden Abschnitten werden die Schritte beschrieben, mit denen Sie Änderungen mit diesen verschiedenen Optionen vornehmen können.
-
set class-of-service classifiers dscp mydscp forwarding-class CNP loss-priority low code-points 110000 set class-of-service classifiers dscp mydscp forwarding-class NO-LOSS loss-priority low code-points 011010 set class-of-service forwarding-classes class NO-LOSS pfc-priority 3
DCQN-ECN/PFC und TOS/DSCP für RDMA-Datenverkehrsattribute direkt konfigurieren
Sie können Änderungen am DCQCN und an der Datenverkehrsmarkierung vornehmen, indem Sie die Dateien, die die Werte der einzelnen Parameter enthalten, direkt bearbeiten. Diese Methode ist die einfachste und erfordert keine Installation zusätzlicher Tools. Es ist jedoch keine Option für PFC-bezogene Parameter und wird auch nicht auf allen Arten von Netzwerkadaptern unterstützt.
Um diese Änderungen für eine bestimmte Schnittstelle abzuschließen, müssen Sie sich im richtigen Schnittstellenverzeichnis befinden, indem Sie die folgenden Schritte ausführen:
- Erstellen von Schnittstellenverzeichnissen für QoS-bezogene Werte
Wir haben die Zuordnungen zwischen den gpu#_eth-Schnittstellen und den entsprechenden Broadcom-Schnittstellennamen bestimmt
GPU-zu-NIC-Zuordnung:
gpu0_eth = > 0000:06:00.0 = > bnxt_re0
gpu1_eth = > 0000:23:00.0 => bnxt_re1
gpu2_eth = > 0000:43:00.0 => bnxt_re2
gpu3_eth = > 0000:66:00.0 => bnxt_re3
gpu4_eth = > 0000:86:00.0 => bnxt_re4
gpu5_eth = > 0000:a3:00.0 => bnxt_re5
gpu6_eth = > 0000:c3:00.0 => bnxt_re6
gpu7_eth = > 0000:e6:00.0 => bnxt_re7
Wir werden die Broadcom-Schnittstellennamen verwenden, um die Verzeichnisse (rdma_cm und bnxt_re) zu erstellen, in denen sich die DCQCN-Attribute sowie andere Parameter und Statistiken für jede Schnittstelle befinden.
Die schnittstellenspezifischen Verzeichnisse sind erst vorhanden, wenn sie mit den folgenden Befehlen erstellt wurden:
-
cd /sys/kernel/config mkdir -p /rdma_cm/<Broadcom-interface-name> mkdir -p /bnxt_re/<Broadcom-interface-name>
Beachten Sie, dass diese beiden Verzeichnisse vorhanden sein müssen.
-
root@MI300X-01:/# cd /sys/kernel/config/ls bnxt_re rdma_cm
Wenn z.B. das rdma_cm Verzeichnis fehlt, versuchen Sie Folgendes:
-
root@MI300X-01:/sys/kernel/config# sudo modprobe rdma_cm root@MI300X-01:/sys/kernel/config# lsmod | grep rdma_cm rdma_cm 147456 0 iw_cm 61440 1 rdma_cm ib_cm 151552 1 rdma_cm ib_core 507904 6 rdma_cm,iw_cm,bnxt_re,ib_uverbs,mlx5_ib,ib_cm
BEISPIEL:
-
root@MI300X-01:/# cd /sys/kernel/config/bnxt_re root@MI300X-01:/sys/kernel/config/bnxt_re# (NO FILES LISTED) root@MI300X-01:/# cd /sys/kernel/config/rdma_cm root@MI300X-01:/sys/kernel/config/rdma_cm# ls (NO FILES LISTED) root@MI300X-01:/sys/kernel/config# mkdir -p rdma_cm/bnxt_re0 root@MI300X-01:/sys/kernel/config# mkdir -p bnxt_re/bnxt_re0 root@MI300X-01:/sys/kernel/config# ls rdma_cm bnxt_re0 root@MI300X-01:/sys/kernel/config# ls bnxt_re bnxt_re0 root@MI300X-01:/sys/kernel/config# mkdir -p rdma_cm/bnxt_re1 root@MI300X-01:/sys/kernel/config# mkdir -p bnxt_re/bnxt_re1 root@MI300X-01:/sys/kernel/config# ls rdma_cm bnxt_re0 bnxt_re1 root@MI300X-01:/sys/kernel/config# ls bnxt_re bnxt_re0 bnxt_re1
Wiederholen Sie diese Schritte für alle GPU-Schnittstellen.
HINWEIS: Sie müssen ein Root-Benutzer sein, um diese Änderungen vornehmen zu können.-
jnpr@MI300X-01:/sys/kernel/config/bnxt_re/bnxt_re0/ports/1/cc$ sudo echo -n 0x1 > ecn_enable -bash: ecn_enable: Permission denied. jnpr@MI300X-01:/sys/kernel/config/bnxt_re/bnxt_re0/ports/1/cc$ sudo bash root@MI300X-01:/sys/kernel/config/bnxt_re/bnxt_re0/ports/1/cc# sudo echo -n 0x1 > ecn_enable root@MI300X-01:/sys/kernel/config/bnxt_re/bnxt_re0/ports/1/cc#
Die neuen Verzeichnisse enthalten Werte für ECN, ROCE-Datenverkehr und andere Funktionen:
-
root@MI300X-01:/sys/kernel/config# cd rdma_cm/bnxt_re0/ports/1 root@MI300X-01:/sys/kernel/config/rdma_cm/bnxt_re0/ports/1# ls default_roce_mode default_roce_tos root@MI300X-01:/sys/kernel/config/rdma_cm/bnxt_re0/ports/1# cd /sys/kernel/config/bnxt_re/bnxt_re0/ports/1 root@MI300X-02:/sys/kernel/config/bnxt_re/bnxt_re0/ports/1$ ls cc tunables root@MI300X-02:/sys/kernel/config/bnxt_re/bnxt_re0/ports/1$ ls tunables acc_tx_path cq_coal_en_ring_idle_mode dbr_pacing_algo_threshold en_qp_dbg snapdump_dbg_lvl user_dbr_drop_recov_timeout cq_coal_buf_maxtime cq_coal_normal_maxbuf dbr_pacing_enable gsi_qp_mode stats_query_sec cq_coal_during_maxbuf dbr_def_do_pacing dbr_pacing_time min_tx_depth user_dbr_drop_recov root@MI300X-01:/sys/kernel/config/bnxt_re/bnxt_re0/ports/1/# ls cc abs_max_quota act_cr_factor act_rel_cr_th actual_cr_shift_correction_en advanced ai_rate_incr ai_rtt_th1 ai_rtt_th2 apply bw_avg_weight cc_ack_bytes cc_mode cf_rtt_th cnp_dscp cnp_ecn cnp_prio cnp_ratio_th cp_bias cp_bias_en cp_exp_update_th cr_min_th cr_prob_fac cr_width disable_prio_vlan_tx ecn_enable ecn_marking exp_ai_rtts exp_crcp_ratio fair_cr_th fr_num_rtts g inact_th init_cp init_cr init_tr l64B_per_rtt lbytes_per_usec max_cp_cr_th max_quota min_quota min_time_bet_cnp random_no_red_en red_div red_rel_rtts_th reduce_cf_rtt_th reset_cc_cr_th roce_dscp roce_prio rt_en rtt rtt_jitter_en sc_cr_th1 sc_cr_th2 tr_lb tr_prob_fac tr_update_cyls tr_update_mode
Eine Beschreibung einiger dieser Parameter sowie ihren aktuellen Wert
cat to applyfinden Sie im/sys/kernel/config/bnxt_re/bnxt_re0/ports/1/cc#Verzeichnis.BEISPIEL:
-
root@MI300X-01:/sys/kernel/config/bnxt_re/bnxt_re0/ports/1/cc# cat apply ecn status (ecn_enable) : Enabled ecn marking (ecn_marking) : ECT(1) congestion control mode (cc_mode) : DCQCN-P send priority vlan (VLAN 0) : Disabled running avg. weight(g) : 8 inactivity threshold (inact_th) : 10000 usec initial current rate (init_cr) : 0xc8 initial target rate (init_tr) : 0x320 cnp header ecn status (cnp_ecn) : ECT(1) rtt jitter (rtt_jitter_en) : Enabled link bytes per usec (lbytes_per_usec) : 0x7fff byte/usec current rate width (cr_width) : 0xe bits minimum quota period (min_quota) : 0x4 maximum quota period (max_quota) : 0x7 absolute maximum quota period(abs_max_quota) : 0xff 64B transmitted in one rtt (l64B_per_rtt) : 0xf460 roce prio (roce_prio) : 3 roce dscp (roce_dscp) : 26 cnp prio (cnp_prio) : 7 cnp dscp (cnp_dscp) : 48
-
- RoCEv2-Betrieb aktivieren.
Obwohl RoCEv2 der Standardmodus sein sollte, wird hier der Befehl zum Aktivieren von RoCEv2 angezeigt.
HINWEIS: Diese Änderung wird im Verzeichnis rdma_cm vorgenommen-
root@MI300X-01:/# cd /sys/kernel/config/rdma_cm/bnxt_re0/ports/1 root@MI300X-01:/sys/kernel/config/rdma_cm/bnxt_re0/ports/1# ls default_roce_mode default_roce_tos root@MI300X-01:/sys/kernel/config/rdma_cm/bnxt_re0/ports/1# echo RoCE v2 > default_roce_mode
HINWEIS: Geben Sie den Wert genau wie abgebildet ein, einschließlich des Leerzeichens: "RoCE v2" (Groß-/Kleinschreibung beachten).Wenden Sie nach dem Festlegen des Parameters die neuen Werte wie folgt an:
-
echo -n 0x1 > apply
Überprüfen Sie die Änderungen:
-
root@MI300X-01:/sys/kernel/config/rdma_cm/bnxt_re1/ports/1# cat default_roce_mode RoCE v2
-
-
Aktivieren Sie ECN-Reaktions- und Benachrichtigungsfunktionen.
Obwohl ECN standardmäßig aktiviert sein sollte, wird hier der Befehl zum Aktivieren von ECN angezeigt.root@MI300X-01:/# cd /sys/kernel/config/bnxt_re/bnxt_re0/ports/1/cc
-
root@MI300X-01:/sys/kernel/config/bnxt_re/bnxt_re0/ports/1/cc# echo -n 0x1 > ecn_enable
echo -n 0x0 > ecn_enable
-
root@MI300X-01:/sys/kernel/config/bnxt_re/bnxt_re0/ports/1/cc# echo -n 0x1 > ecn_enable
Wenn ECN auf den Broadcom-Schnittstellen aktiviert ist, antworten sie auf CNP-Pakete (RP) und generieren CNP-Pakete, wenn ECN-markierte (NP) empfangen werden.
Um es zu deaktivieren, geben Sie stattdessen ein echo -n 0x0 > cnp_ecn .
Wenden Sie nach dem Festlegen des Parameters die neuen Werte an:
-
echo -n 0x1 > apply
Überprüfen Sie die Änderungen:
-
root@MI300X-01:/sys/kernel/config/bnxt_re/bnxt_re0/ports/1/cc# cat ecn_enable 0x1
Sie können auch die Markierung von CNP- und ROCE-Paketen als ECN-fähig aktivieren (d. h., diese Pakete können bei Überlastung im gesamten Netzwerk markiert werden).
-
root@MI300X-01:/sys/kernel/config/bnxt_re/bnxt_re0/ports/1/cc# cat cnp_ecn 0x1
Zusammenfassend lassen sich diese Attribute zusammenfassen:
| ecn_enable | Aktiviert/deaktiviert die RP-Seite (Reaktionspunkt) von ECN. Es ermöglicht dem Gerät, auf CNP-Pakete zu reagieren. Standardwert = 1 (aktivieren) |
| cnp_ecn | Konfiguriert die Markierung von CNP-Paketen als ECN-fähig. Entweder ein Wert von 01 oder 10 für das ECT-Feld. |
| ecn_marking | Konfiguriert die Kennzeichnung von ROCE-Paketen als ECN-fähig. Entweder ein Wert von 01 oder 10 für das ECT-Feld. |
- Konfigurieren Sie die DSCP- und PRIO-Werte für CNP- und RoCEv2-Pakete.
HINWEIS: Die manuelle Konfiguration dieser Werte, wie unten gezeigt, ist nicht für alle Arten von Broadcom-Schnittstellenkarten möglich. Für BCM95741X Geräte können Sie diese Methode beispielsweise verwenden, um die ECN- und RoCE-Prioritätswerte zu konfigurieren, aber auf den BCM95750X/BCM957608 Geräten können Sie konfigurieren
.roce_dscp, ecn_dscp
Siehe Parameter für die Überlastungskontrolle des Ethernet-Netzwerkadapters von Broadcom
-
root@MI300X-01:/sys/kernel/config/bnxt_re/bnxt_re0/ports/1/cc# echo -n 0x30 > cnp_dscp # DSCP value as 48 (30 in HEX)
HINWEIS: Diese Änderungen werden im Verzeichnis bnxt_re0 vorgenommen.-
echo -n 0x1a > roce_dscp # DSCP value as 26 (1a in HEX) echo -n 0x7 > cnp_prio echo -n 0x3 > roce_prio
HINWEIS: Der folgende Fehler weist darauf hin, dass das direkte Ändern des Werts dieses Parameters nicht unterstützt wird. Im Fall von BCM957608 roce_prio müssen cnp_prio mitbnxt_setupcc.sh(später beschrieben) konfiguriert werden.-
root@MI300X-01:/sys/kernel/config/bnxt_re/bnxt_re0/ports/1/cc# echo -n 0x3 > roce_prio bash: echo: write error: Invalid argument
Wenden Sie nach dem Festlegen des Parameters die neuen Werte an:
-
echo -n 0x1 > apply
Überprüfen Sie die Änderungen:
-
root@MI300X-01:/sys/kernel/config/bnxt_re/bnxt_re0/ports/1/cc# cat cnp_dscp 0x30 root@MI300X-01:/sys/kernel/config/bnxt_re/bnxt_re0/ports/1/cc# cat cnp_dscp 0x1a root@MI300X-01:/sys/kernel/config/bnxt_re/bnxt_re0/ports/1/cc# cat cnp_prio 0x7 root@MI300X-01:/sys/kernel/config/bnxt_re/bnxt_re0/ports/1/cc# cat cnp_prio 0x3
-
- Konfigurieren Sie den DCQCN-Algorithmus (im Verzeichnis bnxt_re).
Der standardmäßige DCQCN Congestion Control (cc-mode)-Algorithmus im Broadcom Ethernet-Netzwerkadapter ist DCQCN-P. Der Modus kann mit diesen Befehlen geändert werden:
HINWEIS: Diese Änderung wird im Verzeichnis bnxt_re0 vorgenommen.So verwenden Sie DCQCN-P, konfigurieren:
-
cd /sys/kernel/config/bnxt_re/bnxt_re0/ports/1/cc/ echo -n 1 > cc_mode echo -n 1 > apply cat apply
So verwenden Sie DCQCN-D konfigurieren:
-
root@MI300X-01:/ cd /sys/kernel/config/bnxt_re/bnxt_re0/ports/1/cc/ echo -n 0 > cc_mode echo -n 1 > apply
-
- Überprüfen Sie alle konfigurierten Attribute.
Der folgende Befehl zeigt alle Schnittstellenparameter an:
-
root@MI300X-01:/ cd /sys/kernel/config/bnxt_re/bnxt_re0/ports/1/cc/ echo -n 1 > advanced echo -n 1 > apply cat apply
Weitere Informationen zum DCQCN-Algorithmus im Broadcom Ethernet-Netzwerkadapter finden Sie in den folgenden Dokumenten: Ändern der Einstellungen für den Überlastungssteuerungsmodus und RoCE Überlastungskontrolle
BEISPIEL:
Wir haben einige ECN/CNP-bezogene Parameter hervorgehoben:
-
root@MI300X-01:/sys/kernel/config# cd /sys/kernel/config/bnxt_re/bnxt_re0/ports/1/cc/ echo -n 1 > advanced echo -n 1 > apply cat apply ecn status (cnp_ecn) : Enabled ecn marking (ecn_marking) : ECT(1) congestion control mode (cc_mode) : DCQCN-P send priority vlan (VLAN 0) : Disabled running avg. weight(g) : 8 inactivity threshold (inact_th) : 10000 usec initial current rate (init_cr) : 0xc8 initial target rate (init_tr) : 0x320 round trip time (rtt) : 45 usec cnp header ecn status (cnp_ecn) : ECT(1) rtt jitter (rtt_jitter_en) : Enabled link bytes per usec (lbytes_per_usec) : 0x7fff byte/usec current rate width (cr_width) : 0xe bits minimum quota period (min_quota) : 0x4 maximum quota period (max_quota) : 0x7 absolute maximum quota period(abs_max_quota) : 0xff 64B transmitted in one rtt (l64B_per_rtt) : 0xf460 minimum time between cnps (min_time_bet_cnp) : 0x0 usec initial congestion probability (init_cp) : 0x3ff target rate update mode (tr_update_mode) : 1 target rate update cycle (tr_update_cyls) : 0x0 fast recovery rtt (fr_num_rtts) : 0x5 rtts active increase time quanta (ai_rate_incr) : 0x1 reduc. relax rtt threshold (red_rel_rtts_th) : 0x2 rtts additional relax cr rtt (act_rel_cr_th) : 0x50 rtts minimum current rate threshold (cr_min_th) : 0x0 bandwidth weight (bw_avg_weight) : 0x5 actual current rate factor (act_cr_factor) : 0x0 current rate level to max cp (max_cp_cr_th) : 0x3ff cp bias state (cp_bias_en) : Disabled log of cr fraction added to cp (cp_bias) : 0x3 cr threshold to reset cc (reset_cc_cr_th) : 0x32a target rate lower bound (tr_lb) : 0x1 current rate probability factor (cr_prob_fac) : 0x3 target rate probability factor (tr_prob_fac) : 0x5 current rate fairness threshold (fair_cr_th) : 0x64 reduction divider (red_div) : 0x1 rate reduction threshold (cnp_ratio_th) : 0x0 cnps extended no congestion rtts (exp_ai_rtts) : 0x8 rtt log of cp to cr ratio (exp_crcp_ratio) : 0x7 use lower rate table entries (rt_en) : Disabled rtts to start cp track cr (cp_exp_update_th) : 0x1a4 rtt first threshold to rise ai (ai_rtt_th1) : 0x40 rtt second threshold to rise ai (ai_rtt_th2) : 0x80 rtt actual rate base reduction threshold (cf_rtt_th) : 0x15e rtt first severe cong. cr threshold (sc_cr_th1) : 0x0 second severe cong. cr threshold (sc_cr_th2) : 0x0 cc ack bytes (cc_ack_bytes) : 0x44 reduce to init rtts threshold(reduce_cf_rtt_th) : 0x3eb rtt random no reduction of cr (random_no_red_en) : Enabled actual cr shift correction (actual_cr_shift_correction_en) : Enabled roce prio (roce_prio) : 3 roce dscp (roce_dscp) : 26 cnp prio (cnp_prio) : 7 cnp dscp (cnp_dscp) : 0
Konfigurieren von DCQN-ECN/PFC und TOS/DSCP für RDMA-Datenverkehrsattribute mithilfe von niccli
Sie können Änderungen am DCQCN und an der Datenverkehrskennzeichnung mit dem NICCL-Konfigurationsdienstprogramm vornehmen.
niccli ist ein Verwaltungstool für Broadcom Ethernet-Netzwerkadapter, das detaillierte Informationen wie Typ, Status, Seriennummer und Firmware-Version bereitstellt. Außerdem ermöglicht er die Konfiguration von Schnittstellenattributen wie DCQCN-ECN, PFC und TOS/DSCP zur Optimierung des RDMA-Datenverkehrs.
Installieren des NICCLI Konfigurationsprogramms
-
root@MI300X-01:/$ which niccli /usr/bin/niccli root@MI300X-01:/usr/bin$ ls niccli -l lrwxrwxrwx 1 18896 1381 18 Sep 25 18:52 niccli -> /opt/niccli/niccli
Sie können eine Zusammenfassung der Schnittstellenadapter und Ethernet-Ports erhalten, die mit niccli auf dem Server verwaltet werden können, wie niccli listdev, or list-eth im folgenden Beispiel gezeigt.
-
root@MI300X-01:/home/jnpr# niccli --listdev 1 ) Supermicro PCIe 400Gb Single port QSFP56-DD Ethernet Controller (Adp#1 Port#1) Device Interface Name : gpu0_eth MAC Address : 7C:C2:55:BD:75:D0 PCI Address : 0000:06:00.0 2 ) Supermicro PCIe 400Gb Single port QSFP56-DD Ethernet Controller (Adp#2 Port#1) Device Interface Name : gpu1_eth MAC Address : 7C:C2:55:BD:79:20 PCI Address : 0000:23:00.0 3 ) Supermicro PCIe 400Gb Single port QSFP56-DD Ethernet Controller (Adp#3 Port#1) Device Interface Name : gpu2_eth MAC Address : 7C:C2:55:BD:7D:F0 PCI Address : 0000:43:00.0 4 ) Supermicro PCIe 400Gb Single port QSFP56-DD Ethernet Controller (Adp#4 Port#1) Device Interface Name : gpu3_eth MAC Address : 7C:C2:55:BD:7E:20 PCI Address : 0000:66:00.0 5 ) Supermicro PCIe 400Gb Single port QSFP56-DD Ethernet Controller (Adp#5 Port#1) Device Interface Name : gpu4_eth MAC Address : 7C:C2:55:BD:75:10 PCI Address : 0000:86:00.0 6 ) Supermicro PCIe 400Gb Single port QSFP56-DD Ethernet Controller (Adp#6 Port#1) Device Interface Name : gpu5_eth MAC Address : 7C:C2:55:BD:7D:C0 PCI Address : 0000:A3:00.0 7 ) Supermicro PCIe 400Gb Single port QSFP56-DD Ethernet Controller (Adp#7 Port#1) Device Interface Name : gpu6_eth MAC Address : 7C:C2:55:BD:84:90 PCI Address : 0000:C3:00.0 8 ) Supermicro PCIe 400Gb Single port QSFP56-DD Ethernet Controller (Adp#8 Port#1) Device Interface Name : gpu7_eth MAC Address : 7C:C2:55:BD:83:10 PCI Address : 0000:E6:00.0 root@MI300X-01:/home/jnpr# niccli --list-eth BoardId Interface PCIAddr 1) BCM957608 gpu0_eth 0000:06:00.0 2) BCM957608 gpu1_eth 0000:23:00.0 3) BCM957608 gpu2_eth 0000:43:00.0 4) BCM957608 gpu3_eth 0000:66:00.0 5) BCM957608 gpu4_eth 0000:86:00.0 6) BCM957608 gpu5_eth 0000:A3:00.0 7) BCM957608 gpu6_eth 0000:C3:00.0 8) BCM957608 gpu7_eth 0000:E6:00.0
Sie können sie entweder im einzeiligen Modus, im interaktiven Modus oder im Batch-Modus verwendenniccli. Der niccli -h help enthält eine allgemeine Beschreibung dieser Modi. In diesem Abschnitt zeigen wir einige Beispiele für die Verwendung der einzeiligen und interaktiven Modi für die DCQCN-ECN-, PFC- und TOS/DSCP-Konfiguration.
-
root@MI300X-01:/sys/kernel/config/bnxt_re/bnxt_re0/ports/1/cc# niccli --help ------------------------------------------------------------------------------- NIC CLI v231.2.63.0 - Broadcom Inc. (c) 2024 (Bld-94.52.34.117.16.0) ------------------------------------------------------------------------------- NIC CLI - Help Option --help / -h Displays the following help page. Utility provides three modes of execution, 1. Interactive Mode To launch in interactive mode : <NIC CLI executable> [-i <index of the target>] | -pci <NIC pci address> After launching in interactive mode, execute 'help' command to display the list of available commands. 2. Oneline Mode To launch in Oneline mode : <NIC CLI executable> [-i <index of the target>] | -pci <NIC pci address> <command> To list available commands in Oneline mode : <NIC CLI executable> [-i <index of the target>] | -pci <NIC pci address> help Legacy Nic command syntax : To launch in Oneline mode : <NIC CLI executable> [-dev [<index of the target> | <mac addr> | <NIC pci address>]] <command> To list available commands in Oneline mode : <NIC CLI executable> [-dev [<index of the target> | <mac addr> | <NIC pci address>]] help 3. Batch Mode To launch in batch mode : <NIC CLI executable> [-i <index of the target>] | -pci <NIC pci address> --batch <batch file> NOTE: Batch mode requires flat text file with utility supported commands. Commands have to be provided in ascii format with the valid parameters. Supported commands can be listed using One-Line mode or Interactive mode Upon failure of any commands, utility will exit without continuing with other commands List available targets for Oneline or Batch mode <NIC CLI executable> --list <NIC CLI executable> --listdev
Wenn Sie ohne Optionen eingeben niccli , können Sie im interaktiven Modus arbeiten, in dem Sie einen Adapter/eine Schnittstelle (nach Index) und dann die richtige <command> (z. B. show, get_qos, set_map) auswählen, um Informationen zu erhalten oder Änderungen an der ausgewählten Schnittstelle vorzunehmen.
Sie können den Schnittstellenindex für jede Schnittstelle mit der Methode identifizieren, die im Abschnitt Zuordnen des Broadcom-Schnittstellennamens mit dem logischen Schnittstellennamen beschrieben wird. Dadurch erhalten Sie die Zuordnungen zwischen Schnittstellen und PCIe-Adressen, die Sie dann mit der folgenden Ausgabe korrelieren niccli können.
Geben Sie nach der Identifizierung den Schnittstellenindex (erste Spalte in der Ausgabe) ein, wie im folgenden Beispiel gezeigt.
BEISPIEL:
-
root@MI300X-01:/sys/kernel/config/bnxt_re/bnxt_re0/ports/1/cc# niccli ------------------------------------------------------------------------------- NIC CLI v231.2.63.0 - Broadcom Inc. (c) 2024 (Bld-94.52.34.117.16.0) ------------------------------------------------------------------------------ BoardId MAC Address FwVersion PCIAddr Type Mode 1) BCM957608 7C:C2:55:BD:75:D0 230.2.49.0 0000:06:00.0 NIC PCI 2) BCM957608 7C:C2:55:BD:79:20 230.2.49.0 0000:23:00.0 NIC PCI 3) BCM957608 7C:C2:55:BD:7D:F0 230.2.49.0 0000:43:00.0 NIC PCI 4) BCM957608 7C:C2:55:BD:7E:20 230.2.49.0 0000:66:00.0 NIC PCI 5) BCM957608 7C:C2:55:BD:75:10 230.2.49.0 0000:86:00.0 NIC PCI 6) BCM957608 7C:C2:55:BD:7D:C0 230.2.49.0 0000:A3:00.0 NIC PCI 7) BCM957608 7C:C2:55:BD:84:90 230.2.49.0 0000:C3:00.0 NIC PCI 8) BCM957608 7C:C2:55:BD:83:10 230.2.49.0 0000:E6:00.0 NIC PCI Enter the target index to connect with : 1 BCM957608> Once you are at the prompt for the selected NIC, you can enter commands such asshow, device_health_check, listdev,andlisteth) BCM957608> show NIC State : Up Device Type : THOR2 PCI Vendor ID : 0x14E4 PCI Device ID : 0x1760 PCI Revision ID : 0x11 PCI Subsys Vendor ID : 0x15D9 PCI Subsys Device ID : 0x1D42 Device Interface Name : gpu0_eth MAC Address : 7C:C2:55:BD:75:D0 Base MAC Address : 7C:C2:55:BD:75:D0 Serial Number : OA248S074777 Part Number : AOC-S400G-B1C PCI Address : 0000:06:00.0 Chip Number : BCM957608 Chip Name : THOR2 Description : Supermicro PCIe 400Gb Single port QSFP56-DD Ethernet Controller ---more--- BCM957608> devid Device Interface Name : gpu0_eth PCI Vendor ID : 0x14E4 PCI Device ID : 0x1760 PCI Revision ID : 0x11 PCI Subsys Vendor ID : 0x15D9 PCI Subsys Device ID : 0x1D42 PCI Address : 0000:06:00.0 BCM957608> device_health_check Device Health Information : SBI Mismatch Check : OK SBI Booted Check : OK SRT Mismatch Check : OK SRT Booted Check : OK CRT Mismatch Check : OK CRT Booted Check : OK Second RT Image : CRT Image Second RT Image Redundancy : Good Image Fastbooted Check : OK Directory Header Booted Check : OK Directory Header Mismatch Check : OK MBR Corrupt Check : OK NVM Configuration : OK FRU Configuration : OK --------------------------------------------- Overall Device Health : Healthy BCM957608> devid Device Interface Name : gpu0_eth PCI Vendor ID : 0x14E4 PCI Device ID : 0x1760 PCI Revision ID : 0x11 PCI Subsys Vendor ID : 0x15D9 PCI Subsys Device ID : 0x1D42 PCI Address : 0000:06:00.0
niccli -i <interface-index> <command>
niccli -list Befehl kann der Schnittstellenindex ermittelt werden.
BEISPIEL
-
root@MI300X-01:/sys/kernel/config/bnxt_re/bnxt_re0/ports/1/cc# niccli --list ------------------------------------------------------------------------------- NIC CLI v231.2.63.0 - Broadcom Inc. (c) 2024 (Bld-94.52.34.117.16.0) ------------------------------------------------------------------------------- BoardId MAC Address FwVersion PCIAddr Type Mode 1) BCM957608 7C:C2:55:BD:75:D0 230.2.49.0 0000:06:00.0 NIC PCI 2) BCM957608 7C:C2:55:BD:79:20 230.2.49.0 0000:23:00.0 NIC PCI 3) BCM957608 7C:C2:55:BD:7D:F0 230.2.49.0 0000:43:00.0 NIC PCI 4) BCM957608 7C:C2:55:BD:7E:20 230.2.49.0 0000:66:00.0 NIC PCI 5) BCM957608 7C:C2:55:BD:75:10 230.2.49.0 0000:86:00.0 NIC PCI 6) BCM957608 7C:C2:55:BD:7D:C0 230.2.49.0 0000:A3:00.0 NIC PCI 7) BCM957608 7C:C2:55:BD:84:90 230.2.49.0 0000:C3:00.0 NIC PCI 8) BCM957608 7C:C2:55:BD:83:10 230.2.49.0 0000:E6:00.0 NIC PCI
Der sudo niccli help bietet eine umfangreiche Liste von Befehlen und Optionen, die sowohl für den interaktiven als auch für den einzeiligen Modus verfügbar sind.
-
root@MI300X-01:/home/jnpr# sudo niccli help ------------------------------------------------------------------------------- NIC CLI v231.2.63.0 - Broadcom Inc. (c) 2024 (Bld-94.52.34.117.16.0) ------------------------------------------------------------------------------- Commands sets - Generic/Offline ------------------------------------------------------------------------------- list - Lists all the compatible devices listdev - Lists all the compatible devices (NIC legacy syntax) devid - Query Broadcom device id's. pkgver - Display FW PKG version installed on the device. verify - Verify FW packages & NVM nvm-list - Display NVM components and its associated versions. nvmview - View NVM directories data list-eth - Lists all NIC devices with ethernet interface names help - Lists the available commands quit - Quits from the application Commands for platform 'BCM57xxx Performance NIC' and interface 'Direct PCIe' ------------------------------------------------------------------------------- show - Shows NIC specific device information coredump - Retrieves coredump data from device. snapdump - Retrieves snapdump data from device. version - Display the current version of the application txfir - Network Interface Card Transmission Finite - Impulse Response msixmv - Display and configure the number of MSIX max - vectors values for VF's per each PF scan - Scan PCI devices in the topology pcie - Show/Execute pcie operation nvm - NVRAM Option Management pfalloc - Configure and Query for the number of PFs per PCIe - endpoint rfd - Restores NVM configuration to factory defaults backuppowercfg - Backup Power Configuration tsio - TSIO function capability on the pin ingressqos - Query and configure the ingressqos parameters egressqos - Query and configure the egressqos parameters dutycycle - Set duty cycle on TSIO outgoing signal dllsource - Set the DLL source for PHC vf - Configure and Query for a trusted VF rxportrlmt - Configure the receive side port rate limit rxrlmt - Query the configured receive side rate control parameters rxeprlmt - Configure the receive side rate control parameters for a given endpoint txpartitionrlmt - Query and Configure the transmit side partition rate limit applies to traffic - sent from a partition, which is one PF and all of its child VFs txportrlmt - Query and Configure the transmit side of port rate limit txeprlmt - Query and Configure the PCIe endpoint transmit rate control vf - Configure and Query for a trusted VF pfc - Configure the priority-based flow control for a given priority apptlv - Configure the priority for the AppTLV tcrlmt - Configure the rate limit for each traffic class ets - Configure the enhanced transmission selection, priority to traffic class and bandwidths up2tc - Configure the user priorities to traffic classes getqos - Query the configured enhanced transmission selection, priority to traffic class and bandwidths listmap - List the priority to traffic class and queueid mapping dscp2prio - Query the dscp to priority mapping reset - Reset the device synce - Configure the synchronous ethernet profile dscdump - Retrieves dscdump for device ptp - PTP extended parameters operation prbs_test - Run PRBS loopback test serdes - Plots the serdes pci and ethernet eye and prints the horizontal and vertical margin values Legacy NVM commands : - Query commands --------------------- - --------------- device_info - Query Broadcom device information and default hardware - resources profile version. device_temperature - Query the device temperature in Celsius. get_backup_power_config - Query backup power configuration of the device. moduleinfo - Query the PHY module information. nvm_measurement - Query the active NVM configuration. get_ptp_extended - Query the PTP extended parameters. getoption - Query current NVM configuration option settings - of a device. pcie_counters - Display the pcie counters. saveoptions - Save NVM configuration options on the device - to a file. get_sync_ethernet - Get the synchronous ethernet frequency profile get_txfir - Query the TX FIR settings. cert_provision_state - Query the imported certificate chain on the device. read - Read the NVM item data and write its contents to a file. mh_pf_alloc - Query the number of PFs per PCIe endpoint. - This command is supported only on Thor devices. get_tsio_function_pin - Query TSIO function capability on the pin. Legacy NVM commands : - Debug commands --------------------- - --------------- device_health_check - Checks the device health. backup - Backup NVM contents to a file Legacy NVM commands : - Configuration commands --------------------- - --------------- reset_ap - Reset management processor. setoption - Configure NVM configuration option settings - of a device. msix_max_vectors - Configure the number of MSI-X max vectors per - VF for each PF. loopback - Query/perform loopback config. add_ntuple_filter - Add ntuple flow filter. free_ntuple_filter - Free ntuple flow filter. cfgtunnel - query/config custom tunnel port/rss. write - Create or overwrite NVM data item with a file. set_txfir - Configures the TX FIR settings set_ptp_extended - Set PTP extended parameters mh_pf_alloc - Query/Configure the number of PFs per PCIe endpoint. - This command is supported only on Thor devices. restore_factory_defaults - Restores NVM configuration to factory defaults resmgmt - Query and Configure resources of the device. Legacy NVM commands : - FW update commands --------------------- - --------------- fw_sync - Synchronize primary & secondary FW images livepatch - Query, Activate and Deactivate the patch in live install - Install/Update FW Legacy QoS Rx commands : - Rx Qos commands --------------------- - --------------- rx_port_ratelimit - The user can configure rx rate control that applies to all traffic in a rx CoS queue group. rx_endpoint_ratelimit - The user can configure endpoint rx rate control that applies to all traffic in a rx CoS queue group. get_rx_ratelimits - The user can query the rx rate limits. Legacy QoS Tx commands : - Tx Qos commands --------------------- - --------------- partition_tx_ratelimit - This command is used to configure partition tx rate limit. get_partition_tx_ratelimit - This command is used to query the partition rate limit configuration for a given partition. get_tx_port_ratelimit - This command is used to query the tx side of port rate limit. tx_port_ratelimit - This command is used to configure the tx side of port rate limit tx_endpoint_ratelimit - This command is used to configure PCIe endpoint tx rate limit. get_tx_endpoint_ratelimits - This command is used to query the tx endpoint rate limits. Legacy DCB commands : - Data Center Bridging commands --------------------- - --------------- set_pfc - This command is used to enable PFC on a given priority set_apptlv - This command is used to configure the priority of the AppTLV. ratelimit - This command is used to configure the rate limit for each traffic class. set_ets - This command is used to configure the DCB parameters. set_map - This command is used to configure the priority to traffic class. get_qos - This command is used to query the DCB parameters. dump - This command is used to dump the priority to cos mapping. get_dscp2prio - This command is used to query the dscp to priority mapping.
Die folgenden Beispiele zeigen Ihnen, wie niccli Sie Informationen zu einer bestimmten Schnittstelle erhalten.
- Überprüfen Sie den Schnittstellenstatus.
Das
niccli -i <interface> showenthält Details zur Schnittstelle wie Typ, MAC-Adresse, Firmware, Seriennummer, Gerätezustand, Temperatur usw.BEISPIEL:
-
root@MI300X-01:/sys/kernel/config/bnxt_re/bnxt_re0/ports/1/cc# sudo niccli -i 1 show ------------------------------------------------------------------------------- NIC CLI v231.2.63.0 - Broadcom Inc. (c) 2024 (Bld-94.52.34.117.16.0) ------------------------------------------------------------------------------- NIC State : Up Device Type : THOR2 PCI Vendor ID : 0x14E4 PCI Device ID : 0x1760 PCI Revision ID : 0x11 PCI Subsys Vendor ID : 0x15D9 PCI Subsys Device ID : 0x1D42 Device Interface Name : gpu0_eth MAC Address : 7C:C2:55:BD:75:D0 Base MAC Address : 7C:C2:55:BD:75:D0 Serial Number : OA248S074777 Part Number : AOC-S400G-B1C PCI Address : 0000:06:00.0 Chip Number : BCM957608 Chip Name : THOR2 Description : Supermicro PCIe 400Gb Single port QSFP56-DD Ethernet Controller Firmware Name : PRIMATE_FW Firmware Version : 230.2.49.0 RoCE Firmware Version : 230.2.49.0 HWRM Interface Spec : 1.10.3 Kong mailbox channel : Not Applicable Active Package Version : 230.2.52.0 Package Version on NVM : 230.2.52.0 Active NVM config version : 0.0.5 NVM config version : 0.0.5 Reboot Required : No Firmware Reset Counter : 0 Error Recovery Counter : 0 Crash Dump Timestamp : Not Available Secure Boot : Enabled Secure Firmware Update : Enabled FW Image Status : Operational Crash Dump Available in DDR : No Device Temperature : 57 Celsius PHY Temperature : Not Available Optical Module Temperature : 65 Celsius Device Health : Good
-
- Überprüfen Sie die QoS-Einstellungen
sudo niccli -i <interface-index> dscp2prio and sudo niccli -i 1 listmap -pri2cos
-
root@MI300X-01:/home/jnpr# sudo niccli -i 1 dscp2prio ------------------------------------------------------------------------------- NIC CLI v231.2.63.0 - Broadcom Inc. (c) 2024 (Bld-94.52.34.117.16.0) ------------------------------------------------------------------------------- dscp2prio mapping: priority:7 dscp: 48 priority:3 dscp: 26 root@MI300X-01:/home/jnpr# sudo niccli -i 2 listmap -pri2cos ------------------------------------------------------------------------------- NIC CLI v231.2.63.0 - Broadcom Inc. (c) 2024 (Bld-94.52.34.117.16.0) ------------------------------------------------------------------------------- Base Queue is 0 for port 0 ---------------------------- Priority TC Queue ID ------------------------ 0 0 4 1 0 4 2 0 4 3 1 0 4 0 4 5 0 4 6 0 4 7 2 5
Die Ausgaben im Beispiel zeigen die Standardwerte für:
- Status der Warteschlangen. Nur die Warteschlangen 0, 1 und 2 sind aktiviert.
- Priorität für DSCP-Zuordnungen: Priorität 7 = > DSCP 48 und Priorität 3 = > DSCP 26.
- Priorität für TC (Datenverkehrsklasse) und Warteschlangenzuordnungen: Priorität 7 = > TC2 (Warteschlange 0) = > DSCP 48 und Priorität 3 = > TC1 (Warteschlange 5) = > DSCP 26.
Der sudo niccli -i <interface-index> get_qos Befehl bietet eine Zusammenfassung der QoS-Konfiguration auf der Schnittstelle.
BEISPIEL:
-
root@MI300X-01:/sys/kernel/config/bnxt_re/bnxt_re0/ports/1/cc# sudo niccli -i 1 get_qos ------------------------------------------------------------------------------- NIC CLI v231.2.63.0 - Broadcom Inc. (c) 2024 (Bld-94.52.34.117.16.0) ------------------------------------------------------------------------------- IEEE 8021QAZ ETS Configuration TLV: PRIO_MAP: 0:0 1:0 2:0 3:1 4:0 5:0 6:0 7:2 TC Bandwidth: 50% 50% 0% TSA_MAP: 0:ets 1:ets 2:strict IEEE 8021QAZ PFC TLV: PFC enabled: 3 IEEE 8021QAZ APP TLV: APP#0: Priority: 7 Sel: 5 DSCP: 48 APP#1: Priority: 3 Sel: 5 DSCP: 26 APP#2: Priority: 3 Sel: 3 UDP or DCCP: 4791 TC Rate Limit: 100% 100% 100% 0% 0% 0% 0% 0%
| IEEE 802.1Qaz ETS-Konfiguration TLV: zeigt die ETS-Konfiguration (Enhanced Transmission Selection) | an|
|---|---|
| PRIO_MAP: 0:0 1:0 2:0 3:1 4:0 5:0 6:0 7:2 | Ordnet Prioritäten Datenverkehrsklassen (TC) zu Priorität 0, 1, 2, 4, 5, 6 → TC 0 Priorität 3 → TC 1 Priorität 7 → TC 2 |
| TC-Bandbreite: 50% 50% 0% | Weist Datenverkehrsklassen Bandbreitenprozentsätze zu. TC 0: 50 % der Gesamtbandbreite. TC 1: 50 %. TC 2: 0 %. |
| TSA_MAP: 0:ETS 1:ETS 2:STRICT | Zusammen mit TC Bandbreite weist TSA_MAP Ressourcen zu und definiert die Servicepriorität für jedes TC. Äquivalent zu Schedulern & Scheduler-Map in Junos. Gibt den Transmission Selection Algorithm (TSA) an, der für jedes TC verwendet wird: TC 0 und TC 1 verwenden ETS (Enhanced Transmission Selection) und teilen sich die verfügbare Bandbreite 50/50 TC 2 verwendet eine strikte Priorität, was bedeutet, dass der Datenverkehr von TC 2 immer zuerst gesendet wird |
| IEEE 802.1Qaz PFC TLV: Definiert die Klassifizierung des Datenverkehrs im APP TLV-Format (Type-Length-Value). | |
| PFC-aktiviert: 3 | Gibt an, dass PFC bei Priorität 3 aktiviert ist. Für andere Prioritäten ist PFC nicht aktiviert. PFC stellt sicher, dass der Datenverkehr mit dieser Priorität anhalten kann, anstatt bei Überlastung abgebrochen zu werden. |
| IEEE 802.1Qaz APP TLV | |
| APP#0: Priorität: 7 Auswahl: 5 DSCP: 48 APP#1: Priorität: 3 Auswahl: 5 DSCP: 26 APP#2: Priorität: 3 Auswahl: 3 UDP oder DCCP: 4791 |
Ordnet Datenverkehr Datenverkehrsklassen zu. Entspricht Mehrfeld-Klassifikatoren in Junos. APP#0: Datenverkehr, der mit DSCP = 48 gekennzeichnet ist, wird der Priorität 7 zugeordnet APP#1: Datenverkehr, der mit DSCP = 48 gekennzeichnet ist, wird der Priorität 3 zugeordnet APP#2: UDP- oder DCCP-Datenverkehr mit Port = 4791 (RoCEv2) wird der Priorität 3 zugeordnet |
| TC-Ratengrenze: 100% 100% 100% 0% 0% 0% 0% 0% 0% 0% 0% | TC 0, TC 1 und TC 2 können bis zu 100 % der ihnen zugewiesenen Bandbreite nutzen. TC 3 bis TC 7 sind auf 0 % eingestellt, was bedeutet, dass sie derzeit nicht für die Übertragung von Datenverkehr konfiguriert sind. |
Ändern Sie bei Bedarf die Priorität auf Datenverkehrsklassenzuordnungen oder die Anwendungen auf Datenverkehrsklassenzuordnungen.
Es wird empfohlen, die Standardeinstellungen beizubehalten und sicherzustellen, dass sie mit der Class-of-Service-Konfiguration auf den Leafknoten in der GPU-Backend-Fabric übereinstimmen.
-
[edit class-of-service classifiers] jnpr@gpu-backend-rack1-001-leaf1# show dscp mydscp { forwarding-class CNP { loss-priority low code-points 110000; <= DSCP = 48 } forwarding-class NO-LOSS { loss-priority low code-points 011010; <= DSCP = 26 } } } [edit class-of-service forwarding-classes] jnpr@gpu-backend-rack1-001-leaf1# show class CNP queue-num 3; class NO-LOSS queue-num 4 no-loss pfc-priority 3;
Wenn die Priorität von Datenverkehrsklassenzuordnungen oder die von Anwendungen zu Datenverkehrsklassenzuordnungen geändert werden müssen, können die folgenden Befehle verwendet werden:
Priorität für Datenverkehrsklassenzuordnungen
-
BCM957608> help up2tc DESCRIPTION : This command is used to set the user priorities to traffic classes. SYNTAX : up2tc -p <priority[0-7]:tc>, ...> -p: Comma separated list mapping user priorities to traffic classes.
BEISPIEL:
-
BCM957608> sudo niccli -i 1 get_qos ------------------------------------------------------------------------------- NIC CLI v231.2.63.0 - Broadcom Inc. (c) 2024 (Bld-94.52.34.117.16.0) ------------------------------------------------------------------------------- IEEE 8021QAZ ETS Configuration TLV: PRIO_MAP: 0:1 1:1 2:0 3:0 4:1 5:1 6:0 7:0 <= default ---more--- BCM957608> up2tc -p 0:0,1:0,2:1,3:1,4:1,5:1,6:1,7:0 User priority to traffic classes are configured successfully. BCM957608> sudo niccli -i 1 get_qos ------------------------------------------------------------------------------- NIC CLI v231.2.63.0 - Broadcom Inc. (c) 2024 (Bld-94.52.34.117.16.0) ------------------------------------------------------------------------------- IEEE 8021QAZ ETS Configuration TLV: PRIO_MAP: 0:0 1:0 2:1 3:1 4:1 5:1 6:1 7:0 ---more---
Zuordnungen von Anwendungen zu Datenverkehrsklassen
-
BCM957608> help apptlv DESCRIPTION : This command is used to configure the priority of the AppTLV SYNTAX : apptlv -add -app <priority,selector,protocol> apptlv -del -app <priority,selector,protocol>
BEISPIEL:
-
BCM957608> sudo niccli -i 1 get_qos ---more--- IEEE 8021QAZ APP TLV: APP#1: Priority: 7 Sel: 5 DSCP: 48 APP#2: Priority: 3 Sel: 5 DSCP: 26 APP#3: Priority: 3 Sel: 3 UDP or DCCP: 4791 BCM957608> apptlv -add -app 5,1,35093 AppTLV configured successfully. BCM957608> sudo niccli -i 1 get_qos ---more--- IEEE 8021QAZ APP TLV: APP#0: Priority: 5 Sel: 1 Ethertype: 0x8915 APP#1: Priority: 7 Sel: 5 DSCP: 48 APP#2: Priority: 3 Sel: 5 DSCP: 26 APP#3: Priority: 3 Sel: 3 UDP or DCCP: 4791 BCM957608> BCM957608> apptlv -del -app 5,1,35093 AppTLV deleted successfully. BCM957608> sudo niccli -i 1 get_qos ---more--- IEEE 8021QAZ APP TLV: APP#0: Priority: 7 Sel: 5 DSCP: 48 APP#1: Priority: 3 Sel: 5 DSCP: 26 APP#2: Priority: 3 Sel: 3 UDP or DCCP: 4791 ---more---
Ändern Sie bei Bedarf die ETS-Konfigurationsattribute.
Es wird empfohlen, die Standardeinstellungen beizubehalten und sicherzustellen, dass sie mit der Class-of-Service-Konfiguration auf den Leafknoten in der GPU-Backend-Fabric übereinstimmen.
-
[edit class-of-service forwarding-classes] jnpr@gpu-backend-rack1-001-leaf1# show class CNP queue-num 3; class NO-LOSS queue-num 4 no-loss pfc-priority 3; BCM957608> help ets DESCRIPTION : This command is used to configure the enhanced transmission selection, priority to traffic class and traffic class bandwidths. SYNTAX : ets -tsa <tc[0-7]:[ets|strict], ...> -up2tc <priority[0-7]:tc>, ...> -tcbw <list> -tsa: Transmission selection algorithm, sets a comma separated list of traffic classes to the corresponding selection algorithm. Valid algorithms include "ets" and "strict". -up2tc: Comma separated list mapping user priorities to traffic classes. -tcbw: Comma separated list of bandwidths for each traffic class the first value being assigned to traffic class 0 and the second to traffic class 1 and so on.
BEISPIEL:
-
BCM957608> sudo niccli -i 1 get_qos NIC CLI v231.2.63.0 - Broadcom Inc. (c) 2024 (Bld-94.52.34.117.16.0) ------------------------------------------------------------------------------- IEEE 8021QAZ ETS Configuration TLV: PRIO_MAP: 0:1 1:1 2:0 3:0 4:1 5:1 6:0 7:0 TC Bandwidth: 50% 50% 0% TSA_MAP: 0:ets 1:ets 2:strict IEEE 8021QAZ PFC TLV: PFC enabled: 3 ---more--- BCM957608> ets -tsa 0:ets,1:ets,2:ets -up2tc 0:0,1:0,2:0,3:0,4:0,5:1,6:0,7:0 -tcbw 50,25,25 Enhanced transmission selection (ets) configured successfully. BCM957608> sudo niccli -i 1 get_qos NIC CLI v231.2.63.0 - Broadcom Inc. (c) 2024 (Bld-94.52.34.117.16.0) ------------------------------------------------------------------------------- IEEE 8021QAZ ETS Configuration TLV: PRIO_MAP: 0:0 1:0 2:0 3:0 4:0 5:1 6:0 7:0 TC Bandwidth: 50% 25% 25% TSA_MAP: 0:ets 1:ets 2:ets
Konfigurieren Sie bei Bedarf PFC
-
BCM957608> help pfc DESCRIPTION : This command is used to enable priority-based flow control on a given priority. SYNTAX : pfc -enable <pfc list> The valid range is from 0 to 7. Where list is a comma-separated value for each pfc. To disable the pfc, user needs to provide a value of 0xFF.
BEISPIEL:
-
BCM957608> sudo niccli -i 1 get_qos ---more--- IEEE 8021QAZ PFC TLV: PFC enabled: 3 <= default; PFC enabled for priority 3 ---more--- BCM957608> pfc -enable 0xFF <= disables pfc on all priorities. pfc configured successfully. BCM957608> sudo niccli -i 1 get_qos ---more--- IEEE 8021QAZ PFC TLV: PFC enabled: none <= pfc disabled on all priorities. ---more--- BCM957608> pfc -enable 5 pfc configured successfully. BCM957608> sudo niccli -i 1 get_qos ---more--- IEEE 8021QAZ PFC TLV: PFC enabled: 5 <= PFC enabled for priority 5 ---more---
Der folgende Befehl versucht, die PFC für die Prioritäten 5 und 6 zu aktivieren, und zeigt, dass nur eine Warteschlange (eine Priorität) als verlustfreie Warteschlange (PFC-aktiviert) konfiguriert werden kann.
-
BCM957608> pfc -enable 5,6 ERROR: Hardware doesn't support more than 1 lossless queues to configure pfc. ERROR: Failed to enable pfc.
Konfigurieren von DCQCN- und RoCE-Datenverkehrsmarkierungswerten mithilfe von bnxt_setupcc.sh
Verwenden des bnxt_setupcc.sh Dienstprogramms, das den Prozess vereinfachen kann.
Das bnxt_setupcc.sh Dienstprogramm vereinfacht die Aktivierung oder Deaktivierung von ECN und PFC und das Ändern der Werte von DSCP und PRIO für ROCE- und CNP-Pakete für eine bestimmte Schnittstelle.
Unter der Haube wird verwendet niccli (Standard) oder lldptool die als Teil des Befehls ausgewählt werden kann.
Sie müssen eingeben bnxt_setupcc.sh , gefolgt von den ausgewählten Optionen, wie im Hilfemenü beschrieben:
-
root@MI300X-01:/sys/kernel/config/bnxt_re/bnxt_re0/ports/1/cc# bnxt_setupcc.sh Usage: bnxt_setupcc.sh [OPTION]... -d RoCE Device Name (e.g. bnxt_re0, bnxt_re_bond0) -i Ethernet Interface Name (e.g. p1p1 or for bond, specify slave interfaces like -i p6p1 -i p6p2) -m [1-3] 1 - PFC only 2 - CC only 3 - PFC + CC mode -v 1 - Enable priority vlan -r [0-7] RoCE Packet Priority -s VALUE RoCE Packet DSCP Value -c [0-7] RoCE CNP Packet Priority -p VALUE RoCE CNP Packet DSCP Value -b VALUE RoCE Bandwidth percentage for ETS configuration - Default is 50% -t [2] Default mode (Only RoCE v2 is supported - Input Ignored) -C VALUE Set CNP Service Type -u [1-3] Utility to configure QoS settings 1 - Use bnxtqos utility. Will disable lldptool if enabled. (default) 2 - Use lldptool 3 - Use Broadcom niccli utility. Will disable lldptool if enabled. -h display help
BEISPIEL:
Die standardmäßige DSCP-Kennzeichnung für CNP-Pakete für die Schnittstelle gpu0 (bnxt_re0) ist 0, wie in der folgenden Ausgabe gezeigt:
-
root@MI300X-01:/sys/kernel/config/bnxt_re/bnxt_re0/ports/1/cc# cat apply | grep cnp ecn status (cnp_ecn) : Enabled cnp header ecn status (cnp_ecn) : ECT(1) minimum time between cnps (min_time_bet_cnp) : 0x0 usec rate reduction threshold (cnp_ratio_th) : 0x0 cnps cnp prio (cnp_prio) : 7 cnp dscp (cnp_dscp) : 0 root@MI300X-01:/sys/kernel/config/bnxt_re/bnxt_re0/ports/1/cc# cat apply | grep cc congestion control mode (cc_mode) : DCQCN-P cr threshold to reset cc (reset_cc_cr_th) : 0x32a cc ack bytes (cc_ack_bytes) : 0x44 root@MI300X-01:/sys/kernel/config/bnxt_re/bnxt_re0/ports/1/cc# cat cnp_prio 0x7 root@MI300X-01:/sys/kernel/config/bnxt_re/bnxt_re0/ports/1/cc# cat cnp_dscp 0x0
bnxt_setupcc.sh kann verwendet werden, um ihn wie folgt auf den von der Fabric erwarteten Wert (48) zu ändern:
-
root@MI300X-01:/sys/kernel/config/bnxt_re/bnxt_re0/ports/1/cc# bnxt_setupcc.sh -d bnxt_re0 -i gpu0_eth -u 3 -p 48 -c 6 -s 26 -r 5 -m 3 ENABLE_PFC = 1 ENABLE_CC = 1 ENABLE_DSCP = 1 ENABLE_DSCP_BASED_PFC = 1 L2 50 RoCE 50 Using Ethernet interface gpu0_eth and RoCE interface bnxt_re0 Setting pfc/ets 0000:06:00.0 ---more--- AppTLV configured successfully.
Wobei:
- -u 3: Verwendet das Dienstprogramm Broadcom niccli
- -p 48: Legt den DSCP-Wert für CNP-Pakete auf 48 (0x30) fest.
- -c: Konfiguriert die Priorität für CNP-Pakete auf 6
- -s: Definiert den DSCP-Wert für reguläre RoCE-Pakete auf 26 (0x1a)
- -r: Legt die Priorität für reguläre RoCE-Pakete auf 5 fest
- -m 3: Konfiguriert sowohl PFC als auch Überlastungskontrolle (ECN).
Überprüfen Sie die Ergebnisse mit:
-
root@MI300X-01:/sys/kernel/config/bnxt_re/bnxt_re0/ports/1/cc# cat apply | grep cnp ecn status (cnp_ecn) : Enabled cnp header ecn status (cnp_ecn) : ECT(1) minimum time between cnps (min_time_bet_cnp) : 0x0 usec rate reduction threshold (cnp_ratio_th) : 0x0 cnps cnp prio (cnp_prio) : 6 cnp dscp (cnp_dscp) : 48 root@MI300X-01:/sys/kernel/config/bnxt_re/bnxt_re0/ports/1/cc# cat apply | grep roce roce prio (roce_prio) : 5 roce dscp (roce_dscp) : 26 root@MI300X-01:/sys/kernel/config/bnxt_re/bnxt_re0/ports/1/cc# cat cnp_prio 0x6 root@MI300X-01:/sys/kernel/config/bnxt_re/bnxt_re0/ports/1/cc# cat cnp_dscp 0x30 <= 48 is HEX root@MI300X-01:/sys/kernel/config/bnxt_re/bnxt_re0/ports/1/cc# cat roce_dscp 0x1a <= 26 is HEX root@MI300X-01:/sys/kernel/config/bnxt_re/bnxt_re0/ports/1/cc# cat roce_prio 0x5
bnxt_setupcc.sh installiert und ausführbar ist, sondern auch, dass mindestens eines der Tools (
niccli oder
lldptool) installiert ist.
Das folgende Beispiel zeigt, dass bnxt_setupcc.sh und niccli installiert sind, aber lldptool nicht. Außerdem werden Beispiele für die Installation und Verwendung von lldptool.
-
root@MI300X-01:/# which bnxt_setupcc.sh /usr/local/bin/bnxt_setupcc.sh root@MI300X-01:/usr/local/bin# ls bnxt_setupcc.sh -l -rwxr-xr-x 1 root root 14761 Jan 17 18:06 bnxt_setupcc.sh root@MI300X-01:/$ which niccli /usr/bin/niccli root@MI300X-01:/usr/bin$ ls niccli -l lrwxrwxrwx 1 18896 1381 18 Sep 25 18:52 niccli -> /opt/niccli/niccli root@MI300X-01:/opt/niccli$ ls niccli -l -rwxr-xr-x 1 18896 1381 609 Sep 25 18:52 niccli root@MI300X-01:/$ which lldptool
Die lldptool wird verwendet, um die LLDP-Einstellungen (Link Layer Discovery Protocol) zu überprüfen oder zu ändern. Um LLDP zu aktivieren, müssen Sie installieren lldpad, , das ebenfalls automatisch installiert wird lldptool .
So installieren lldpad Sie und lldptool folgen diesen Schritten:
- Installieren Sie die erforderlichen Abhängigkeiten.
Stellen Sie vor der Installation von lldpad sicher, dass die erforderlichen Bibliotheken installiert sind, indem Sie den folgenden Befehl ausführen:
-
sudo apt install libconfig9 libnl-3-200
- libconfig9 – Eine Bibliothek zur Verarbeitung von Konfigurationsdateien.
- libnl-3-200 – Eine Bibliothek für die Interaktion mit der Linux Netlink-Schnittstelle.
-
- Installieren Sie lldpad.
Installieren Sie lldpad, indem Sie den folgenden Befehl ausführen:
-
sudo apt install lldpad
Dieses Paket ermöglicht LLDP auf dem System, sodass Informationen zur Netzwerktopologie mit anderen Geräten ausgetauscht werden können.
-
- Aktivieren Sie lldpad.
Aktivieren Sie lldp mit systemctl:
-
sudo systemctl enable lldpad
Dadurch wird ein Systemdienst erstellt, der sicherstellt, dass lldpad nach einem Neustart immer ausgeführt wird.
-
- Starten Sie den lldpad-Dienst
LLDP mit systemctl aktivieren:
-
sudo systemctl start lldpad
Dadurch wird lldpad sofort aktiviert, sodass es LLDP-Pakete verarbeiten kann.
HINWEIS:Um lldpad manuell neu zu starten, verwenden Sie:sudo systemctl restart lldpad
Um lldpad für den Start beim Booten zu deaktivieren, verwenden Sie:sudo systemctl disable lldpad -
- Überprüfen Sie die Installation
Überprüfen Sie den Servicestatus mit systemctl
-
user@MI300X-01:/etc/apt$ sudo systemctl status lldpad ● lldpad.service - Link Layer Discovery Protocol Agent Daemon. Loaded: loaded (/usr/lib/systemd/system/lldpad.service; enabled; preset: enabled) Active: active (running) since Fri 2025-02-14 00:16:40 UTC; 2min 2s ago TriggeredBy: ● lldpad.socket Docs: man:lldpad(8) Main PID: 695860 (lldpad) Tasks: 1 (limit: 629145) Memory: 1.3M (peak: 2.0M) CPU: 510ms CGroup: /system.slice/lldpad.service └─695860 /usr/sbin/lldpad -t Feb 14 00:16:40 MI300X-01 systemd[1]: Started lldpad.service - Link Layer Discovery Protocol Agent Daemon..
Dadurch wird sichergestellt, dass das Tool installiert und einsatzbereit ist. Wenn alles ordnungsgemäß funktioniert, sollten Sie den Status "aktiv (läuft)" sehen.
Sie können lldptool verwenden, um LLDP auf einer Schnittstelle zu aktivieren oder zu deaktivieren und den LLDP-Status und die auf dieser Schnittstelle erkannten Nachbarn zu überprüfen. Das lldptool -h zeigt Ihnen alle verschiedenen Optionen:
-
user@MI300X-01:/etc/apt$ lldptool -h Usage: lldptool <command> [options] [arg] general command line usage format lldptool go into interactive mode <command> [options] [arg] general interactive command format Options: -i [ifname] network interface -V [tlvid] TLV identifier may be numeric or keyword (see below) -c <argument list> used with get TLV command to specify that the list of configuration elements should be retrieved -d use to delete specified argument from the configuration. (Currently implemented for DCBX App TLV settings) -n "neighbor" option for command -r show raw message -R show only raw messages -g destination agent (may be one of): - nearestbridge (nb) (default) - nearestcustomerbridge (ncb) - nearestnontpmrbridge (nntpmrb) Commands: license show license information -h|help show command usage information -v|version show version -p|ping ping lldpad and query pid of lldpad -q|quit exit lldptool (interactive mode) -S|stats get LLDP statistics for ifname -t|get-tlv get TLVs from ifname -T|set-tlv set arg for tlvid to value -l|get-lldp get the LLDP parameters for ifname -L|set-lldp set the LLDP parameter for ifname TLV identifiers: chassisID : Chassis ID TLV portID : Port ID TLV TTL : Time to Live TLV portDesc : Port Description TLV sysName : System Name TLV sysDesc : System Description TLV sysCap : System Capabilities TLV mngAddr : Management Address TLV macPhyCfg : MAC/PHY Configuration Status TLV powerMdi : Power via MDI TLV linkAgg : Link Aggregation TLV MTU : Maximum Frame Size TLV LLDP-MED : LLDP-MED Settings medCap : LLDP-MED Capabilities TLV medPolicy : LLDP-MED Network Policy TLV medLoc : LLDP-MED Location TLV medPower : LLDP-MED Extended Power-via-MDI TLV medHwRev : LLDP-MED Hardware Revision TLV medFwRev : LLDP-MED Firmware Revision TLV medSwRev : LLDP-MED Software Revision TLV medSerNum : LLDP-MED Serial Number TLV medManuf : LLDP-MED Manufacturer Name TLV medModel : LLDP-MED Model Name TLV medAssetID : LLDP-MED Asset ID TLV CIN-DCBX : CIN DCBX TLV CEE-DCBX : CEE DCBX TLV evb : EVB Configuration TLV evbcfg : EVB draft 0.2 Configuration TLV vdp : VDP draft 0.2 protocol configuration IEEE-DCBX : IEEE-DCBX Settings ETS-CFG : IEEE 8021QAZ ETS Configuration TLV ETS-REC : IEEE 8021QAZ ETS Recommendation TLV PFC : IEEE 8021QAZ PFC TLV APP : IEEE 8021QAZ APP TLV PVID : Port VLAN ID TLV PPVID : Port and Protocol VLAN ID TLV vlanName : VLAN Name TLV ProtoID : Protocol Identity TLV vidUsage : VID Usage Digest TLV mgmtVID : Management VID TLV linkAggr : Link Aggregation TLV uPoE : Cisco 4-wire Power-via-MDI TLV user@MI300X-01:/etc/apt$ sudo lldptool -S -i gpu0_eth Total Frames Transmitted = 0 Total Discarded Frames Received = 0 Total Error Frames Received = 0 Total Frames Received = 92 Total Discarded TLVs = 0 Total Unrecognized TLVs = 8 Total Ageouts = 0 user@MI300X-01:/etc/apt$ sudo lldptool -L -i gpu0_eth AMDinStatus=rxtx AMDinStatus = rxtx user@MI300X-01:/etc/apt$ sudo lldptool -S -i gpu0_eth Total Frames Transmitted = 5 Total Discarded Frames Received = 0 Total Error Frames Received = 0 Total Frames Received = 94 Total Discarded TLVs = 0 Total Unrecognized TLVs = 8 Total Ageouts = 0 user@MI300X-01:/etc/apt$ sudo lldptool -t -i gpu0_eth Chassis ID TLV MAC: 7c:c2:55:bd:75:d0 Port ID TLV MAC: 7c:c2:55:bd:75:d0 Time to Live TLV 120 IEEE 8021QAZ ETS Configuration TLV Willing: yes CBS: not supported MAX_TCS: 3 PRIO_MAP: 0:0 1:0 2:0 3:0 4:0 5:0 6:0 7:0 TC Bandwidth: 0% 0% 0% 0% 0% 0% 0% 0% TSA_MAP: 0:strict 1:strict 2:strict 3:strict 4:strict 5:strict 6:strict 7:strict IEEE 8021QAZ PFC TLV Willing: yes MACsec Bypass Capable: no PFC capable traffic classes: 1 PFC enabled: none End of LLDPDU TLV
Weitere Informationen finden Sie im Abschnitt Manuelles Installieren und Konfigurieren von Software im Benutzerhandbuch des Broadcom Ethernet-Netzwerkadapters oder unter Installieren des NICCLI Configuration Utility .
Überwachungsschnittstelle und ECN/PFC-Betrieb:
Sobald Sie den Broadcom-Namen für eine bestimmte GPU haben, wie am Anfang dieses Abschnitts beschrieben, können Sie die Verzeichnisse suchen, in denen sich der Betriebsstatus der Schnittstelle sowie RoCE-Datenverkehr und Statistiken zur Überlastungskontrolle befinden.
- Navigieren Sie in das entsprechende Verzeichnis
/sys/class/infiniband/<Broadcom-Schnittstellenname>
BEISPIEL:
Für gpu0_eth:
-
root@MI300X-01:/home/jnpr/SCRIPTS# cd /sys/class/infiniband/bnxt_re3 root@MI300X-01:/sys/class/infiniband/bnxt_re3# ls device fw_ver hca_type hw_rev node_desc node_guid node_type ports power subsystem sys_image_guid uevent root@MI300X-01:/sys/class/infiniband/bnxt_re3# ls device/net/gpu3_eth/ addr_assign_type address addr_len broadcast carrier carrier_changes carrier_down_count carrier_up_count device dev_id dev_port dormant duplex flags gro_flush_timeout ifalias ifindex iflink link_mode mtu name_assign_type napi_defer_hard_irqs netdev_group operstate phys_port_id phys_port_name phys_switch_id power proto_down queues speed statistics subsystem testing threaded tx_queue_len type uevent
Hier können Sie Attribute wie Betriebsstatus, Adresse, MTU, Geschwindigkeit und Schnittstellenstatistiken (einschließlich übertragener und empfangener Pakete, verworfener Pakete sowie ECN-markierter Pakete, empfangener CNP-Pakete und übertragener CNP-Pakete) überprüfen:
-
root@MI300X-01:/sys/class/infiniband/bnxt_re3# cat device/net/gpu3_eth/operstate up root@MI300X-01:/sys/class/infiniband/bnxt_re3# cat device/net/gpu3_eth/address 7c:c2:55:bd:7e:20 root@MI300X-01:/sys/class/infiniband/bnxt_re3# cat device/net/gpu3_eth/mtu 9000 root@MI300X-01:/sys/class/infiniband/bnxt_re3# cat device/net/gpu3_eth/speed 400000 root@MI300X-01:/sys/class/infiniband/bnxt_re3# ls device/net/gpu3_eth/statistics collisions multicast rx_bytes rx_compressed rx_crc_errors rx_dropped rx_errors rx_fifo_errors rx_frame_errors rx_length_errors rx_missed_errors rx_nohandler rx_over_errors rx_packets tx_aborted_errors tx_bytes tx_carrier_errors tx_compressed tx_dropped tx_errors tx_fifo_errors tx_heartbeat_errors tx_packets tx_window_errors tx_fifo_errors rx_dropped rx_frame_errors rx_nohandlertx_aborted_errors tx_compressed tx_window_errors root@MI300X-01:/sys/class/infiniband/bnxt_re3# ls ports/1 cap_mask cm_rx_duplicates cm_rx_msgs cm_tx_msgs cm_tx_retries counters gid_attrs gids hw_counters lid lid_mask_count link_layer phys_state pkeys rate sm_lid sm_sl state root@MI300X-01:/sys/class/infiniband/bnxt_re3# ls ports/1/counters/ -m excessive_buffer_overrun_errors link_downed link_error_recovery local_link_integrity_errors port_rcv_constraint_errors port_rcv_data port_rcv_errors port_rcv_packets port_rcv_remote_physical_errors port_rcv_switch_relay_errors port_xmit_constraint_errors port_xmit_data port_xmit_discards port_xmit_packets port_xmit_wait symbol_error VL15_dropped
Um die ECN-Statistik zu überprüfen, überprüfen Sie die zugehörigen Zähler für die jeweilige Schnittstelle:
-
root@MI300X-01:/sys/class/infiniband/bnxt_re3# ls ports/1/hw_counters/ -m active_ahs active_cqs active_mrs active_mws active_pds active_qps active_rc_qps active_srqs active_ud_qps bad_resp_err db_fifo_register dup_req lifespan local_protection_err local_qp_op_err max_retry_exceeded mem_mgmt_op_err missing_resp oos_drop_count pacing_alerts pacing_complete pacing_reschedule recoverable_errors remote_access_err remote_invalid_req_err remote_op_err res_cmp_err res_cq_load_err res_exceed_max res_exceeds_wqe res_invalid_dup_rkey res_irrq_oflow resize_cq_cnt res_length_mismatch res_mem_err res_opcode_err res_rem_inv_err res_rx_domain_err res_rx_invalid_rkey res_rx_no_perm res_rx_pci_err res_rx_range_err res_srq_err res_srq_load_err res_tx_domain_err res_tx_invalid_rkey res_tx_no_perm res_tx_pci_err res_tx_range_err res_unaligned_atomic res_unsup_opcode res_wqe_format_err rnr_naks_rcvd rx_atomic_req rx_bytes rx_cnp_pkts rx_ecn_marked_pkts rx_good_bytes rx_good_pkts rx_out_of_buffer rx_pkts rx_read_req rx_read_resp rx_roce_discards rx_roce_errors rx_roce_only_bytes rx_roce_only_pkts rx_send_req rx_write_req seq_err_naks_rcvd to_retransmits tx_atomic_req tx_bytes tx_cnp_pkts tx_pkts tx_read_req tx_read_resp tx_roce_discards tx_roce_errors tx_roce_only_bytes tx_roce_only_pkts tx_send_req tx_write_req unrecoverable_err watermark_ahs watermark_cqs watermark_mrs watermark_mws watermark_pds watermark_qps watermark_rc_qps watermark_srqs watermark_ud_qps root@MI300X-01:/sys/class/infiniband# for iface in /sys/class/infiniband/*/ports/1/hw_counters/rx_ecn_marked_pkts; do echo "$(basename $(dirname $(dirname $(dirname $(dirname "$iface"))))) : $(cat "$iface")" done bnxt_re0 : 0 bnxt_re1 : 1102 bnxt_re2 : 532 bnxt_re3 : 707 bnxt_re4 : 474 bnxt_re5 : 337 bnxt_re6 : 970 bnxt_re7 : 440 root@MI300X-01:/sys/class/infiniband# for iface in /sys/class/infiniband/*/ports/1/hw_counters/tx_cnp_pkts; do echo "$(basename $(dirname $(dirname $(dirname $(dirname "$iface"))))) : $(cat "$iface")" done bnxt_re0 : 0 bnxt_re1 : 1102 bnxt_re2 : 532 bnxt_re3 : 707 bnxt_re4 : 474 bnxt_re5 : 337 bnxt_re6 : 970 bnxt_re7 : 440 root@MI300X-01:/sys/class/infiniband# for iface in /sys/class/infiniband/*/ports/1/hw_counters/rx_cnp_pkts; do echo "$(basename $(dirname $(dirname $(dirname $(dirname "$iface"))))) : $(cat "$iface")" done bnxt_re0 : 0 bnxt_re1 : 830 bnxt_re2 : 0 bnxt_re3 : 375 bnxt_re4 : 734 bnxt_re5 : 23 bnxt_re6 : 2395 bnxt_re7 : 2291
ethtool -s <InterfaceIndex> |egrep "pfc_frames|roce_pause" |more
BEISPIEL:
-
root@MI300X-01:/sys/class/infiniband# for iface in $(ls /sys/class/net/ | grep '^gpu'); do echo "$iface :" sudo ethtool -S "$iface" | egrep "pfc_frames|roce_pause" done gpu0_eth : rx_pfc_frames: 0 tx_pfc_frames: 22598 continuous_roce_pause_events: 0 resume_roce_pause_events: 0 gpu1_eth : rx_pfc_frames: 0 tx_pfc_frames: 194626 continuous_roce_pause_events: 0 resume_roce_pause_events: 0 gpu2_eth : rx_pfc_frames: 0 tx_pfc_frames: 451620 continuous_roce_pause_events: 0 resume_roce_pause_events: 0 gpu3_eth : rx_pfc_frames: 0 tx_pfc_frames: 492042 continuous_roce_pause_events: 0 resume_roce_pause_events: 0 gpu4_eth : rx_pfc_frames: 0 tx_pfc_frames: 407113 continuous_roce_pause_events: 0 resume_roce_pause_events: 0 gpu5_eth : rx_pfc_frames: 0 tx_pfc_frames: 290378 continuous_roce_pause_events: 0 resume_roce_pause_events: 0 gpu6_eth : rx_pfc_frames: 0 tx_pfc_frames: 228918 continuous_roce_pause_events: 0 resume_roce_pause_events: 0 gpu7_eth : rx_pfc_frames: 0 tx_pfc_frames: 477572 continuous_roce_pause_events: 0 resume_roce_pause_events: 0 root@MI300X-01:/sys/class/infiniband# for iface in $(ls /sys/class/net/ | grep '^gpu'); do echo "$iface :" sudo ethtool -S "$iface" | grep cos | grep -v ": 0" done gpu0_eth : rx_bytes_cos0: 9529443988084 rx_packets_cos0: 3319036491 rx_bytes_cos4: 18230144638154 rx_packets_cos4: 5955503873 rx_discard_bytes_cos4: 3032625534 rx_discard_packets_cos4: 736191 tx_bytes_cos0: 27757371721830 tx_packets_cos0: 9297694711 tx_bytes_cos4: 604920 tx_packets_cos4: 2628 gpu1_eth : rx_bytes_cos0: 27969554019118 rx_packets_cos0: 9565740297 rx_bytes_cos4: 4193860 rx_packets_cos4: 47350 tx_bytes_cos0: 27738638134736 tx_packets_cos0: 9184463836 tx_bytes_cos4: 619484 tx_packets_cos4: 2686 tx_bytes_cos5: 81548 tx_packets_cos5: 1102 gpu2_eth : rx_bytes_cos0: 27961559203510 rx_packets_cos0: 9438688373 rx_bytes_cos4: 4134654 rx_packets_cos4: 46526 tx_bytes_cos0: 27177768852872 tx_packets_cos0: 9028738664 tx_bytes_cos4: 619444 tx_packets_cos4: 2686 tx_bytes_cos5: 39368 tx_packets_cos5: 532 gpu3_eth : rx_bytes_cos0: 27886187894460 rx_packets_cos0: 9394306658 rx_bytes_cos4: 4161424 rx_packets_cos4: 46910 tx_bytes_cos0: 27963541263338 tx_packets_cos0: 9314918707 tx_bytes_cos4: 619624 tx_packets_cos4: 2688 tx_bytes_cos5: 52318 tx_packets_cos5: 707 gpu4_eth : rx_bytes_cos0: 27760098268028 rx_packets_cos0: 9493708902 rx_bytes_cos4: 4190302 rx_packets_cos4: 47275 tx_bytes_cos0: 27943026331154 tx_packets_cos0: 9175330615 tx_bytes_cos4: 619068 tx_packets_cos4: 2683 tx_bytes_cos5: 35076 tx_packets_cos5: 474 gpu5_eth : rx_bytes_cos0: 27742656661456 rx_packets_cos0: 9603877462 rx_bytes_cos4: 4136456 rx_packets_cos4: 46558 tx_bytes_cos0: 27862529155204 tx_packets_cos0: 9053600792 tx_bytes_cos4: 619318 tx_packets_cos4: 2686 tx_bytes_cos5: 24938 tx_packets_cos5: 337 gpu6_eth : rx_bytes_cos0: 27204139187706 rx_packets_cos0: 9417550449 rx_bytes_cos4: 4309610 rx_packets_cos4: 48912 tx_bytes_cos0: 27939647032856 tx_packets_cos0: 9122722262 tx_bytes_cos4: 619248 tx_packets_cos4: 2685 tx_bytes_cos5: 71780 tx_packets_cos5: 970 gpu7_eth : rx_bytes_cos0: 27985967658372 rx_packets_cos0: 9636086344 rx_bytes_cos4: 4303716 rx_packets_cos4: 48823 tx_bytes_cos0: 27949102839310 tx_packets_cos0: 9149097911 tx_bytes_cos4: 619138 tx_packets_cos4: 2684 tx_bytes_cos5: 32560 tx_packets_cos5: 440 BCM957608> sudo niccli -i 2 listmap -pri2cos ------------------------------------------------------------------------------- NIC CLI v231.2.63.0 - Broadcom Inc. (c) 2024 (Bld-94.52.34.117.16.0) ------------------------------------------------------------------------------- Base Queue is 0 for port 0 ---------------------------- Priority TC Queue ID ------------------------ 0 0 4 1 0 4 2 0 4 3 1 0 4 0 4 5 0 4 6 0 4 7 2 5
Konfigurieren des Servers für die Verwendung der Verwaltungsschnittstelle für RCCL-Steuerungsdatenverkehr:
Die ROCm Communication Collectives Library (RCCL) erstellt TCP-Sitzungen zur Koordination von Prozessen und zum Austausch von Warteschlangenpaarinformationen für RoCE, GIDs (Global IDs), lokale und Remote-Pufferadressen, RDMA-Schlüssel (RKEYs für Speicherzugriffsberechtigungen)
Diese TCP-Sitzungen werden beim Start des Jobs erstellt und verwenden standardmäßig eine der GPU-Schnittstellen (dieselben Schnittstellen, die für den RoCEv2-Datenverkehr verwendet werden).
Beispiel:
-
jnpr@MI300X-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---
Es wird empfohlen, die mit der (Frontend-Fabric) verbundene Verwaltungsschnittstelle zu verwenden. Fügen Sie dazu beim Starten eines Jobs Folgendes hinzu: export NCCL_SOCKET_IFNAME="mgmt_eth". Die gleiche Umgebungsvariable gilt sowohl für NCCL als auch für RCCL.
Beispiel:
-
jnpr@MI300X-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---
AMD Pollara DCQCN-Konfiguration für RDMA-Datenverkehr
Für die AMD Pollara-Validierung muss DCQCN aktiviert sein, und QOS muss auf die AMD NIC-Karten angewendet werden.
- Konfigurieren Sie Qos auf den NICs mithilfe des Skripts. Die DSCP-Parameter entsprechen den in Tabelle 25 vorgeschlagenen Werten. DCQCN-Konfigurationsparameter des Servers.
-
jnpr@mi300-01:~$ cat /usr/local/bin/jnpr-setupqos.sh #!/bin/bash for i in $(sudo /usr/sbin/nicctl show port | grep Port | awk {'print $3'}); do sudo /usr/sbin/nicctl update port -p $i --pause-type pfc --rx-pause enable --tx-pause enable; done cts_dscp=48 cts_prio=2 data_dscp=26 data_prio=3 sudo nicctl update qos --classification-type dscp sudo nicctl update qos dscp-to-priority --dscp $cts_dscp --priority $cts_prio sudo nicctl update qos dscp-to-priority --dscp $data_dscp --priority $data_prio sudo nicctl update qos pfc --priority $cts_prio --no-drop enable sudo nicctl update qos pfc --priority $data_prio --no-drop enable sudo nicctl update qos dscp-to-purpose --dscp $cts_dscp --purpose xccl-cts
-
- Mit dem AMD-Befehlszeilenprogramm
nicctlunten sind die QOS-Parameter konfiguriert:-
jnpr@mi300-01:~$ sudo nicctl show qos | more NIC : 42424650-4c32-3530-3130-313346000000 (0000:06:00.0) Port : 0490812b-9860-4242-4242-000011010000 Classification type : DSCP DSCP-to-priority : DSCP bitmap : 0xfffefffffbffffff ==> priority : 0 DSCP bitmap : 0x0001000000000000 ==> priority : 2 DSCP bitmap : 0x0000000004000000 ==> priority : 3 DSCP : 0-25, 27-47, 49-63 ==> priority : 0 DSCP : 48 ==> priority : 2 DSCP : 26 ==> priority : 3 DSCP-to-purpose : 48 ==> xccl-cts PFC : PFC priority bitmap : 0xc PFC no-drop priorities : 2,3 Scheduling : -------------------------------------------- Priority Scheduling Bandwidth Rate-limit Type (in %age) (in Gbps) -------------------------------------------- 0 DWRR 0 N/A 2 DWRR 0 N/A 3 DWRR 0 N/A NIC : 42424650-4c32-3530-3130-313844000000 (0000:23:00.0) Port : 0490812b-9fb0-4242-4242-000011010000 Classification type : DSCP DSCP-to-priority : DSCP bitmap : 0xfffefffffbffffff ==> priority : 0 DSCP bitmap : 0x0001000000000000 ==> priority : 2 DSCP bitmap : 0x0000000004000000 ==> priority : 3 DSCP : 0-25, 27-47, 49-63 ==> priority : 0 DSCP : 48 ==> priority : 2 DSCP : 26 ==> priority : 3 DSCP-to-purpose : 48 ==> xccl-cts PFC : PFC priority bitmap : 0xc PFC no-drop priorities : 2,3 --More--
-
- Mit dem
rdma linkBefehl kann überprüft werden, ob die Zuordnung von roce-devices zu den AMD Pollara NIC-Karten vorhanden ist.-
jnpr@mi300-01:~$ rdma link | grep gpu link rocep9s0/1 state ACTIVE physical_state LINK_UP netdev gpu0_eth link rocep38s0/1 state ACTIVE physical_state LINK_UP netdev gpu1_eth link rocep70s0/1 state ACTIVE physical_state LINK_UP netdev gpu2_eth link roceo1/1 state ACTIVE physical_state LINK_UP netdev gpu3_eth link rocep137s0/1 state ACTIVE physical_state LINK_UP netdev gpu4_eth link rocep166s0/1 state ACTIVE physical_state LINK_UP netdev gpu5_eth link rocep198s0/1 state ACTIVE physical_state LINK_UP netdev gpu6_eth link rocep233s0/1 state ACTIVE physical_state LINK_UP netdev gpu7_eth
Die roce-devices werden erstellt, wenn die ionic_rdma Kernel-Modul geladen wird, und sollten die folgende roce-device-Datei für jede NIC Karte erstellen.
-
jnpr@mi300-01:/sys/class/infiniband$ find /sys/class/infiniband -type l /sys/class/infiniband/rocep137s0 /sys/class/infiniband/rocep38s0 /sys/class/infiniband/rocep70s0 /sys/class/infiniband/roceo1 /sys/class/infiniband/rocep166s0 /sys/class/infiniband/rocep233s0 /sys/class/infiniband/rocep198s0 /sys/class/infiniband/rocep9s0
-
- Um DCQCN auf den AMD Pollara-NICs zu konfigurieren, führen Sie das folgende Skript mit den entsprechenden Parametern aus.
-
jnpr @mi300-01:~$ cat /usr/local/bin/jnpr-enable-dcqcn.sh #!/bin/bash TOKEN_BUCKET_SIZE=800000 AI_RATE=160 ALPHA_UPDATE_INTERVAL=1 ALPHA_UPDATE_G=512 INITIAL_ALPHA_VALUE=64 RATE_INCREASE_BYTE_COUNT=431068 HAI_RATE=300 RATE_REDUCE_MONITOR_PERIOD=1 RATE_INCREASE_THRESHOLD=1 RATE_INCREASE_INTERVAL=1 CNP_DSCP=48 ROCE_DEVICES=$(rdma link | grep gpu | awk '{ print $2 }' | awk -F/ '{ print $1 }' | paste -sd " ") for roce_dev in $ROCE_DEVICES do sudo nicctl update dcqcn -r $roce_dev -i 1 \ --token-bucket-size $TOKEN_BUCKET_SIZE \ --ai-rate $AI_RATE \ --alpha-update-interval $ALPHA_UPDATE_INTERVAL \ --alpha-update-g $ALPHA_UPDATE_G \ --initial-alpha-value $INITIAL_ALPHA_VALUE \ --rate-increase-byte-count $RATE_INCREASE_BYTE_COUNT \ --hai-rate $HAI_RATE \ --rate-reduce-monitor-period $RATE_REDUCE_MONITOR_PERIOD \ --rate-increase-threshold $RATE_INCREASE_THRESHOLD \ --rate-increase-interval $RATE_INCREASE_INTERVAL \ --cnp-dscp $CNP_DSCP Done
-
- Überprüfen Sie mit dem Befehl nicctl das DCQCN-Profil für jedes roce-Gerät.
-
jnpr@mi300-01:~$ sudo nicctl show dcqcn --roce-device rocep137s0 | more ROCE device : rocep137s0 DCQCN profile id : 7 Status : Disabled Rate reduce monitor period : 100 Alpha update interval : 100 Clamp target rate : 0 Rate increase threshold : 1 Rate increase byte count : 431068 Rate increase in AI phase : 200 Alpha update G value : 50 Minimum rate : 1 Token bucket size : 4000000 Rate increase interval : 10 Rate increase in HAI phase : 200 Initial alpha value : 64 DSCP value used for CNP : 48 DCQCN profile id : 5 Status : Disabled Rate reduce monitor period : 100 Alpha update interval : 100 Clamp target rate : 0 Rate increase threshold : 1 Rate increase byte count : 431068 Rate increase in AI phase : 200 Alpha update G value : 50 Minimum rate : 1 Token bucket size : 4000000 Rate increase interval : 10 Rate increase in HAI phase : 200 Initial alpha value : 64 DSCP value used for CNP : 48 DCQCN profile id : 3 Status : Disabled Rate reduce monitor period : 100 Alpha update interval : 100 Clamp target rate : 0 Rate increase threshold : 1 Rate increase byte count : 431068 Rate increase in AI phase : 200 Alpha update G value : 50 Minimum rate : 1 Token bucket size : 4000000 Rate increase interval : 10 Rate increase in HAI phase : 200 Initial alpha value : 64 DSCP value used for CNP : 48 --More—
-
- Führen Sie schließlich das rccl_test.sh Skript wie folgt aus. Das folgende Beispiel zeigt die Tests, die für "Alle reduzieren" ausgeführt werden.
jnpr@mi300-01:/mnt/nfsshare/source/aicluster/rccl-tests$ ./run-rccl.sh Running all_reduce, channels 64, qps 1 ... Num nodes: 2 + tee --append /mnt/nfsshare/logs/rccl/MI300-RAILS-ALL/06062025_18_03_35/test.log + /opt/ompi/bin/mpirun --np 16 --allow-run-as-root -H MI300-01:8,MI300-02:8 --bind-to numa -x NCCL_IB_GID_INDEX=1 -x UCX_UNIFIED_MODE=y -x NCCL_IB_PCI_RELAXED_ORDERING=1 -x NCCL_GDR_FLUSH_DISABLE=1 -x RCCL_GDR_FLUSH_GPU_MEM_NO_RELAXED_ORDERING=0 -x PATH=/opt/ompi/bin:/opt/rocm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin -x LD_LIBRARY_PATH=/home/dbarmann/pollara/rccl-7961624/build/release:/home/dbarmann/pollara/amd-anp-new/build:/opt/ompi/lib: -x UCX_NET_DEVICES=gpu0_eth,gpu1_eth,gpu2_eth,gpu3_eth,gpu4_eth,gpu5_eth,gpu6_eth,gpu7_eth -x NCCL_IB_HCA=rocep9s0,rocep38s0,rocep70s0,roceo1,rocep137s0,rocep166s0,rocep198s0,rocep233s0 --mca btl '^vader,openib' --mca btl_tcp_if_include mgmt_eth -x NCCL_MIN_NCHANNELS=64 -x NCCL_MAX_NCHANNELS=64 -x NCCL_IB_QPS_PER_CONNECTION=1 -x NCCL_TOPO_DUMP_FILE=/tmp/system_run2.txt -x HSA_NO_SCRATCH_RECLAIM=1 -x NCCL_GDRCOPY_ENABLE=0 -x NCCL_IB_TC=106 -x NCCL_IB_FIFO_TC=192 -x NCCL_IGNORE_CPU_AFFINITY=1 -x RCCL_LL128_FORCE_ENABLE=1 -x NCCL_PXN_DISABLE=0 -x NCCL_DEBUG=INFO -x NET_OPTIONAL_RECV_COMPLETION=1 -x NCCL_IB_USE_INLINE=1 -x NCCL_DEBUG_FILE=/mnt/nfsshare/logs/rccl/MI300-RAILS-ALL/06062025_18_03_35/nccl-debug.log -x 'LD_PRELOAD=/home/dbarmann/pollara/amd-anp-new/build/librccl-net.so /home/dbarmann/pollara/rccl-7961624/build/release/librccl.so' /mnt/nfsshare/source/aicluster/rccl-tests/build/all_reduce_perf -b 1024 -e 16G -f 2 -g 1 -n 20 -m 1 -c 1 -w 5_# nThread 1 nGpus 1 minBytes 1024 maxBytes 17179869184 step: 2(factor) warmup iters: 5 iters: 20 agg iters: 1 validation: 1 graph: 0_# rccl-tests: Version develop:b0a3841+ # Using devices # Rank 0 Group 0 Pid 18335 on mi300-01 device 0 [0000:05:00] AMD Instinct MI300X # Rank 1 Group 0 Pid 18336 on mi300-01 device 1 [0000:29:00] AMD Instinct MI300X # Rank 2 Group 0 Pid 18337 on mi300-01 device 2 [0000:49:00] AMD Instinct MI300X # Rank 3 Group 0 Pid 18340 on mi300-01 device 3 [0000:65:00] AMD Instinct MI300X # Rank 4 Group 0 Pid 18338 on mi300-01 device 4 [0000:85:00] AMD Instinct MI300X # Rank 5 Group 0 Pid 18341 on mi300-01 device 5 [0000:a9:00] AMD Instinct MI300X # Rank 6 Group 0 Pid 18342 on mi300-01 device 6 [0000:c9:00] AMD Instinct MI300X # Rank 7 Group 0 Pid 18339 on mi300-01 device 7 [0000:e5:00] AMD Instinct MI300X # Rank 8 Group 0 Pid 16249 on mi300-02 device 0 [0000:05:00] AMD Instinct MI300X # Rank 9 Group 0 Pid 16251 on mi300-02 device 1 [0000:29:00] AMD Instinct MI300X # Rank 10 Group 0 Pid 16250 on mi300-02 device 2 [0000:49:00] AMD Instinct MI300X # Rank 11 Group 0 Pid 16254 on mi300-02 device 3 [0000:65:00] AMD Instinct MI300X # Rank 12 Group 0 Pid 16255 on mi300-02 device 4 [0000:85:00] AMD Instinct MI300X # Rank 13 Group 0 Pid 16253 on mi300-02 device 5 [0000:a9:00] AMD Instinct MI300X # Rank 14 Group 0 Pid 16252 on mi300-02 device 6 [0000:c9:00] AMD Instinct MI300X # Rank 15 Group 0 Pid 16256 on mi300-02 device 7 [0000:e5:00] AMD Instinct MI300X # # out-of-place in-place # size count type redop root time algbw busbw #wrong time algbw busbw #wrong # (B) (elements) (us) (GB/s) (GB/s) (us) (GB/s) (GB/s) 1024 256 float sum -1 41.61 0.02 0.05 0 53.55 0.02 0.04 0 2048 512 float sum -1 43.79 0.05 0.09 0 50.54 0.04 0.08 0 4096 1024 float sum -1 45.75 0.09 0.17 0 45.21 0.09 0.17 0 8192 2048 float sum -1 46.50 0.18 0.33 0 47.75 0.17 0.32 0 16384 4096 float sum -1 60.52 0.27 0.51 0 48.90 0.34 0.63 0 32768 8192 float sum -1 49.68 0.66 1.24 0 52.57 0.62 1.17 0 65536 16384 float sum -1 53.75 1.22 2.29 0 52.74 1.24 2.33 0 131072 32768 float sum -1 69.16 1.90 3.55 0 56.83 2.31 4.32 0 262144 65536 float sum -1 69.31 3.78 7.09 0 63.17 4.15 7.78 0 524288 131072 float sum -1 77.16 6.79 12.74 0 80.51 6.51 12.21 0 1048576 262144 float sum -1 127.5 8.23 15.42 0 107.6 9.75 18.28 0 2097152 524288 float sum -1 125.0 16.78 31.46 0 130.9 16.02 30.04 0 4194304 1048576 float sum -1 149.5 28.06 52.61 0 148.4 28.26 52.99 0 8388608 2097152 float sum -1 222.9 37.63 70.55 0 231.6 36.21 67.90 0 16777216 4194304 float sum -1 321.3 52.21 97.90 0 326.2 51.43 96.43 0 33554432 8388608 float sum -1 436.2 76.93 144.25 0 447.0 75.06 140.75 0 67108864 16777216 float sum -1 678.9 98.85 185.35 0 684.6 98.02 183.79 0 134217728 33554432 float sum -1 1164.6 115.25 216.10 0 1148.1 116.90 219.19 0 268435456 67108864 float sum -1 1550.3 173.15 324.66 0 1563.9 171.65 321.84 0 536870912 134217728 float sum -1 2979.9 180.16 337.81 0 2977.6 180.30 338.07 0 1073741824 268435456 float sum -1 5824.8 184.34 345.64 0 5859.5 183.25 343.59 0 2147483648 536870912 float sum -1 11596 185.20 347.25 0 11611 184.94 346.77 0 4294967296 1073741824 float sum -1 520420 8.25 15.47 0 23190 185.21 347.27 0 8589934592 2147483648 float sum -1 46157 186.10 348.94 0 46150 186.13 349.00 0 17179869184 4294967296 float sum -1 568668 30.21 56.65 0 91823 187.10 350.81 0 # Errors with asterisks indicate errors that have exceeded the maximum threshold. # Out of bounds values : 0 OK # Avg bus bandwidth : 117.077 #