ScaNN 색인 참조

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

조정 파라미터

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

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

3단계 트리는 2단계 트리보다 더 빠르게 빌드되므로 3단계 트리 색인을 만들 때 num_leaves_value를 늘려 성능을 개선할 수 있습니다.
  • 2단계 색인: 이 값을 11048576 사이의 값으로 설정합니다.

    빠른 색인 빌드와 우수한 검색 성능의 균형을 맞추는 색인의 경우 sqrt(ROWS)를 시작점으로 사용합니다. 여기서 ROWS은 벡터 행 수입니다. 각 파티션에 포함된 벡터 수는
    ROWS/sqrt(ROWS) = sqrt(ROWS)로 계산됩니다.

    벡터 행이 1,000만 개 미만인 데이터 세트에서 2단계 트리 색인을 만들 수 있으므로 각 파티션에는 3200 벡터 이하의 벡터 (sqrt(10M))가 포함됩니다. 최적의 벡터 검색 품질을 위해 각 파티션의 벡터 수를 최소화하는 것이 좋습니다. 권장 파티션 크기는 파티션당 벡터 약 100개이므로 num_leavesROWS/100로 설정합니다. 벡터가 1,000만 개 있는 경우 num_leaves를 100,000으로 설정합니다.
  • 3단계 색인: 이 값을 11048576 사이의 값으로 설정합니다.

    정확한 값을 선택하는 것이 확실하지 않은 경우 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-means 트리에 사용할 큐나이저 유형입니다. 기본값은 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입니다. 쿼리 런타임
(선택사항)

다음 단계