Pinterest, 수백억 벡터 검색에 양자화 도입…HNSW 메모리 부담 낮춘다

InfoQ 中文18일 전조회 15

Pinterest 엔지니어링 팀이 자사 분산 검색 플랫폼 '마나스(Manas)'의 벡터 인덱스를 양자화 기반으로 재설계했다고 밝혔다. 마나스는 80개 클러스터에 배포돼 홈 피드, 검색, 관련 핀, 광고, 알림 등 핵심 노출 영역을 뒷받침하며 수백억 개 임베딩을 처리한다. 회사 측은 코퍼스가 수십억 건 규모로 빠르게 커지면서 메모리 점유가 큰 HNSW 같은 전통적 알고리즘이 비용, 하드웨어 자원 배분, 인프라 유연성 측면에서 부담이 커졌다고 설명했다.

Pinterest는 1억 개 임베딩으로 구성된 GraphSage 데이터셋에서 스칼라 양자화(SQ)와 곱 양자화(PQ)를 구현해 비교했다. PQ는 부동소수점 벡터를 압축된 바이트 코드로 바꿔 HNSW 인덱스를 74%, IVF(역색인 파일) 인덱스를 93% 줄였고, 이때 재현율은 70~80% 구간이었다. SQ는 벡터 성분을 저비트 정수로 압축해 HNSW 59%, IVF 75% 축소를 달성했으며 여러 워크로드에서 재현율 90% 이상을 유지했다는 것이 회사 측 설명이다.

오프라인 벤치마크 수치는 두 방식의 성격 차이를 뚜렷하게 보여준다. 기준 HNSW 인덱스는 121GB에 Recall@100 93.72%, 초당 302.5건(QPS)이었다. HNSW에 PQ를 적용하면 32GB, Recall@100 77.25%, 276.4 QPS로 처리량 감소가 9% 수준에 그쳤고, HNSW에 SQ를 적용하면 50GB, Recall@100 92.92%, 305.2 QPS로 오히려 처리량이 소폭 늘었다. IVF 계열에서는 기준 인덱스가 97GB, Recall@100 91.69%, 1659.8 QPS였고, IVF+PQ는 6.8GB, Recall@100 76.00%, 1747.9 QPS, IVF+SQ는 25GB, Recall@100 95.71%, 1588.8 QPS를 기록했다.

저비트 표현은 거리 계산 전에 디코딩이 필요해 CPU 병목을 만든다. 팀은 SIMD 내장 함수로 선형 스케일 SQ를 구현해 쿼리에 드는 연산 자원을 10~15% 줄였다고 밝혔다. 온라인 실험에서는 SQ와 PQ를 실제로 배포해 프로덕션 워크로드의 서빙 비용을 20~30% 낮췄다.

메모리 비용을 더 줄이기 위해 인덱스 저장소를 SSD로 옮기는 작업도 진행됐다. Pinterest는 DiskANN과 SPANN을 비교 평가했고, PQ를 결합한 SPANN이 DiskANN 대비 처리량 3배, 지연 시간 3분의 1을 기록하면서 재현율 하락은 5%에 그쳤다고 전했다. Pinterest가 구성한 SPANN 구조는 관련 파티션을 찾기 위한 작고 빠른 중심점(centroid) 인덱스만 메모리에 두고, 큰 역색인 리스트는 SSD에 저장해 IOPS를 최적화하는 방식이다. 50억 개 이상 임베딩을 인덱싱한 핀 추천 평가에서 이 구조는 전부 메모리에 상주하는 HNSW와 비교해 프로덕션 쿼리 CPU 시간을 40% 이상 절약했다.

표현력 확장도 진행 중이다. 단일 벡터 기반 투타워 모델의 한계를 넘기 위해 Pinterest는 ColBERT 같은 다중 벡터 후기 상호작용(late interaction) 모델로 옮겨가고 있으며, MaxSim 합산 스코어로 토큰 간 세밀한 관련성 매칭을 노린다. 이를 마나스에 적용하려면 쿼리 파서가 여러 토큰을 가진 질의를 여러 벡터 임베딩으로 쪼개고 서로 다른 인덱스에서 ANN 검색을 동시에 수행하도록 바뀌어야 한다. 현재 사내 고객 팀과 파일럿을 진행하며 실제 프로덕션 환경에서 다중 임베딩 질의 지원을 검증하고 있다.

정리하면 SQ는 높은 재현율과 압축률 사이 균형을, PQ는 메모리에 극도로 민감하고 재현율 손실을 감수할 수 있는 상황을 겨냥한다. 다만 여기 제시된 수치는 특정 데이터셋과 워크로드에서 나온 것이며, 양자화 방식은 인덱스 종류(HNSW/IVF)와 실제 질의 패턴에 맞춰 함께 튜닝해야 한다는 점이 전제로 붙는다.

관련 글