본문으로 건너뛰기

InfiniBand 셋업 및 벤치마크

본 문서는 ECI(Elice Cloud Infrastructure) 환경에서 제공되는 InfiniBand를 설정하고 사용하는 방법을 단계별로 안내합니다. InfiniBand는 고대역폭, 저지연 네트워크 성능을 제공하여 대규모 모델 훈련, 고성능 컴퓨팅(HPC), 분산 애플리케이션에 권장되는 구성 요소입니다.


1. ECI 포털에서 InfiniBand VM 생성하기

ECI에서 InfiniBand를 사용하기 위해서는 가상 클러스터를 먼저 구성해야 합니다.

1단계: 가상 클러스터 생성

  1. ECI 포털에 로그인합니다.
  2. 왼쪽 메뉴에서 컴퓨트 > 가상 클러스터를 선택합니다.
  3. 가상 클러스터 생성 버튼을 클릭합니다.
  4. 클러스터 이름과 필요한 클러스터를 구성할 가상 머신의 인스턴스 유형을 선택합니다.

가상 클러스터는 InfiniBand 패브릭과 VM 간 연결을 위한 "논리적 네트워크 공간"입니다.

2단계: 가상 머신 생성

가상 클러스터를 생성한 후, 해당 클러스터에 연결할 가상 머신을 생성합니다.

  1. 왼쪽 메뉴에서 컴퓨트 > 가상 머신으로 이동합니다.
  2. 가상머신 생성 버튼을 클릭합니다.
  3. 가상 머신 이름, 인스턴스 유형 등 필요한 설정을 입력합니다.
  4. 블록스토리지 > 이미지에서 운영체제 이미지를 선택합니다.
    • OFED가 포함된 이미지 사용을 권장합니다 (InfiniBand 드라이버 포함).
  5. 가상 머신 생성을 완료합니다.

3단계: 가상 머신을 가상 클러스터에 연결

2단계에서 생성된 VM은 바로 InfiniBand 패브릭을 사용할 수 없습니다. 먼저 1단계에서 생성한 가상 클러스터에 VM을 연결해야 합니다.

  1. 컴퓨트 > 가상 클러스터 메뉴로 이동합니다.
  2. 1단계에서 생성한 가상 클러스터를 선택하여 상세 페이지에 접근합니다.
  3. 2단계에서 생성한 가상머신을 클러스터에 연결합니다.
    • 참고: 연결할 가상머신은 대기 중 상태이어야 합니다.

이 단계에서 가상 머신이 어떤 InfiniBand 패브릭에 속할지가 결정됩니다.

4단계: 가상 클러스터 시작

3단계에서 VM을 클러스터에 연결한 후, 가상 클러스터를 시작합니다.

  1. 가상 클러스터 상세 페이지에서 클러스터 시작 버튼을 클릭합니다.

    클러스터를 시작해야 InfiniBand 패브릭이 활성화되고 실제 통신을 위한 연결이 이루어집니다.

5단계: 가상 머신 시작 및 확인

4단계에서 클러스터를 시작하면, 연결된 가상 머신이 자동으로 시작됩니다.

  1. 가상 머신이 자동으로 시작되는 것을 확인합니다.
  2. VM 내부에서 다음 명령어로 InfiniBand HCA(Host Channel Adapter)가 정상적으로 인식되었는지 확인합니다.
ibstat
# 또는
ibv_devinfo

2. InfiniBand 개념 및 동작 방식

이전 단계를 완료하면 InfiniBand를 사용할 준비가 완료됩니다. InfiniBand는 일반 Ethernet과 달리 초저지연, 고대역폭을 제공하는 스위치 기반 패브릭(Fabric)입니다. ECI에서는 다음과 같은 방식으로 InfiniBand를 제공합니다.

HCA 단위 패스스루 (Passthrough)

가상 머신 내부에서 실제 Mellanox mlx5 HCA(Host Channel Adapter)를 직접 패스스루하여 베어메탈과 동일한 성능을 제공합니다.

테넌트 격리

Partition Key (P_Key) 기반의 논리적 네트워크를 구성합니다. 동일한 가상 클러스터에 속한 가상 머신들은 동일한 P_Key를 공유하며, 같은 P_Key를 가진 가상 머신끼리만 통신이 활성화됩니다.

기본 RDMA 모드

CPU와 메모리 간섭 없이 최대 성능을 낼 수 있는 순수 RDMA(Remote Direct Memory Access) 통신을 기본으로 합니다. 이 방식은 별도의 IP 주소나 netdev 인터페이스가 필요 없습니다.


3. P_Key 기반 RDMA 통신 (ECI 기본 방식)

앞서 설명한 InfiniBand 개념을 바탕으로, ECI에서는 NVIDIA에서 제안하는 공식 사용법인 P_Key 기반 RDMA 통신을 권장합니다.

장점

  • 별도의 네트워크 인터페이스 생성이 불필요합니다.
  • IP 설정이 필요 없습니다. (데이터 통신 외 사이드 채널 통신용 IP는 필요할 수 있음)
  • 다른 테넌트와의 통신이 원천적으로 차단되어 보안이 보장됩니다.
  • 최고 성능을 제공하여 MPI, 분산 학습, HPC 연구에 최적화되어 있습니다.

필요한 작업

  1. HCA 이름 확인
  2. P_Key 인덱스 확인
  3. 서버 측에서 perftest 실행
  4. 클라이언트 측에서 서버 정보로 접속하여 벤치마크 수행

3.1. HCA 및 P_Key 확인

P_Key 기반 RDMA 통신을 사용하기 전에, 먼저 사용할 HCA와 P_Key 정보를 확인해야 합니다.

HCA 확인

다음 명령어로 HCA(Host Channel Adapter) 장치 이름을 확인합니다.

ibstat
ibv_devinfo

P_Key 확인

HCA를 확인한 후, 다음 명령어로 사용 가능한 P_Key 인덱스와 값을 확인합니다.

# 사용 가능한 P_Key 리스트 확인
ls /sys/class/infiniband/mlx5_2/ports/1/pkeys/

# 1번 인덱스의 P_Key 값 확인
cat /sys/class/infiniband/mlx5_2/ports/1/pkeys/1

출력 예시:

0x8001

이 P_Key 인덱스(예: 1)를 벤치마크 시 사용합니다.


4. RDMA Benchmark 실행

3단계에서 HCA와 P_Key를 확인했다면, 이제 실제 RDMA 성능을 측정할 수 있습니다. InfiniBand RDMA 성능은 NVIDIA가 공식적으로 제공하는 perftest 툴셋(ib_write_bw, ib_read_bw, ib_send_bw 등)을 사용하여 측정합니다. P_Key 기반 RDMA 통신을 위해 --pkey_index 옵션을 반드시 지정해야 합니다.

4.1. 벤치마크 메타데이터 교환용 IP 확인 (서버 측)

perftest 툴은 RDMA 성능 측정에 앞서, 서버와 클라이언트 간의 제어 정보(메타데이터) 교환을 위한 별도의 사이드 채널이 필요합니다. ECI VM의 기본 IP 주소를 이 용도로 사용할 수 있습니다.

# 서버의 가상 네트워크 IP 확인
ip address show dev enp0s3

또는, ECI 사용자 포털의 가상 머신 정보 > 네트워크 > 인터페이스에서 "IP 주소"를 확인할 수 있습니다.

출력 예시:

2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 8950 qdisc fq_codel state UP group default qlen 1000
link/ether 02:00:83:05:16:1e brd ff:ff:ff:ff:ff:ff
inet 192.168.0.12/24 brd 192.168.0.255 scope global enp0s3
valid_lft forever preferred_lft forever
inet6 fe80::83ff:fe05:161e/64 scope link
valid_lft forever preferred_lft forever

위 출력에서 가상 머신의 IP는 192.168.0.12입니다.

4.2. ib_send_bw 실행 예시

4.1단계에서 서버의 IP를 확인했으면, 이제 벤치마크를 실행할 수 있습니다.

서버 측 명령어

# mlx5_2 장치의 1번 포트, 1번 P_Key, 8개 큐를 병렬로 사용
ib_send_bw -d mlx5_2 -i 1 --pkey_index 1 -q 8

클라이언트 측 명령어

# 서버와 동일한 설정으로, 마지막에 메타데이터 교환을 위한 서버 IP를 입력
ib_send_bw -d mlx5_2 -i 1 --pkey_index 1 -q 8 <server_ip>

4.3. 실행 결과

서버와 클라이언트에서 명령어를 실행하면 다음과 같은 결과를 확인할 수 있습니다.

서버

서버의 IP가 192.168.0.12라고 가정하고 실행합니다.

ib_send_bw -d mlx5_2 -i 1 --pkey_index 1 -q 8

서버 출력 예시:

************************************
* Waiting for client to connect... *
************************************
---------------------------------------------------------------------------------------
Send BW Test
Dual-port : OFF Device : mlx5_2
Number of qps : 8 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 : IB
Max inline data : 0[B]
rdma_cm QPs : OFF
Data ex. method : Ethernet
---------------------------------------------------------------------------------------
local address: LID 0x1e7 QPN 0x05a5 PSN 0x3f7231
remote address: LID 0x1fd QPN 0x0392 PSN 0x61d3e8
...
---------------------------------------------------------------------------------------
#bytes #iterations BW peak[MiB/sec] BW average[MiB/sec] MsgRate[Mpps]
65536 8000 0.00 47241.57 0.755865
---------------------------------------------------------------------------------------

클라이언트

서버가 대기 상태가 되면, 클라이언트에서 서버 IP로 접속하여 벤치마크를 시작합니다.

# 4.1단계에서 확인한 서버 IP(192.168.0.12)로 접속
ib_send_bw -d mlx5_2 -i 1 --pkey_index 1 -q 8 192.168.0.12

클라이언트 출력 예시:

---------------------------------------------------------------------------------------
Send BW Test
Dual-port : OFF Device : mlx5_2
Number of qps : 8 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 : IB
Max inline data : 0[B]
rdma_cm QPs : OFF
Data ex. method : Ethernet
---------------------------------------------------------------------------------------
local address: LID 0x1fd QPN 0x0392 PSN 0x61d3e8
remote address: LID 0x1e7 QPN 0x05a5 PSN 0x3f7231
...
---------------------------------------------------------------------------------------
#bytes #iterations BW peak[MiB/sec] BW average[MiB/sec] MsgRate[Mpps]
65536 8000 47161.34 47026.67 0.752427
---------------------------------------------------------------------------------------

5. IPoIB 모드 (특수 케이스)

4단계까지 진행하면 대부분의 경우 충분하지만, 특수한 상황에서 IPoIB 모드가 필요할 수 있습니다.

IPoIB (IP over InfiniBand) 모드는 RDMA를 지원하지 않는 레거시 애플리케이션에서 IP 기반 통신이 필요할 때 사용하는 특수한 방식입니다. 이 모드는 InfiniBand의 RDMA 성능을 100% 활용할 수 없으므로 사용을 권장하지 않습니다.

기본 절차:

  1. IB 인터페이스에 해당하는 netdev 확인
  2. P_Key 기반의 IPoIB netdev 생성
  3. IP 주소 부여
  4. 생성한 netdev 활성화 (up)
# 1. IB 인터페이스에 대응하는 netdev 확인 (예: mlx5_2 -> ibp5s0)
ibdev2netdev

# mlx5_2의 netdev가 ibp5s0라고 가정하고 진행
# 2. P_Key 기반 IPoIB 자식 인터페이스 생성
PKEY=$(cat /sys/class/infiniband/mlx5_2/ports/1/pkeys/1)
sudo ip link add link ibp5s0 name ibp5s0.${PKEY#0x} type ipoib pkey $PKEY

# 3. IP 주소 할당
sudo ip addr add 10.10.10.21/24 dev ibp5s0.${PKEY#0x}

# 4. 인터페이스 활성화
sudo ip link set dev ibp5s0.${PKEY#0x} up