ScaNN 색인 참조

문서 버전을 선택합니다.

이 페이지에서는 ScaNN 색인에 대한 참조 자료를 제공합니다.

파라미터 미세 조정

다음 색인 파라미터와 데이터베이스 플래그는 재현율과 QPS의 적절한 균형을 찾기 위해 함께 사용됩니다.

조정 파라미터 설명 옵션 유형
max_num_levels K-평균 클러스터링 트리의 최대 중심 수준 수입니다.
  • 2단계 트리 색인: 2단계 트리(1개 중심 수준 + 하단 리프 수준)의 경우 기본적으로 1로 설정됩니다.
  • 3단계 트리 색인: 3단계 트리(2개의 중심 수준 + 하단 리프 수준)의 경우 기본적으로 2로 설정됩니다.
  • 벡터 행 수가 1억 개를 초과하면 값을 2로 설정합니다.
  • 벡터 행 수가 1,000만 개 미만이면 값을 1로 설정합니다.
  • 벡터 행 수가 1,000만~1억 행인 경우 색인 빌드 시간(2로 설정)을 최적화하거나 검색 재현율(1로 설정)을 최적화하려면 1 또는 2로 설정합니다.
색인 만들기
(선택사항)
num_leaves 이 색인에 적용할 파티션 수입니다. 색인을 만들 때 적용하는 파티션 수는 색인 성능에 영향을 미칩니다. 일정 수의 벡터에 대한 파티션을 늘리면 더 세분화된 색인이 생성되어 재현율과 쿼리 성능이 향상됩니다. 하지만 이 경우 색인 생성 시간이 길어집니다.

3단계 트리는 2단계 트리보다 빠르게 빌드되므로 3단계 트리 색인을 생성할 때 num_leaves_value를 늘려 성능을 개선할 수 있습니다.
  • 2단계 색인: 이 값을 1~1048576 사이의 값으로 설정하세요.

    빠른 색인 빌드와 우수한 검색 성능을 균형 있게 제공하는 색인의 경우 sqrt(ROWS)를 시작점으로 사용합니다. 여기서 ROWS는 벡터 행 수입니다. 각 파티션이 보유하는 벡터 수는
    ROWS/sqrt(ROWS) = sqrt(ROWS)로 계산됩니다.

    벡터 행이 1,000만 개 미만인 데이터 세트에서 2단계 트리 색인을 생성할 수 있으므로 각 파티션은 (sqrt(10M))개 미만의 벡터를 보유하게 되며, 이는 3200개의 벡터에 해당합니다. 최적의 벡터 검색 품질을 위해서는 각 파티션의 벡터 수를 최소화하는 것이 좋습니다. 권장 파티션 크기는 파티션당 벡터 100개 정도이므로 num_leavesROWS/100으로 설정합니다. 벡터가 1,000만 개라면 num_leaves를 100,000으로 설정합니다.
  • 3단계 색인: 이 값을 1~1048576 사이의 값으로 설정하세요.

    정확한 값을 선택할 확신이 없는 경우 power(ROWS, 2/3)를 시작점으로 사용하세요. 여기서 ROWS은 벡터 행 수입니다. 각 파티션이 보유하는 벡터 수는
    ROWS/power(ROWS, 2/3) = power(ROWS, 1/3)로 계산됩니다.

    벡터 행이 1억 개 이상인 데이터 세트에서 3단계 트리 색인을 생성할 수 있으므로 각 파티션은
    (power(100M, 1/3))개 이상의 벡터를 보유하게 되며, 이는 465개의 벡터에 해당합니다. 최적의 벡터 검색 품질을 위해서는 각 파티션의 벡터 수를 최소화하는 것이 좋습니다. 권장 파티션 크기는 파티션당 벡터 100개 정도이므로 num_leavesROWS/100으로 설정합니다. 벡터가 1억 개라면 num_leaves를 100만으로 설정합니다.
색인 만들기
(필수)
quantizer K-평균 트리에 사용할 양자화기의 유형입니다. 기본값은 SQ8로 설정되어 있으며, 이를 통해 재현율 손실을 최소화하면서(일반적으로 1~2% 미만) 쿼리 성능을 개선할 수 있습니다.

재현율이 99% 이상이어야 하는 경우 FLAT로 설정하세요.
색인 만들기
(선택사항)
scann.enable_pca 가능한 경우 임베딩 크기를 자동으로 줄이는 데 사용되는 차원 축소 기법인 주요 구성요소 분석(PCA)을 사용 설정합니다. 이 옵션은 기본적으로 사용 설정되어 있습니다.

재현율이 저하되는 경우 false로 설정하세요.
색인 만들기
(선택사항)
scann.num_leaves_to_search 이 데이터베이스 플래그는 검색할 리프 또는 파티션의 절대 수를 제어하므로 재현율과 QPS 간에 적절한 균형을 유지할 수 있습니다. 기본값은 num_leaves에 설정된 값의 1%입니다.

값이 높을수록 재현율은 향상되지만 QPS는 낮아집니다. 반대로 값이 낮을수록 재현율은 낮아지지만 QPS는 높아집니다.
쿼리 런타임
(선택사항)
scann.pre_reordering_num_neighbors 데이터베이스 플래그는 설정된 경우 초기 검색에서 후보 집합을 식별한 후 재정렬 단계에서 고려할 후보 이웃의 수를 지정합니다. 이 파라미터를 쿼리에서 반환할 이웃 수보다 큰 값으로 설정하세요.

값이 높을수록 재현율이 향상되지만 QPS는 낮아집니다. 재정렬을 중지하려면 이 값을 0으로 설정합니다. 색인 생성 중에 PCA가 사용 설정되지 않은 경우 기본값은 0입니다. 그렇지 않으면 기본값은 50 x K입니다. 여기서 K는 쿼리에 지정된 LIMIT입니다.
쿼리 런타임
(선택사항)
scann.num_search_threads 멀티 스레드 검색의 검색 스레드 수입니다. 이렇게 하면 지연 시간에 민감한 애플리케이션에서 ScaNN ANN 검색에 둘 이상의 스레드를 사용하여 단일 쿼리 지연 시간을 줄일 수 있습니다. 데이터베이스가 이미 CPU에 바인딩된 경우라면 이 설정으로 단일 쿼리 지연 시간이 개선되지 않습니다. 기본값은 2입니다. 쿼리 런타임
(선택사항)

다음 단계