핵심 요약
토스가 Milvus 기반 벡터 검색의 자원 사이징 기준을 구축하기 위해, 1억 건 LAION-100M 데이터의 768차원 벡터를 대상으로 벡터 인덱스(HNSW/IVF/DISKANN)와 SQ8 양자화를 비교했습니다. Milvus 2.6 아키텍처의 StreamingNode/QueryNode/DataNode 구성을 활용하고, 3대 전용 서버에서 recall@10 ≥ 0.95를 목표로 실험했습니다. NUMA 최적화를 통해 QPS를 크게 끌어올리고 지연을 줄였습니다.
구현 방법
- Milvus 2.6 아키텍처: StreamingNode(실시간 적재/검색), QueryNode( sealed 데이터 검색), DataNode(인덱스 빌드/컴팩션) 분리 운영
- 데이터셋 및 벡터 차원: LAION-100M, 768차원(또는 사례로 1024차원 비교)
- 인덱스/검색 구성: HNSW_SQ8, IVF_SQ8, DISKANN 등과 SQ8 압축 처리
- 하드웨어: 토스의 전용 서버 3대, Intel Xeon Silver 4516Y+ 2소켓 구성, 서버당 물리 코어 48개/메모리 512GB, QueryNode 48 vCPU/256GiB
- NUMA 최적화: CPU/메모리의 NUMA 로컬 배치(QueryNode CPU와 인덱스 메모리 NUMA Node 0 배치), CPUManager/MemoryManager/TopologyManager 조합
- 측정 방식: recall@10 ≥ 0.95를 기준으로 QPS 및 지연시간 비교
주요 결과
- recall@10 ≥ 0.95를 만족하는 설정에서 QPS가 316까지 상승하는 등 품질과 처리량을 함께 달성
- HNSW_SQ8의 replica당 메모리 약 114GB 사용
- NUMA 배치 전후로 remote DRAM 비율 약 50%→0.8%로 감소, IPC 0.37→0.55, QPS 405→572(+41%), p99 지연 3.94s→2.04s
- 1024차원 벡터 1억 건은 벡터 값만으로 약 410GB 필요, 이를 고려한 메모리 설계가 필요
- 자원 가변성에 맞춘 시뮬레이터로 필요한 서버 수를 예측하고 운영 규모를 산정하는 기반을 마련


