주:
- 이 사용지침서에서는 Oracle Cloud에 액세스해야 합니다. 무료 계정에 등록하려면 Oracle Cloud Infrastructure Free Tier 시작하기를 참조하십시오.
- Oracle Cloud Infrastructure 인증서, 테넌시 및 구획에 대한 예제 값을 사용합니다. 실습을 마치면 이러한 값을 자신의 클라우드 환경과 관련된 값으로 대체합니다.
벤치마크 NVIDIA GPUDirect RDMA 및 InfiniBand 쓰기 대역폭
소개
성능 벤치마킹은 HPC의 특징입니다. 최신 슈퍼컴퓨터는 이기종 아키텍처를 사용하는 컴퓨팅 노드의 클러스터입니다. 이러한 노드에서는 클래식 CPU와 특수 컴퓨팅 코프로세서(GPU)를 모두 볼 수 있습니다. 이 사용지침서에서는 InfiniBand 쓰기 대역폭(ib_write_bw)에 구축된 사용자 정의된 스크립트로 NVIDIA GPUDirect 원격 직접 메모리 액세스(GPUDirect RDMA)를 벤치마크하는 방법에 대해 설명합니다.
GPUDirect RDMA를 ib_write_bw.sh 스크립트로 벤치마킹하면 소프트웨어 설치, 종속성 또는 구성에 대한 걱정 없이 HPC 클러스터에서 GPUDirect RDMA 벤치마킹을 수행하는 쉽고 효과적인 메커니즘이 제공됩니다. 이 스크립트는 OCI HPC 스택 2.10.2 이상에 포함되어 있습니다. 모든 인터페이스의 세부정보가 포함된 통합 테스트 보고서가 OCI 배스천 콘솔에 표시되고 나중에 참조할 수 있도록 /tmp에 저장됩니다.
RDMA(Remote Direct Memory Access)를 사용하면 Peripheral Component Interconnect Express(PCIe) 장치가 GPU 메모리에 직접 액세스할 수 있습니다. GPU 가속의 요구를 위해 특별히 설계된 NVIDIA GPUDirect RDMA는 원격 시스템에서 NVIDIA GPU 간에 직접 통신을 제공합니다. PCI Express의 표준 기능을 사용하여 GPU와 타사 피어 장치 간 데이터 교환을 위한 직접 경로를 제공하는 기술입니다. Tesla 및 Quadro급 GPU에서 사용할 수 있는 GPUDirect RDMA는 NVIDIA GPU 기능을 사용하여 PCI Express 기본 주소 등록 영역에 장치 메모리의 일부를 노출합니다.
GPU RDMA

Perftest Package는 성능 마이크로 벤치마크로 사용하기 위해 uverbs를 통해 작성된 테스트 모음입니다. 여기에는 다음과 같은 대역폭 및 대기 시간 벤치마크 세트가 포함됩니다.
-
전송:
ib_send_bw및ib_send_lat -
RDMA 읽기 :
ib_read_bw및ib_read_lat -
RDMA 쓰기:
ib_write_bw및ib_write_lat -
RDMA 원자 :
ib_atomic_bw및ib_atomic_lat -
네이티브 이더넷(MOFED2 작업 시) -
raw_ethernet_bw및raw_ethernet_la
주: GPUDirect 기능을 활용하려면
perftest패키지를 CUDA(컴퓨트 통합 장치 아키텍처)로 컴파일해야 합니다.
이 자습서에서는 RDMA 쓰기 트랜잭션을 사용하여 대역폭 및 대기 시간을 테스트하는 데 사용할 수 있는 InfiniBand 쓰기 대역폭(ib_write_bw)을 사용하여 전송 트랜잭션이 포함된 GPUDirect RDMA 대역폭 테스트를 중점적으로 다룹니다. 네이티브 ib_write_bw용 사용자 정의 래퍼 스크립트를 사용하여 설치 및 테스트 프로세스를 자동화합니다. 이 스크립트를 사용하여 클러스터의 두 GPU 노드 간에 ib_write_bw를 확인할 수 있습니다. CUDA가 노드에 설치된 경우 CUDA를 사용하여 perftest 패키지를 다시 컴파일합니다.
목표
- 벤치마크 NVIDIA GPUDirect RDMA
ib_write_bw에 구축 된 사용자 정의 스크립트.
필요 조건
-
CUDA Toolkit 11.7 이상
-
NVIDIA Open-Source GPU 커널 모듈 버전 515 이상을 설치합니다.
CUDA DMA-BUF로 perftest 수동 설치
수동 설치를 계속하기 전에 모든 필요 조건이 충족되었는지 확인하고 지원되는 GPU 구성에 설치합니다.
-
구성/사용
-
LD_LIBRARY_PATH및LIBRARY_PATH환경 변수를 익스포트합니다.export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATHexport LIBRARY_PATH=/usr/local/cuda/lib64:$LIBRARY_PATH
-
-
perftest저장소를 복제하고 CUDA를 사용하여 컴파일합니다.git clone https://github.com/linux-rdma/perftest.git -
복제 후 다음 명령을 사용합니다.
cd perftest/ ./autogen.sh && ./configure CUDA_H_PATH=<path to cuda.h> && make -j, e.g.: ./autogen.sh && ./configure CUDA_H_PATH=/usr/local/cuda/include/cuda.h && make -j따라서 -use_cuda=
플래그를 사용하여 명령줄에 추가할 수 있습니다. ./ib_write_bw -d ib_dev --use_cuda=<gpu index> -a
주:
ib_write_bw를 사용하여 GPUDirect RDMA를 수동으로 테스트하려면 기존 패키지를 제거하고 CUDA를 사용하여 다시 컴파일해야 합니다. 벤치마킹을 계속하기 전에 노드에서 노드 구성, GPU 수 및 활성 RDMA 인터페이스를 수동으로 확인해야 합니다.
솔루션 개요
ib_write_bw.sh는 관련된 모든 수동 작업을 자동화하여 GPUDirect RDMA 벤치마크 프로세스를 간소화하는 스크립트입니다. 이 스크립트는 배스천 자체에서 모든 인수로 직접 트리거될 수 있습니다. 기존 클라이언트-서버 모델에서는 실행할 필요가 없습니다. 스크립트는 실행 중에 다음 검사를 수행합니다. 이러한 검사가 실패하면 오류가 발생하면서 종료됩니다.
- 노드 구성입니다.
- CUDA 설치.
- 설치된 총 GPU 수와 GPU ID가 입력되었습니다.
- 서버 및 클라이언트의 활성 RDMA 인터페이스입니다.
- 지원되는 구성
- BM.GPU.B4.8
- BM.GPU.A100-v2.8
- BM.GPU4.8
- 필요 조건
- 지원되는 GPU 구성입니다.
- CUDA 드라이버 및 툴킷을 설치했습니다.
모든 검사가 통과되면 ib_write_bw.sh는 설치 및 구성을 수행하기 위해 가능한 플레이북을 생성하고 실행합니다.
Script
-
이름:
ib_write_bw.sh -
위치:
/opt/oci-hpc/scripts/ -
스택:
HPC -
스택 버전:
2.10.3 and above
용도
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
샘플 출력
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
테스트 요약
GPUDirect 컴퓨트 노드의 각 인터페이스에 대한 RDMA 테스트 요약이 배스천에 표시되며 배스천의 /tmp/ib_bw 폴더에 저장됩니다.
찾는 중요한 매개변수는 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
---------------------------------------------------------------------------------------
확인
- 작성자 - Anoop Nair
추가 학습 자원
docs.oracle.com/learn에서 다른 실습을 살펴보거나 Oracle Learning YouTube 채널에서 더 많은 무료 학습 콘텐츠에 액세스하십시오. 또한 education.oracle.com/learning-explorer를 방문하여 Oracle Learning Explorer가 되십시오.
제품 설명서는 Oracle Help Center를 참조하십시오.
Benchmark NVIDIA GPUDirect RDMA with InfiniBand Write Bandwidth
F90875-01
December 2023
Copyright © 2023, Oracle and/or its affiliates.