스케일러블 벡터 검색을 위한 SPIRE: 정확도 보존 인덱스 설계
초록
SPIRE는 대규모 Approximate Nearest Neighbor Search(ANNS)를 위해 파티션 밀도를 기반으로 최적의 파티션 크기를 선택하고, 정확도를 유지하면서 다계층 인덱스를 재귀적으로 구축한다. 8 억 벡터·46노드 환경에서 기존 시스템 대비 최대 9.64배 높은 처리량과 낮은 지연시간을 달성한다.
상세 분석
본 논문은 대규모 벡터 검색에서 ‘지연‑처리량‑정확도’ 삼각형의 균형을 맞추는 것이 핵심 과제임을 명확히 제시한다. 기존 그래프 기반 인덱스(HNSW 등)는 높은 정확도를 제공하지만, 샤딩 시 크로스‑노드 링크가 폭발적으로 증가해 지연이 크게 늘어난다. 반면 파티셔닝 기반 계층 구조는 크로스‑노드 통신을 줄이지만, 파티션 경계에 위치한 벡터들의 표현 손실(피델리티 로스) 때문에 정확도를 유지하려면 다수의 파티션을 탐색해야 하며, 이는 벡터 읽기 비용과 CPU·IO 부하를 급증시킨다.
SPIRE는 두 가지 설계 결정을 통해 이 딜레마를 해소한다. 첫 번째는 균형 파티션 밀도(D) 개념이다. 파티션 밀도 D = #partitions / #vectors 로 정의하고, 실험을 통해 D가 일정 임계값(≈0.1) 이하로 떨어지면 파티션당 벡터 수가 급증해 읽기 비용이 비선형적으로 증가함을 확인한다. 따라서 “읽기 비용이 그래프 인덱스 수준과 비슷해지는 직전”의 D 값을 선택해 파티션을 구성한다. 이 지점에서는 파티션당 벡터 수가 충분히 작아 읽기 비용이 억제되고, 동시에 크로스‑노드 홉 수도 감소한다.
두 번째는 정확도 보존 재귀적 인덱스 구축이다. 선택된 균형 파티션을 기반으로 하위 레벨(leaf)에서 클러스터링을 수행하고, 각 파티션의 센터(centroid)를 상위 레벨의 데이터 포인트로 삼아 동일한 파티션 밀도 기준을 재귀 적용한다. 이렇게 하면 최상위 레벨은 메모리 제한 내에 들어가는 작은 그래프(보통 수천 개의 센터)만을 메모리에 유지하고, 하위 레벨은 SSD에 저장된 파티션 객체 형태로 관리된다. 검색 시에는 루트 그래프에서 m개의 가장 가까운 센터를 선택하고, 해당 센터가 가리키는 파티션을 병렬로 읽어 다음 레벨로 내려가는 방식을 반복한다. 레벨 수가 로그‑스케일로 제한되므로 네트워크 라운드‑트립 수가 일정하게 유지돼 지연이 예측 가능하고, 각 레벨에서 읽는 벡터 수는 균형 파티션 덕분에 제한된다.
시스템 구현 측면에서 SPIRE는 6 000줄 규모의 C++ 코드로 구성됐으며, 메모리 내에 루트 그래프만 복제하고 나머지는 SSD와 분산 객체 스토어에 의존한다. 이는 컴퓨팅 레이어를 무상태(stateless)하게 만들어 장애 복구와 탄력적 확장이 용이하도록 설계되었다. 실험에서는 SIFT‑100M, SP‑ACEV‑100M 등 다양한 데이터셋에 대해 1 억8 억 규모, 546노드 환경을 테스트했으며, 평균·p99 지연시간은 10~20 ms 이하, 처리량은 기존 시스템 대비 2‑9배 향상되었다. 특히 SSD I/O가 포화 상태에서도 네트워크와 CPU 사용률은 각각 30 %·40 % 이하에 머물러 추가 확장 여력이 충분함을 입증한다.
핵심 인사이트는 (1) 파티션 밀도라는 단일 지표로 읽기 비용과 크로스‑노드 비용 사이의 비선형 트레이드오프를 정량화하고, (2) 이 지표를 기반으로 한 재귀적 계층 설계가 정확도 손실 없이 스케일을 선형적으로 확장시킨다. 이러한 접근은 기존 단일‑레벨 파티셔닝 방식이 겪던 “읽기 폭증”과 “크로스‑노드 지속” 문제를 동시에 해결한다는 점에서 의미가 크다.
댓글 및 학술 토론
Loading comments...
의견 남기기