
NUMA 바인딩부터 인덱스 최적화까지, 온프레미스 Vector DB 인프라 사이징 및 성능 최적화 실전 가이드
토스증권 Data Infra 팀이 대규모 벡터 검색 서비스를 위해 Milvus를 도입하면서 진행한 하드웨어 사이징 및 성능 최적화 경험을 다룹니다. 검색 품질(Recall)을 손상시키지 않고 CPU 연산 및 NUMA 메모리 구조를 최적화하여 처리량을 41% 높인 실전 튜닝 과정을 상세히 설명합니다.
Vector DB 도입을 검토 중이거나, 대규모 벡터 검색 환경에서 서버 자원 산정 및 CPU/메모리 성능 병목으로 고민하는 인프라 및 백엔드 엔지니어에게 일독을 권합니다.
토스증권에서 벡터 검색 워크로드를 위한 Milvus 인프라 구축 시, 임베딩 모델 차원, 검색 품질 목표, 데이터 갱신 빈도 등 서비스별 다양한 조건에 맞춘 적정 물리 서버 자원(CPU/메모리) 규모 산정 기준이 필요했습니다.
LAION-100M 데이터셋을 활용하여 다양한 인덱스(HNSW, SQ8 등)의 성능을 비교하고, 검색을 담당하는 QueryNode의 CPU thread affinity 및 NUMA(Non-Uniform Memory Access) 메모리 배치를 최적화하였습니다.
recall@10 0.95 이상의 검색 품질 기준을 유지하면서, CPU 및 메모리 배치 개선만으로 동일 서버 자원 내 검색 처리량(QPS)을 41% 향상시키고 정밀한 인프라 사이징 기준을 수립했습니다.
Trade-off
SQ8 양자화 적용 시 메모리 사용량은 대폭 절감되나 오차로 인한 결과 정확도 저하 가능성이 존재하며, CPU 및 NUMA 고정 배치는 서버 하드웨어 구조에 의존적인 세밀한 설정 관리가 요구됩니다.
임베딩 모델이 생성한 고차원 벡터 간의 거리를 측정하여 유사한 의미를 지닌 데이터를 탐색하는 기술입니다. 데이터 수량이 많을 때는 근사 최근접 이웃(ANN) 알고리즘을 사용해 탐색 범위를 줄임으로써 정밀도를 유지하며 빠르게 결과를 반환합니다.
HNSW는 계층적 그래프 구조로 벡터를 연결해 빠른 ANN 검색을 가능하게 하는 대표적인 인덱스 알고리즘입니다. SQ8(Scalar Quantization)은 32비트 부동소수점 벡터 데이터를 8비트로 압축하여 메모리 점유율을 대폭 낮춰주는 양자화 기법입니다.
NUMA는 프로세서마다 독립된 메모리 버스를 할당하는 멀티소켓 CPU 아키텍처입니다. Thread Affinity(CPU 바인딩)는 프로세스나 쓰레드를 특정 CPU 코어에 고정하여 L1/L2/L3 캐시 히트율을 극대화하고 소켓 간 원격 메모리 접근으로 인한 지연을 최소화합니다.