ScaNN 색인 참조

문서 버전을 선택하세요.

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

조정 파라미터

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

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

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

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

    2단계 트리 색인은 벡터 행이 1,000만 개 미만인 데이터 세트에서 만들 수 있으므로 각 파티션은 (sqrt(10M)) 벡터 미만인 3200 벡터를 보유합니다. 최적의 벡터 검색 품질을 위해서는 각 파티션의 벡터 수를 최소화하는 것이 좋습니다. 권장 파티션 크기는 파티션당 벡터 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.pct_leaves_to_search (Preview) 이 데이터베이스 플래그를 사용하면 [검색할 리프 또는 파티션 수를 자동으로 관리](/alloydb/omni/16.3.0/docs/ai/maintain-vector-indexes#manage-leave-to-search-split-partitions)할 수 있습니다. 이 값을 현재 파티션 수로 설정합니다. 예를 들어 현재 파티션 수의 1% 를 검색하려면 이 값을 1로 설정합니다.

이 매개변수를 0~100 사이의 값으로 설정할 수 있습니다. 기본값은 0이며, 이 매개변수를 사용 중지하고 `scann.num_leaves_to_search` 를 사용하여 검색할 리프 수를 계산합니다. 이 매개변수는 기본적으로 사용 중지되어 있습니다.
쿼리 런타임
(선택사항)
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 검색에 2개 이상의 스레드를 사용하여 단일 쿼리 지연 시간을 줄일 수 있습니다. 데이터베이스가 이미 CPU에 바인딩된 경우 이 설정은 단일 쿼리 지연 시간을 개선하지 않습니다. 기본값은 2입니다. 쿼리 런타임
(선택사항)

다음 단계