ScaNN 벡터 쿼리 성능 개요

이 페이지에서는 ScaNN 색인을 사용하여 벡터 쿼리 성능을 개선하는 방법을 개념적으로 간략하게 설명합니다.

ScaNN 색인은 트리 양자화 기반 색인을 사용합니다. 트리 양자화 기법에서 색인은 양자화(또는 해싱) 함수와 함께 검색 트리를 학습합니다. 쿼리를 실행하면 검색 트리는 검색 공간을 가지치기하는 데 사용되며, 양자화는 색인 크기를 압축하는 데 사용됩니다. 이 가지치기를 통해 쿼리 벡터와 데이터베이스 벡터 간의 유사성(즉, 거리) 스코어링 속도가 빨라집니다.

최근접 이웃 쿼리로 높은 초당 쿼리 수(QPS)와 높은 재현율을 모두 달성하려면 데이터와 쿼리에 가장 적합한 방식으로 ScaNN 색인의 트리를 파티셔닝해야 합니다.

현재 세대의 고차원 임베딩 모델의 일반적인 특징은 훨씬 낮은 차원에서도 많은 정보를 유지할 수 있다는 것입니다. 예를 들어 임베딩의 차원이 20%에 불과해도 정보의 90%를 유지할 수 있습니다. 이러한 데이터 세트의 속도를 높이기 위해 AlloyDB ScaNN은 색인이 생성된 벡터에서 주요 구성요소 분석(아래 scann.enable_pca 참조)을 사용해 자동으로 차원 축소를 수행하므로 벡터 검색을 위한 CPU 및 메모리 사용량이 더욱 감소합니다. 차원 축소로 인해 색인에서 약간의 재현율 손실이 발생하므로 AlloyDB ScaNN은 색인에서 PCA 처리된 벡터 후보를 더 많이 사용하여 초기 순위 지정 단계를 거친 후 원래 벡터로 재정렬하여 이를 보완합니다(scann.pre_reordering_num_neighbors 참조).

다음 단계