네. MinIO AIStor 최신 RDMA 문서를 기준으로 보면, AIStor 서버 쪽에서도 추가 구성이 필요함. 특히 지금까지 이야기한 RHEL 10.2 + Intel E810 + irdma + RoCEv2 + GPU Direct RDMA 환경에서는 단순히 NIC에 irdma가 올라와 있고 RDMA Device Plugin을 설치하는 것만으로 AIStor RDMA가 활성화되는 구조가 아님.
그리고 중요한 점이 하나 있음. AIStor가 RDMA를 사용하려면 일반 AIStor binary가 아니라 RDMA build를 사용해야 함. 일반 binary에서는 MINIO_RDMA_* 설정이 무시됨. (MinIO AIStor Documentation)
현재 환경을 기준으로 보면 다음 5개 계층으로 보는 것이 가장 이해하기 쉬움.
AIStor Storage Node
│
├─ ① Intel E810 / ice
│
├─ ② RDMA subsystem / irdma
│
├─ ③ RoCEv2 + PFC/ECN
│
├─ ④ AIStor RDMA build
│
└─ ⑤ AIStor RDMA configuration
그리고 GPU까지 S3-over-RDMA를 사용하려면 추가로:
GPU
↓
GPUDirect RDMA
↓
E810
↓
RoCEv2
↓
AIStor E810
구조를 검증해야 함.
AIStor 문서에서도 inter-node RDMA와 S3-over-RDMA를 별개의 기능으로 구분하고 있음. Inter-node RDMA는 GPU가 필요하지 않으며, GPU를 사용하는 것은 S3-over-RDMA 경로임. (MinIO AIStor Documentation)
현재 AIStor가 일반 build로 설치되어 있다면 이것부터 확인해야 함.
AIStor 최신 문서에서는 RDMA 기능이 standard binary에 포함되어 있지 않고, 별도의 RDMA build를 사용하도록 되어 있음. (MinIO AIStor Documentation)
즉:
기존
AIStor
└── standard binary
↓
TCP
에서
RDMA 구성
AIStor
└── RDMA build
├── inter-node RDMA
└── S3 over RDMA
구조가 됨.
따라서 현재 AIStor cluster가 이미 운영 중이라면 현재 설치된 AIStor binary가 RDMA build인지 먼저 확인하는 것이 1순위임.
AIStor node에서도 다음을 확인해야 함.
ibv_devinfo
정상적인 RDMA device와 PORT_ACTIVE 상태가 확인되어야 함. AIStor 문서에서도 이 명령을 RDMA 구성의 첫 번째 검증 단계로 제시하고 있음. (MinIO AIStor Documentation)
또한:
rdma link
rdma dev
ibstat
ibstatus
등으로 확인함.
현재 AIStor node가 RHEL 10.2이고 E810을 사용한다면:
lsmod | grep -E 'ice|irdma|ib_core|ib_uverbs|rdma_cm'
도 확인하는 것이 좋음.
여기서 MinIO 문서의 host 설정 예제를 그대로 적용하면 안 되는 부분이 있음.
MinIO 문서의 RoCE lossless host 예시는:
mlnx_qos ...
형태인데, 이것은 NVIDIA/Mellanox NIC 기준임. (MinIO AIStor Documentation)
현재 환경은:
Intel E810
↓
ice
↓
irdma
이므로 Intel E810에서 사용하는 DCB/PFC/ECN 설정 방법으로 변환해야 함.
즉:
MinIO 문서
│
├── ConnectX example
│
└── 개념을 Intel E810에 맞게 적용
해야 함.
이 부분은 상당히 중요함.
이 부분은 이전에 질문했던 내용과 연결됨.
MinIO의 최신 문서는 RoCE inter-node RDMA에 대해 lossless fabric이 필요하다고 명확하게 설명하고 있음.
특히:
PFC
+
DCQCN
+
ECN/RED
을 end-to-end로 구성해야 함. (MinIO AIStor Documentation)
따라서 현재 구조가:
GPU Node
E810
│
│ RoCEv2
▼
Switch
│
│ RoCEv2
▼
AIStor Node
E810
라면:
GPU Node E810
│
├── PFC priority
├── DSCP
└── ECN/DCQCN
│
▼
Switch
│
├── PFC
├── lossless buffer
└── ECN/RED
│
▼
AIStor E810
│
├── PFC priority
├── DSCP
└── ECN/DCQCN
로 맞춰야 함.
GPU node만 PFC를 설정하고 AIStor node나 switch를 설정하지 않는 것은 의미가 없음.
AIStor RDMA build를 사용한다면 inter-node RDMA를 명시적으로 활성화해야 함.
/etc/default/minio에:
MINIO_RDMA_INTERNODE=on
을 설정함.
그리고 AIStor cluster의 모든 node에 동일하게 설정해야 함. AIStor 문서에서 이 설정은 모든 node에 동일하게 적용하도록 명시하고 있음. (MinIO AIStor Documentation)
/etc/minio/config.env가 아님이것은 꼭 기억해두는 것을 권장함.
AIStor RDMA 관련 설정은:
/etc/default/minio
에 넣는 것이 권장됨.
특히:
MINIO_RDMA_POOL_COUNT
MINIO_RDMA_POOL_BUF_SIZE
MINIO_RDMA_MIN_SIZE
MINIO_RDMA_CONCURRENCY
등은 초기화 과정에서 읽기 때문에 /etc/minio/config.env에 넣으면 너무 늦게 읽혀 효과가 없을 수 있음. AIStor 문서에서 RDMA 설정을 /etc/default/minio에 통일하도록 명시하고 있음. (MinIO AIStor Documentation)
우선은 최소 설정으로 시작하는 것을 권장함.
sudo vi /etc/default/minio
추가:
MINIO_RDMA_INTERNODE=on
그리고 필요하면:
MINIO_RDMA_PEER_PORT=5555
를 사용함.
AIStor inter-node RDMA의 기본 peer port는 TCP 5555임. 해당 port는 AIStor cluster node 사이에서만 열어야 함. (MinIO AIStor Documentation)
예:
AIStor node 01
│
│ TCP 5555
▼
AIStor node 02
RHEL 계열에서는 RDMA build 설치 시 다음 계열 dependency가 필요함.
libibverbs
rdma-core
numactl-libs
AIStor RDMA package가 관련 runtime dependency를 요구함. (MinIO AIStor Documentation)
설치 후:
ldd /usr/local/bin/minio.rdma | \
grep -E 's3rdma|p2p_rdma|ibverbs|rdmacm'
를 수행해서 not found가 없는지 확인함.
RDMA 환경변수는 startup 시점에 읽음.
따라서:
systemctl restart minio
가 필요함. (MinIO AIStor Documentation)
그리고:
systemctl status minio
확인함.
이 부분이 질문하신 환경에서 가장 중요함.
AIStor 문서상 S3 over RDMA를 사용하는 경우:
GPU
+
GPUDirect RDMA
+
PCIe peer-to-peer DMA
+
NVIDIA driver 470+
+
RDMA-capable NIC
조건이 필요함. (MinIO AIStor Documentation)
따라서 만약 목표가:
vLLM
↓
GPU memory
↓
GPUDirect RDMA
↓
E810
↓
RoCE
↓
AIStor
라면 AIStor server node에 GPU가 있어야 하는 것은 아님.
여기서 AIStor 문서의 S3-over-RDMA 구조를 정확하게 이해해야 함.
Client GPU
│
│ GPUDirect RDMA
▼
Client NIC
│
│ RoCE
▼
AIStor NIC
│
▼
AIStor Server
즉 GPU가 필요한 쪽은 S3 client/application side임.
AIStor node는 RDMA-capable NIC를 가지고 있으면 됨.
현재 말씀하신 구조:
Compute K8s
│
┌─────┴─────┐
│ GPU Node │
│ B300 × 8 │
│ Intel E810│
└─────┬─────┘
│
RoCEv2
│
┌────▼─────┐
│ Switch │
└────┬─────┘
│
RoCEv2
│
┌─────▼─────┐
│ AIStor K8s│
│ │
│ E810 │
│ E810 │
└───────────┘
로 가져가는 것이 가능함.
GPU node를 AIStor Storage K8s cluster에 넣어야 하는 구조는 아님.
현재:
GPU Node
bond0 → external
bond1 → K8s internal
이고 AIStor도:
AIStor Node
bond0 → external
bond1 → K8s/internal
이라면:
bond1
├── Cilium/K8s traffic
├── AIStor traffic
└── RoCEv2
가 같이 흐르게 됨.
기술적으로는 가능하지만 AIStor 최신 문서는 RoCE inter-node RDMA에 lossless fabric을 요구함. 특히 AIStor의 erasure coding all-to-all write pattern에서 incast가 발생하기 때문에 PFC/ECN이 중요하다고 명시함. (MinIO AIStor Documentation)
따라서 현재처럼 bond1을 공유한다면:
bond1
│
├── 일반 K8s traffic
│ └── Best Effort
│
└── RoCEv2
└── DSCP 26
↓
Priority 3
↓
PFC
처럼 RoCE traffic class만 lossless 처리하는 설계가 적절함.
이 부분도 최신 문서에서 상당히 유용한 기능임.
AIStor의 MINIO_RDMA_INTERNODE_TRAFFIC_CLASS는 기본값 0일 때 host의 DCB 설정을 읽어서 PFC-enabled priority와 DSCP mapping을 자동으로 찾는 방식을 지원함. (MinIO AIStor Documentation)
즉 우리가 이야기했던:
RoCE
↓
Priority 3
↓
PFC
를 host에서 제대로 구성하면 AIStor가 그 정보를 읽어 사용할 수 있음.
그래서 처음부터:
MINIO_RDMA_TRAFFIC_CLASS=26
같이 무조건 hard-code할 필요는 없음.
특히 문서상 MINIO_RDMA_INTERNODE_TRAFFIC_CLASS=0은 자동 detection 의미가 있음.
다만 MINIO_RDMA_TRAFFIC_CLASS와 MINIO_RDMA_INTERNODE_TRAFFIC_CLASS는 용도가 다르므로 혼동하면 안 됨. 전자는 명시적인 DSCP/ToS 값을 지정하는 advanced setting이고, 후자는 inter-node traffic의 자동 detection/override 용도임. (MinIO AIStor Documentation)
처음에는 default로 시작하는 것을 추천함.
AIStor에는 다음과 같은 tuning parameter가 있음.
MINIO_RDMA_POOL_COUNT
MINIO_RDMA_POOL_BUF_SIZE
MINIO_RDMA_MIN_SIZE
MINIO_RDMA_CONCURRENCY
MINIO_RDMA_INTERNODE_MAX_WRITES_PER_PEER
기본값 예:
| Parameter | 기본값 | 의미 |
|---|---|---|
POOL_COUNT | 256 | RDMA buffer pool |
POOL_BUF_SIZE | 64 MiB | buffer 크기 |
MIN_SIZE | 1 MiB | 이보다 작으면 TCP |
CONCURRENCY | 512 | 동시 RDMA transfer |
MAX_WRITES_PER_PEER | 32 | peer별 동시 write |
AIStor 문서에서도 기본값으로 시작한 뒤 fabric characterization을 수행하면서 조정하는 방식을 권장함. (MinIO AIStor Documentation)
특히 중요한 것이 memory임.
기본 pool 설정만으로도 node당 상당한 locked memory가 필요하며, POOL_COUNT × POOL_BUF_SIZE에 해당하는 buffer가 물리 메모리에 pin됨. 따라서 memlock 제한을 충분히 확보해야 함. (MinIO AIStor Documentation)
따라서 현재 AIStor node가 RHEL 10.2라면 다음을 확인하는 것을 권장함.
# OS
cat /etc/redhat-release
# Kernel
uname -r
# NIC
ethtool -i <E810-interface>
# RDMA
rdma link
ibv_devinfo
# Module
lsmod | grep -E 'ice|irdma|ib_core|ib_uverbs|rdma_cm'
# DCB
dcb app show
dcb pfc show
# Network
ip addr
ip route
# AIStor
systemctl status minio
# AIStor binary
which minio
그리고:
ldd /usr/local/bin/minio.rdma | \
grep -E 's3rdma|p2p_rdma|ibverbs|rdmacm'
확인함.
현재 환경에서는 처음부터 모든 tuning을 넣지 않고 다음과 같이 3단계로 진행하는 것이 좋음.
AIStor 모든 node:
RDMA-capable E810
+
irdma
+
RDMA build
+
MINIO_RDMA_INTERNODE=on
+
TCP 5555
구성함.
E810
+
PFC priority
+
DCQCN
+
Switch ECN/RED
+
Lossless buffer
구성함.
B300
+
NVIDIA Driver
+
GPUDirect RDMA
+
E810
+
RoCEv2
+
AIStor RDMA
순으로 검증함.
현재 프로젝트에서는 이 둘을 반드시 별개의 테스트로 분리하는 것을 권장함.
AIStor Node A
│
│ RDMA
▼
AIStor Node B
GPU가 필요 없음.
AIStor erasure shard를 node 간 이동할 때 사용함. MINIO_RDMA_INTERNODE=on으로 활성화함. (MinIO AIStor Documentation)
B300 GPU
│
│ GPUDirect RDMA
▼
GPU Node E810
│
│ RoCEv2
▼
AIStor E810
│
▼
AIStor
GPU memory를 직접 RDMA 대상으로 사용하는 경로임.
현재 B300 + vLLM 환경에서 우리가 최종적으로 확인해야 하는 것은 사실상 B가 더 중요함.
| 구분 | 필요 여부 | 현재 환경 |
|---|---|---|
| E810 RDMA-capable NIC | 필수 | 있음 |
ice | 필수 | 확인 필요 |
irdma | 필수 | 있음/확인됨 |
rdma-core | 필수 | 확인 필요 |
libibverbs | 필수 | 확인 필요 |
rdma_cm | 필수 | 확인 필요 |
| RoCEv2 | 필수 | 구성 필요 |
| PFC | Inter-node RDMA production 필수 | 구성 필요 |
| ECN/DCQCN | 권장/사실상 필수 | 구성 필요 |
| Switch lossless profile | 필수 | 구성 필요 |
| AIStor RDMA build | 필수 | 확인 필요 |
MINIO_RDMA_INTERNODE=on | Inter-node RDMA 필수 | 추가 필요 |
| TCP 5555 | 기본 peer port | Firewall 확인 |
| memlock | 필요 | 확인/조정 필요 |
| GPUDirect RDMA | S3-over-RDMA에 필요 | GPU client 측 구성 |
| AIStor node GPU | 불필요 | 필요 없음 |
| Multus | AIStor RDMA 자체에는 필수 아님 | 우선 불필요 |
| NVIDIA Network Operator | AIStor node에는 필수 아님 | E810/irdma 기반으로 별도 검토 |
네, AIStor 서버 쪽에도 꽤 중요한 추가 구성이 필요함. 특히 현재까지 이야기했던 구성에서 빠지면 안 되는 것은 다음 4가지임.
① AIStor RDMA build
↓
② E810 + irdma + RDMA userspace
↓
③ RoCEv2 Lossless fabric
PFC + ECN/DCQCN + Switch configuration
↓
④ MINIO_RDMA_INTERNODE=on
그리고 GPU Direct RDMA/S3-over-RDMA를 하려면 GPU node 쪽에서 GPUDirect RDMA를 별도로 구성하고 검증해야 함.
따라서 현재 아키텍처에서는 GPU Operator + Network Operator만 설치하고 끝나는 것이 아니라, AIStor Storage K8s의 각 AIStor node도 RDMA build + E810/irdma + lossless RoCE + AIStor RDMA configuration까지 맞춰야 함. AIStor 공식 문서도 RDMA가 구성되지 않은 node는 오류 없이 TCP로 동작할 수 있다고 명시하고 있어서, 단순히 서비스가 정상 기동된 것만으로 RDMA가 동작한다고 판단하면 안 됨. (MinIO AIStor Documentation)
그리고 한 가지 중요한 점은 MinIO 공식 문서의 현재 lossless-fabric 예제가 Mellanox mlnx_qos 기반이라는 것임. 따라서 사용자 환경의 Intel E810에서는 그 부분을 그대로 복사하지 않고 Intel E810의 dcb/devlink/ice 기반 설정으로 변환해서 적용해야 함. 이 부분은 다음 단계에서 RHEL 10.2 + Intel E810 + bond1(LACP) + Cilium + AIStor를 전제로 실제 명령어 수준의 GPU Node와 AIStor Node 양쪽 설정을 하나의 E2E 구성도로 맞춰 작성하는 것이 좋음. (MinIO AIStor Documentation)