| 구분 | 내용 |
|---|---|
| GPU Node NIC | ConnectX-6 (외부망), Intel E810 (private망 예정, 미구성) |
| 기존 Compute Cluster | bond1(내부망)로 연결 |
| 기존 Storage Cluster | bond1(내부망)로 연결 |
| 목표 | GPU Node를 즉시 join하지 않고, 단계적 검증 후 연동 |
주의: ConnectX-6는 Mellanox/NVIDIA 계열로 RDMA/GPUDirect(RoCE, GPUDirect Storage, NCCL 가속)에 최적화된 카드인데 현재 외부망에 물려 있고, private망(스토리지/내부 통신 예정 구간)에는 Intel E810이 붙어 있습니다. E810도 RoCEv2를 지원하지만 GPUDirect RDMA/GPUDirect Storage 생태계 성숙도는 ConnectX 계열보다 낮습니다. Phase 3~5에서 스토리지 처리량이나 멀티 GPU 통신 성능이 기대치에 못 미치면 NIC 역할을 바꾸는 것(케이블 재배선)을 재검토 대상으로 열어두는 것을 권장합니다.
Private망이 없는 상태이므로, "당장 GPU 노드를 어떻게 접근/제어할 것인가"부터 정해야 합니다.
구성 단계
체크 포인트 (테스트 아님, 의사결정)
구성 단계
1. 하드웨어 인벤토리 확인 (CPU, RAM, GPU 개수/모델, NIC, NVMe/디스크 구성)
2. BMC/IPMI(iDRAC, iLO 등) 원격 관리 접속 확인, FW 버전 점검
3. BIOS 설정 점검: SR-IOV, VT-d/IOMMU, NUMA 설정, Above 4G Decoding, Power Profile(Performance 모드)
4. OS 설치 (기존 cluster와 동일 배포판/커널 버전 맞추는 것 권장)
5. NIC 펌웨어/드라이버 버전 확인 및 최신화 (ConnectX-6는 MFT/mlxconfig, E810은 ice 드라이버)
6. 커널 파라미터 기본 설정: hugepages, net.core.rmem/wmem, vm.swappiness 등 baseline
7. 시간 동기화(NTP/chrony), 로컬 계정/패스워드 정책, OS 보안 패치 baseline 적용
테스트
구성 단계
1. NVIDIA Driver 설치 (기존 compute cluster에 GPU가 있다면 버전 정합성 확인, 없다면 vLLM이 지원하는 CUDA 버전 기준으로 driver 선정)
2. CUDA Toolkit 설치 (필요 시), nvidia-persistenced persistence mode 활성화
3. Multi-GPU 노드라면 NVLink 여부 확인 후 nvidia-fabricmanager 설치/활성화
4. NVIDIA Container Toolkit 설치 (컨테이너로 vLLM 운용 예정이라면 필수)
5. MIG(Multi-Instance GPU) 사용 여부 결정 및 설정 (vLLM 운용 방식에 따라)
6. DCGM(Data Center GPU Manager) 설치 — 모니터링/burn test용
테스트
nvidia-smi 인식 GPU 개수/모델/드라이버 버전 확인nvidia-smi topo -m 으로 GPU-GPU, GPU-NIC 간 PCIe/NVLink topology 확인lspci -vv, x16 Gen4/5 여부 — 절반만 잡히는 경우 흔함)nvidia-smi -q -d ECC)gpu-burn, 또는 dcgmi diag -r 3) — 최소 30분~수 시간, 클럭/온도/전력 스로틀링 여부 관찰nccl-tests의 all_reduce_perf 등)로 GPU간 대역폭 확인구성 단계
1. Python 가상환경/conda 또는 컨테이너 이미지로 vLLM 설치 (CUDA 버전과 vLLM 요구 버전 호환성 확인 필수)
2. 모델 저장 경로 결정 — 이 시점엔 storage cluster 연동이 안 된 상태이므로 우선 로컬 NVMe 캐시로 모델 다운로드/테스트
3. vLLM API 서버 기동 (OpenAI-compatible endpoint) 및 포트/방화벽 오픈 정책 수립
4. Compute cluster → GPU node 호출 경로 확보:
테스트
구성 단계
1. Storage cluster 접근 프로토콜 확인 (NFS / Ceph(RBD, CephFS) / Object storage(S3 호환) / 병렬 파일시스템 등 — 프로토콜에 따라 구성이 크게 달라지므로 우선 확인 필요)
2. Private망 구성이 완료되었다면 E810을 통해 storage 네트워크 경로 연결, 미완료 시 임시 경로(외부망) 사용 여부 결정
3. Mount point / 클라이언트 패키지 설치, 인증(Kerberos, cephx 등) 설정
4. 네트워크 튜닝: MTU 일치(Jumbo Frame), RDMA(RoCE) 사용 여부에 따른 설정 (E810의 RoCEv2 지원 활용 시 별도 설정 필요)
테스트
시나리오 기반 테스트
===
RHEL 10부터 Red Hat이 NVIDIA/AMD AI 가속기 드라이버를 자체 Secure Software Supply Chain으로 빌드/서명하여 Extensions 리포지토리로 제공합니다. 이 방식을 쓰면:
rhel-drivers라는 통합 설치 명령 하나로 GPU 감지 + 드라이버 설치가 자동으로 됨 (nvidia-detect 불필요)반면 기존처럼 NVIDIA 공식 CUDA repo(dnf module 방식)로 설치하면, Secure Boot 환경에서는 MOK enroll이 별도로 필요합니다. 두 방법을 아래에 모두 정리하니 환경에 맞게 선택하세요. (데이터센터 GPU + Secure Boot 환경이면 방법 A를 우선 권장합니다.)
참고: 아래 절차는 RHEL 10.1 기준 공개 자료를 기반으로 검증했습니다. RHEL 10.2에서도 동일한 메커니즘(Extensions repo,
rhel-drivers)이 유지되지만, 실제 설치 전subscription-manager repos --list등으로 10.2용 리포지토리 이름이 정확한지 한 번 확인하시길 권장합니다.
# OS/커널 버전 확인
cat /etc/redhat-release
uname -r
# Secure Boot 상태 확인
mokutil --sb-state
# GPU 인식 확인 (PCI 레벨)
lspci -nn | grep -i nvidia
# Subscription 등록 상태 확인
subscription-manager status
dnf update 후 재부팅 권장 — 드라이버 설치 전에 커널을 고정해두는 것이 이후 트러블슈팅에 유리)lsmod | grep nouveau)rhel-drivers)sudo subscription-manager repos --enable=rhel-10-for-x86_64-appstream-rpms
sudo subscription-manager repos --enable=rhel-10-for-x86_64-baseos-rpms
sudo subscription-manager repos --enable=codeready-builder-for-rhel-10-x86_64-rpms
Extensions 리포지토리는 기본 비활성 상태이므로 별도 활성화가 필요할 수 있습니다 (버전에 따라 rhel-drivers 패키지 설치 시 자동으로 요구하는 경우도 있음):
sudo subscription-manager repos --list | grep -i extensions
# 목록에 있는 extensions repo 이름을 확인 후 활성화
sudo subscription-manager repos --enable=<확인된-extensions-repo-이름>
rhel-drivers 설치 및 실행sudo dnf install -y rhel-drivers
sudo rhel-drivers install nvidia
이 명령이 GPU 모델을 자동 감지하여 적합한 커널 모듈 + 유저모드 드라이버를 함께 설치합니다.
sudo reboot
nvidia-smi
정상 설치 시 드라이버 버전, GPU 모델, 온도/전력 정보가 출력됩니다.
Secure Boot 상태에서도 별도 MOK enroll 없이 바로 동작해야 합니다. 만약 nvidia-smi가 "NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver" 를 출력하면 → 아래 트러블슈팅 섹션 참고.
vLLM/CUDA 버전 호환성 때문에 특정 드라이버 버전을 고정해야 하는 경우 이 방법이 더 유연합니다.
sudo dnf install -y kernel-devel-$(uname -r) kernel-headers-$(uname -r) \
gcc make dkms acpid pciutils
sudo dnf config-manager --add-repo \
https://developer.download.nvidia.com/compute/cuda/repos/rhel10/x86_64/cuda-rhel10.repo
# 사용 가능한 드라이버 스트림 확인
sudo dnf module list nvidia-driver
# 최신 버전 설치
sudo dnf module install -y nvidia-driver:latest-dkms
# 또는 특정 버전 고정 (예: 570 브랜치)
sudo dnf module install -y nvidia-driver:570-dkms
sudo dnf module install -y nvidia-driver:latest-open-dkms
DKMS 방식은 빌드 시점에 자체 키로 서명하고, 이 키를 부팅 시 MOK로 enroll해야 커널이 모듈 로드를 허용합니다.
# DKMS가 자동 생성한 키 확인
ls /var/lib/dkms/mok.pub
# MOK enroll (재부팅 후 파란 화면에서 암호 입력하여 최종 승인)
sudo mokutil --import /var/lib/dkms/mok.pub
sudo reboot
재부팅 시 "MOK management" 화면이 뜨면 Enroll MOK → Continue → 암호 입력 → 승인 순서로 진행합니다. 이 과정을 건너뛰면 드라이버가 서명 미검증으로 로드되지 않고 nouveau로 폴백됩니다.
nvidia-smi
lsmod | grep nvidia # 결과 있어야 정상
lsmod | grep nouveau # 결과 없어야 정상
방법 A/B 어느 쪽으로 드라이버를 설치했든 공통:
sudo dnf config-manager --add-repo \
https://developer.download.nvidia.com/compute/cuda/repos/rhel10/x86_64/cuda-rhel10.repo
sudo dnf install -y cuda-toolkit
PATH 설정:
echo 'export PATH=/usr/local/cuda/bin:$PATH' | sudo tee /etc/profile.d/cuda.sh
echo 'export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH' | sudo tee -a /etc/profile.d/cuda.sh
source /etc/profile.d/cuda.sh
검증:
nvcc --version
nvidia-smi에 표시되는 "CUDA Version"은 드라이버가 지원 가능한 최대 CUDA 버전을 의미할 뿐, CUDA Toolkit이 실제 설치됐다는 뜻이 아닙니다.nvcc --version으로 실제 설치 여부를 별도 확인해야 합니다.
GPU node가 멀티 GPU(특히 NVLink 탑재 HGX류) 서버라면 아래 추가 구성이 필요합니다.
sudo systemctl enable --now nvidia-persistenced
nvidia-smi -pm 1
sudo dnf install -y nvidia-fabric-manager
sudo systemctl enable --now nvidia-fabricmanager
systemctl status nvidia-fabricmanager
코어 수가 많은 시스템(대략 256코어 이상)에서는 IOMMU를 끄기보다 pass-through 모드를 권장합니다. /etc/default/grub의 GRUB_CMDLINE_LINUX에 추가:
intel_iommu=on iommu=pt # Intel CPU
amd_iommu=on iommu=pt # AMD CPU
적용 후:
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
sudo reboot
sudo dnf install -y datacenter-gpu-manager
sudo systemctl enable --now nvidia-dcgm
dcgmi discovery -l
Bare-metal 드라이버 설치와는 별개로, vLLM을 컨테이너(Podman)로 띄울 계획이라면 미리 설치해두는 것을 권장합니다.
sudo dnf config-manager --add-repo \
https://nvidia.github.io/libnvidia-container/stable/rpm/nvidia-container-toolkit.repo
sudo dnf install -y nvidia-container-toolkit
# RHEL 기본 컨테이너 런타임인 Podman용 CDI 설정 생성
sudo nvidia-ctk cdi generate --output=/etc/cdi/nvidia.yaml
nvidia-ctk cdi list
검증 (컨테이너 내부에서 GPU 인식 테스트):
podman run --rm --device nvidia.com/gpu=all \
nvidia/cuda:12.4.1-base-ubi9 nvidia-smi
| 증상 | 원인 / 조치 |
|---|---|
nvidia-smi 통신 실패 | 드라이버 커널 모듈 미로드. lsmod \| grep nvidia 확인, dmesg \| grep -i nvidia로 로드 실패 원인 확인 |
| Secure Boot 상태에서 nouveau로 폴백 | 방법 B(DKMS) 사용 시 MOK enroll 누락. mokutil --list-enrolled로 확인 후 재enroll |
| 커널 업데이트 후 드라이버 깨짐 | DKMS 방식은 커널 업데이트마다 재빌드 필요 (dkms status로 확인). 방법 A(precompiled, Red Hat 서명)는 이 이슈가 적음 |
kernel-devel 버전 불일치 오류 | kernel-devel-$(uname -r) 정확히 현재 실행 중인 커널 버전과 일치하는지 확인 |
| PCIe Link Width가 예상보다 낮게 표시 | lspci -vv로 실제 협상된 Link Width/Speed 확인, 슬롯 장착 상태·BIOS 설정(Gen4/5, bifurcation) 점검 |
| ECC 에러 발생 | nvidia-smi -q -d ECC로 카운트 확인, 지속 증가 시 하드웨어 이슈 가능성 → burn test(Phase 2)에서 별도 정밀 검증 필요 |
드라이버 설치 후에는 이전 계획의 Phase 2 (GPU Burn Test)로 이어가면 됩니다:
nvidia-smi topo -m으로 GPU-GPU/GPU-NIC PCIe topology 확인gpu-burn 또는 dcgmi diag -r 3로 burn testnccl-tests로 GPU 간 대역폭 확인===
GPU 노드 온보딩 시나리오를 보니, 핵심 이슈는 "private망이 없는 상태에서 어떻게 안전하게 단계적으로 검증하며 기존 cluster와 연동해 나갈 것인가"로 보입니다. 5단계 계획에 각 단계별 구성/테스트 항목과, 놓치기 쉬운 리스크를 정리한 문서를 만들어 드리겠습니다.가장 눈여겨볼 지점은 ConnectX-6가 외부망에, E810이 private망(스토리지 예정 구간)에 배치되어 있다는 점입니다 — 보통은 반대로(고성능 RDMA 카드를 storage/GPU 통신용 내부망에) 두는 구성이 많아서, Phase 4~5에서 성능 병목이 나오면 이 배치를 재검토 대상으로 열어두시는 게 좋습니다.
문서에는 Phase 0(private망 설계 전 반드시 정해야 할 것들)을 별도로 추가했습니다 — 지금 private망이 없는 상태에서 GPU node에 어떻게 접근/관리할지부터 결정하지 않으면 Phase 1도 시작하기 어렵기 때문입니다.
네, 가능합니다. 다만 "가능하다"와 "그 결과가 최종 프로덕션 성능을 대표한다"는 별개의 문제라서, 전제조건과 한계를 먼저 짚어야 합니다.
외부망(bond0)을 통해 GPU node(ConnectX-6) ↔ AIStor(storage) 간 RDMA/RoCE 테스트는 개념 검증(PoC) 목적으로는 유효합니다. 하지만 최종적으로는 private망(E810)에 배치될 예정이므로, 이 테스트는 "GDS 스택이 정상 동작하는가"를 검증하는 것이지 "E810 private망에서도 같은 성능이 나온다"는 것을 보장하지 않습니다.
네트워크/하드웨어
GPUDirect RDMA / GPUDirect Storage(GDS) 추가 전제조건
nvidia-fs 커널 모듈 및 GDS 지원 드라이버 스택 설치/etc/cufile.json 등 cuFile 설정 완료Step 1 — 순수 RDMA 연결성 테스트 (GPU 배제)
ibv_devinfo, rdma link show로 두 노드에서 RDMA 디바이스 인식 확인ib_write_bw / ib_send_bw (perftest 패키지)로 GPU node ↔ AIStor 노드 간 순수 NIC-to-NIC RDMA 대역폭/지연 측정Step 2 — GPUDirect RDMA (peer-to-peer) 단위 테스트
perftest의 --use-cuda 옵션 또는 gdrcopy 툴로 GPU 메모리 ↔ NIC 간 직접 전송 확인nvidia-smi topo -m으로 GPU와 ConnectX-6 간 PCIe 경로(같은 NUMA 노드/PCIe 스위치 하위인지)도 재확인 — topology가 안 좋으면 GPUDirect 이득이 거의 없습니다.Step 3 — GPUDirect Storage 테스트
gdsio 벤치마크 툴로 실제 AIStor 대상 read/write 테스트Step 4 — 비교 기준선 확보
RHEL 10.2는 비교적 최근 버전이라 최신 설치 절차와 호환성 정보를 확인하고 답변드리겠습니다.RHEL 10 계열은 기존 RHEL 8/9와 드라이버 설치 방식이 꽤 달라졌습니다(Red Hat이 자체 서명한 드라이버를 Extensions 리포지토리로 제공하는 방식이 새로 생김). 두 가지 방법(공식 간소화 방식 vs 전통적인 NVIDIA repo 방식)을 비교해서 문서로 정리해 드리겠습니다.가장 큰 변화는 RHEL 10부터 Red Hat이 자체 서명한 드라이버를 제공한다는 점입니다 — rhel-drivers install nvidia 명령 하나로 Secure Boot 환경에서도 MOK enroll 없이 바로 설치됩니다 (방법 A). 반면 특정 드라이버 버전을 고정해야 하거나(vLLM/CUDA 호환성 이슈 등) 좀 더 세밀한 제어가 필요하면 기존 NVIDIA repo + DKMS 방식(방법 B)을 쓰되, 이땐 Secure Boot 상태에서 MOK enroll을 수동으로 해줘야 합니다.
멀티 GPU(NVLink/HGX) 서버라면 persistence mode, Fabric Manager, IOMMU pass-through 설정도 함께 해두시는 게 이후 Phase 2 burn test·NCCL 테스트에서 안정적인 결과를 얻는 데 도움이 됩니다.