HPC & GPU Engineering/AI Infrastructure Engineer

[HPC/GPU 클러스터 운영 Linux Deep Dive 3편] NUMA 아키텍처와 CPU 바인딩 전략 – 메모리 접근 지연 최소화로 성능 극대화

ygtoken 2025. 8. 12. 10:58
728x90

NUMA 아키텍처의 필요성

 
HPC(High Performance Computing)나 GPU 연계 서버에서는 CPU와 메모리 간의 대역폭, 지연 시간(latency)이 전체 워크로드 성능에 직접적인 영향을 미칩니다.
NUMA(Non-Uniform Memory Access)는 이러한 고성능 서버에서 흔히 사용되는 메모리 아키텍처로, 각 CPU 소켓이 자신만의 메모리 뱅크를 가지고 있고, 로컬 메모리 접근은 빠르지만 다른 소켓의 메모리를 접근할 때는 QPI/UPI 링크를 거쳐야 하므로 지연 시간이 증가합니다.
 
단일 NUMA 노드에서 모든 작업을 처리하면 지연을 최소화할 수 있지만, HPC 환경에서는 멀티 노드 구조가 일반적이어서 **CPU 바인딩(CPU Affinity)**과 메모리 바인딩(Memory Binding) 전략이 필수적입니다.
 
 

NUMA 구조와 CPU 바인딩 기법

 
아래 표는 2소켓(각 8코어) NUMA 서버의 구조 예시입니다.

NUMA 노드CPU 코어 범위로컬 메모리 용량원격 메모리 접근 지연
Node 0CPU0–CPU7128 GB약 70~80ns
Node 1CPU8–CPU15128 GB약 110~130ns

 
NUMA 환경에서 효율적인 자원 활용을 위해서는 다음과 같은 바인딩 방법을 사용합니다.

  • CPU 바인딩: 특정 코어나 NUMA 노드에 프로세스를 고정
  • 메모리 바인딩: 프로세스 메모리 할당을 특정 NUMA 노드로 제한
  • Interleaving: 여러 노드에 균등하게 메모리를 분산하여 할당
# NUMA 노드와 CPU 매핑 확인
numactl --hardware

# PID 1234 프로세스를 Node 0에 바인딩
numactl --cpunodebind=0 --membind=0 --pid=1234

 

바인딩 전략과 데이터 흐름

NUMA 환경에서 프로세스와 메모리 배치가 잘못되면 **원격 메모리 접근(Remote Memory Access)**이 증가하여 성능이 급격히 저하됩니다.
예를 들어, Node 0에서 실행되는 프로세스가 Node 1의 메모리를 지속적으로 읽는다면, UPI 링크의 병목과 추가 지연이 발생합니다.
 
효율적인 HPC 워크로드를 위해서는 다음과 같은 전략을 사용합니다.
 

  1. 프로세스와 데이터의 위치 일치: 계산 스레드가 접근하는 데이터는 같은 NUMA 노드에 배치
  2. MPI Rank와 NUMA 매핑: MPI 기반 병렬 처리 시 각 Rank를 NUMA 노드별로 할당
  3. GPU 연계 시 NUMA 인식: GPU가 PCIe를 통해 특정 NUMA 노드에 물리적으로 연결되어 있는 경우, 해당 노드에서만 CPU–GPU 간 데이터 전송을 처리

 

그림 1) NUMA 로컬/원격 메모리 접근과 GPU 바인딩 (직관형)

 

실제 적용 사례

SK hynix 내부 AI 트레이닝 클러스터에서, 멀티 소켓 CPU와 8개의 GPU가 장착된 서버를 운영할 때 CPU 바인딩 최적화를 적용했습니다.
초기에는 모든 MPI 프로세스가 OS 기본 스케줄링에 의해 무작위 코어에 배치되어, 로컬 메모리 접근 비율이 60% 수준에 불과했습니다.
이를 NUMA 바인딩으로 조정하여 GPU별로 연결된 NUMA 노드의 CPU와 메모리를 고정한 결과, 학습 속도가 평균 15~20% 향상되었습니다.

# OpenMPI 실행 시 NUMA 바인딩 예시
mpirun --bind-to numa --map-by numa:PE=4 ./train_model

 

장점과 단점

장점

  • 성능 향상: 메모리 지연 감소로 HPC/GPU 워크로드 처리 속도 증가
  • 자원 예측 가능성: 동일한 코어·메모리 환경에서 재현성 높은 성능
  • 네트워크 부하 감소: 원격 메모리 접근 감소로 UPI/QPI 트래픽 절감

단점

  • 유연성 감소: 특정 자원 고정으로 스케줄링 유연성이 낮아짐
  • 설정 복잡성: NUMA 토폴로지와 워크로드 특성을 잘 이해해야 함
  • 잘못된 바인딩 시 역효과: 과도한 고정으로 일부 노드가 과부하될 수 있음

 
 

실무 팁과 주의사항

  • lscpu, numactl, hwloc-ls 등을 사용해 NUMA 구조를 먼저 파악
  • CPU–GPU 물리 연결 관계를 nvidia-smi topo -m으로 확인
  • 컨테이너 환경(Kubernetes)에서는 cpuManagerPolicy=static과 TopologyManager를 활용
  • 성능 측정 전후로 perf stat, numastat을 사용해 로컬/원격 메모리 비율 모니터링
  • HPC Job Scheduler(Slurm)에서는 --cpu-bind, --mem-bind 옵션을 적극 활용
# Slurm에서 NUMA 바인딩 예시
srun --cpu-bind=cores --mem-bind=local ./hpc_task

 

정리하며

NUMA 아키텍처는 현대의 멀티 소켓 HPC 서버와 GPU 노드에서 피할 수 없는 구조이며, 이를 잘 이해하고 CPU/메모리 바인딩 전략을 적용하는 것은 성능 최적화의 핵심입니다.
특히 AI 트레이닝, CFD, 빅데이터 분석처럼 메모리 접근 패턴이 중요한 워크로드에서는 바인딩 전략 하나만으로도 두 자릿수 성능 향상을 경험할 수 있습니다.
운영자는 NUMA 토폴로지를 숙지하고, 워크로드 특성에 맞춘 바인딩을 통해 HPC 환경의 자원을 최대한 효율적으로 활용해야 합니다.
 

 
728x90