Remarques :

Benchmark NVIDIA GPUDirect RDMA avec InfiniBand Bande passante d'écriture

Introduction

L'analyse comparative des performances est la caractéristique du calcul hautes performances. Les superordinateurs les plus modernes sont des clusters de nœuds de calcul avec une architecture hétérogène. Dans un tel nœud, nous pouvons voir à la fois des CPU classiques et des co-processeurs informatiques spécialisés (GPU). Ce tutoriel décrit une approche permettant de comparer NVIDIA GPUDirect Remote Direct Memory Access (GPUDirect RDMA) avec un script personnalisé basé sur la bande passante d'écriture InfiniBand (ib_write_bw).

L'analyse comparative du RDMA GPUDirect avec le script ib_write_bw.sh fournit un mécanisme simple et efficace pour effectuer l'analyse comparative du RDMA GPUDirect dans un cluster HPC sans se soucier de l'installation, des dépendances ou de la configuration du logiciel. Ce script est inclus avec la pile HPC OCI 2.10.2 et versions ultérieures. Un rapport de test consolidé contenant les détails de toutes les interfaces sera affiché sur la console OCI Bastion et stocké à l'adresse /tmp pour référence ultérieure.

Remote Direct Memory Access (RDMA) permet aux périphériques Peripheral Component Interconnect Express (PCIe) d'accéder directement à la mémoire GPU. Conçu spécifiquement pour les besoins de l'accélération GPU, NVIDIA GPUDirect RDMA fournit une communication directe entre les GPU NVIDIA dans les systèmes distants. Il s'agit d'une technologie qui permet un chemin direct pour l'échange de données entre le GPU et les périphériques homologues tiers à l'aide des fonctionnalités standard de PCI Express. Il est activé sur les GPU de classe Tesla et Quadro, GPUDirect RDMA repose sur la capacité des GPU NVIDIA à exposer des portions de mémoire de périphérique sur une région PCI Express Base Address Register.

RDMA DE L'UC

"gpurdma"

Perftest Package est un ensemble de tests écrits sur des uverbes destinés à être utilisés en tant que micro-benchmark de performances. Il contient un ensemble de tests d'évaluation de la bande passante et de la latence, tels que :

Remarque : le package perftest doit être compilé avec Compute Unified Device Architecture (CUDA) pour utiliser la fonctionnalité GPUDirect.

Dans ce tutoriel, nous mettons l'accent sur un test de bande passante RDMA GPUDirect avec des transactions d'envoi utilisant la bande passante d'écriture InfiniBand (ib_write_bw), qui peut être utilisé pour tester la bande passante et la latence à l'aide des transactions d'écriture RDMA. Nous automatiserons le processus d'installation et de test avec un script de wrapper personnalisé pour ib_write_bw natif. Ce script peut être utilisé pour vérifier ib_write_bw entre deux noeuds GPU dans le cluster. Si CUDA est installé sur le noeud, l'exécution compile à nouveau un package perftest avec CUDA.

Objectifs

Prérequis

Installation manuelle de perftest avec CUDA DMA-BUF

Avant de procéder à l'installation manuelle, assurez-vous que tous les prérequis sont respectés et que nous procédons à l'installation sur une forme de GPU prise en charge.

Remarque : le test manuel de GPUDirect RDMA avec ib_write_bw nécessite la désinstallation du package existant et sa recompilation avec CUDA. Nous devons vérifier manuellement la forme des noeuds, le nombre de GPU et l'interface RDMA active sur les noeuds avant de procéder à l'évaluation des performances.

Présentation de la solution

ib_write_bw.sh est un script qui simplifie le processus de test d'évaluation RDMA GPUDirect en automatisant toutes les tâches manuelles associées. Ce script peut être déclenché directement à partir du bastion lui-même avec tous les arguments. Pas besoin de s'exécuter dans un modèle client-serveur traditionnel. Les scripts effectuent les vérifications suivantes lors de l'exécution. Si l'une de ces vérifications échoue, elle se ferme avec une erreur.

Si toutes les vérifications sont réussies, ib_write_bw.sh génère et exécute un livre de jeux ansible pour effectuer l'installation et la configuration.

Script

Syntaxe

sh ib_write_bw.sh -h

Usage:
./ib_write_bw.sh -s <server> -n <node> -c <y> -g <gpu id>
Options:
s     Server hostname
n     Client hostname.
c     Enable cuda (Default: Disabled)
g     GPU id (Default: 0)
h     Print this help.
Logs are stored at /tmp/logs
e.g.,  sh ./ib_write_bw.sh -s compute-permanent-node-1 -n compute-permanent-node-2 -c y -g 2
Supported shapes: BM.GPU.B4.8,BM.GPU.A100-v2.8,BM.GPU4.8

Exemple de sortie

sh ib_write_bw.sh -s compute-permanent-node-14 -n compute-permanent-node-965 -c y -g 1
Shape: "BM.GPU4.8"
Server: compute-permanent-node-14
Client: compute-permanent-node-965
Cuda: y
GPU id: 1
Checking interfaces...
PLAY [all] *******************************************************************************************************************************
TASK [Gathering Facts] *******************************************************************************************************************
ok: [compute-permanent-node-14]
ok: [compute-permanent-node-965]
TASK [check cuda] ************************************************************************************************************************
ok: [compute-permanent-node-965]
ok: [compute-permanent-node-14]
.
.
Testing active interfaces...
mlx5_0
mlx5_1
mlx5_2
mlx5_3
mlx5_6
mlx5_7
mlx5_8
mlx5_9
mlx5_10
mlx5_11
mlx5_12
mlx5_13
mlx5_14
mlx5_15
mlx5_16
mlx5_17
ib_server.sh                                                                                            100%  630     2.8MB/s   00:00
ib_client.sh                                                                                            100%  697     2.9MB/s   00:00
Server Interface: mlx5_0
initializing CUDA
Listing all CUDA devices in system:
CUDA device 0: PCIe address is 0F:00
CUDA device 1: PCIe address is 15:00
CUDA device 2: PCIe address is 51:00
CUDA device 3: PCIe address is 54:00
CUDA device 4: PCIe address is 8D:00
CUDA device 5: PCIe address is 92:00
CUDA device 6: PCIe address is D6:00
CUDA device 7: PCIe address is DA:00
Picking device No. 1
[pid = 129753, dev = 1] device name = [NVIDIA A100-SXM4-40GB]
creating CUDA Ctx
making it the current CUDA Ctx
cuMemAlloc() of a 131072 bytes GPU buffer
allocated GPU buffer address at 00007f29df200000 pointer=0x7f29df200000
---------------------------------------------------------------------------------------
                    RDMA_Write BW Test
Dual-port       : OFF                    Device         : mlx5_0
Number of qps   : 1                   Transport type : IB
Connection type : RC                 Using SRQ      : OFF
PCIe relax order: ON
ibv_wr* API     : ON
TX depth        : 128
CQ Moderation   : 1
Mtu             : 4096[B]
Link type       : Ethernet
GID index       : 3
Max inline data : 0[B]
rdma_cm QPs  : OFF
Data ex. method : Ethernet
---------------------------------------------------------------------------------------
local address: LID 0000 QPN 0x008b PSN 0xe4ad79 RKey 0x181de0 VAddr 0x007f29df210000
GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:19:196
remote address: LID 0000 QPN 0x008b PSN 0x96f625 RKey 0x181de0 VAddr 0x007f9c4b210000
GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:16:13
---------------------------------------------------------------------------------------
#bytes     #iterations    BW peak[Gb/sec]    BW average[Gb/sec]   MsgRate[Mpps]    CPU_Util[%]
65536      407514           0.00                                35.61                   0.067920           0.78

Récapitulatif du test

GPUDirect Le récapitulatif de test RDMA pour chaque interface des noeuds de calcul sera affiché sur le bastion et sera stocké dans le dossier /tmp/ib_bw sur le bastion.

Le paramètre important qu'il recherche est BW average[Gb/sec].

************** Test Summary **************
Server interface: mlx5_0
#bytes     #iterations    BW peak[Gb/sec]    BW average[Gb/sec]   MsgRate[Mpps]    CPU_Util[%]
65536      407514           0.00                                35.61                   0.067920           0.78
---------------------------------------------------------------------------------------
Server interface: mlx5_1
#bytes     #iterations    BW peak[Gb/sec]    BW average[Gb/sec]   MsgRate[Mpps]    CPU_Util[%]
65536      407569           0.00                                35.61                   0.067929           0.78
---------------------------------------------------------------------------------------
Server interface: mlx5_2
#bytes     #iterations    BW peak[Gb/sec]    BW average[Gb/sec]   MsgRate[Mpps]    CPU_Util[%]
65536      407401           0.00                                35.60                   0.067901           0.78
---------------------------------------------------------------------------------------

Accusé de réception

Ressources de formation supplémentaires

Parcourez d'autres ateliers sur docs.oracle.com/learn ou accédez à davantage de contenus de formation gratuits sur le canal Oracle Learning YouTube. De plus, rendez-vous sur education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.

Pour obtenir de la documentation sur le produit, visitez Oracle Help Center.