ScaNN 색인 조정 권장사항

ScaNN 색인에 권장되는 매개변수는 2단계 트리 색인과 3단계 트리 색인을 빌드할지 여부에 따라 다릅니다. 이 페이지에서는 검색 결과와 QPS 간의 최적의 균형을 맞추기 위해 색인 매개변수를 조정하는 방법에 관한 권장사항을 제공합니다.

ScaNN 색인 생성

자세한 내용은 ScaNN 색인 참조를 참고하세요.

2단계 트리 색인

데이터 세트에 최적의 num_leavesnum_leaves_to_search 값을 찾는 데 도움이 되는 추천을 적용하려면 다음 권장 단계를 따르세요.

  1. 다음 사례에 최적화된 ScaNN 색인을 만들려면 num_leaves 매개변수를 다음 값으로 설정합니다. 여기서 rows는 색인이 생성된 테이블의 행 수입니다.
    • 색인 빌드 시간과 품질 균형 유지: num_leavessqrt(rows)로 설정합니다.
    • quality: num_leaves를 rows/100으로 설정합니다.
  2. 테스트 쿼리를 실행하여 타겟 검색 범위(예: 95%)를 달성할 때까지 scann.num_of_leaves_to_search 값을 늘립니다. 쿼리 분석에 대한 자세한 내용은 쿼리 분석을 참고하세요.
  3. 이후 단계에서 사용할 scann.num_leaves_to_searchnum_leaves의 비율을 기록합니다. 이 비율은 타겟 검색률을 달성하는 데 도움이 되는 데이터 세트의 근사치를 제공합니다.

    고차원 벡터 (500차원 이상)를 사용하고 있으며 검색률을 개선하려면 scann.pre_reordering_num_neighbors 값을 조정해 보세요. 기본값은 500 * K로 설정되며 여기서 K은 쿼리에서 설정한 한도입니다.
  4. 쿼리가 타겟 재현율을 달성한 후 QPS가 너무 낮으면 다음 단계를 따르세요.
    1. 다음 안내에 따라 num_leavesscann.num_leaves_to_search 값을 늘려 색인을 다시 만듭니다.
      • num_leaves를 행 수의 제곱근에 더 큰 배수를 적용합니다. 예를 들어 색인에 num_leaves가 행 개수의 제곱근으로 설정되어 있으면 제곱근의 2배로 설정해 보세요. 값이 이미 두 배인 경우 제곱근의 세 배로 설정해 보세요.
      • 3단계에서 기록한 num_leaves와의 비율을 유지하도록 필요에 따라 scann.num_leaves_to_search를 늘립니다.
      • num_leaves를 행 개수를 100으로 나눈 값 이하로 설정합니다.
    2. 테스트 쿼리를 다시 실행합니다. 테스트 쿼리를 실행하는 동안 scann.num_leaves_to_search를 줄여 재현율을 높게 유지하면서 QPS를 늘리는 값을 찾습니다. 색인을 다시 빌드하지 않고 scann.num_leaves_to_search의 다양한 값을 시도해 보세요.
  5. QPS와 재현율 범위가 모두 허용 가능한 값에 도달할 때까지 4단계를 반복합니다.

3단계 트리 색인

2단계 트리 ScaNN 색인에 대한 권장사항 외에도 다음 안내를 따르세요.

추천을 적용하여 num_leavesmax_num_levels 색인 매개변수의 최적 값을 찾으려면 다음 단계를 따르세요.

  1. 실적 목표에 따라 다음 num_leavesmax_num_levels 조합으로 ScaNN 색인을 만듭니다.

    • 색인 빌드 시간 및 품질 균형 맞추기: max_num_levels2로, num_leavespower(rows, ⅔)로 설정합니다.
    • 품질 최적화: max_num_levels2로, num_leavesrows/100로 설정합니다.
  2. 테스트 쿼리를 실행합니다. 쿼리 분석에 대한 자세한 내용은 쿼리 분석을 참고하세요.

  3. 이후 단계에서 사용할 scann.num_leaves_to_searchnum_leaves의 비율을 기록합니다. 이 비율은 타겟 재현율을 달성하는 데 도움이 되는 데이터 세트의 대략적인 값을 제공합니다.

차원이 높은 벡터 (500개 이상의 차원)를 사용하고 있으며 검색률을 개선하려면 scann.pre_reordering_num_neighbors 값을 조정해 보세요. 기본값은 500 * K로 설정되며 여기서 K은 쿼리에서 설정한 한도입니다.

  1. 쿼리가 타겟 재현율을 달성한 후 QPS가 너무 낮으면 다음 단계를 따르세요.

    • 다음 안내에 따라 num_leavesscann.num_leaves_to_search 값을 늘려 색인을 다시 만듭니다.
    • num_leavespower(rows, ⅔)의 더 큰 배수로 설정합니다. 예를 들어 색인에 num_leavespower(rows, ⅔)로 설정된 경우 power(rows, ⅔)의 두 배로 설정해 보세요. 값이 이미 두 배인 경우 power(rows, ⅔)의 세 배로 설정해 보세요.
    • 3단계에서 기록한 num_leaves와의 비율을 유지하도록 필요에 따라 scann.num_leaves_to_search를 늘립니다.
    • num_leavesrows/100 이하의 값으로 설정합니다.
    • 테스트 쿼리를 다시 실행합니다. 테스트 쿼리를 실행하는 동안 scann.num_leaves_to_search를 줄여 재현율을 높게 유지하면서 QPS를 늘리는 값을 찾습니다. 색인을 다시 빌드하지 않고 scann.num_leaves_to_search의 다른 값을 시도해 보세요.
  2. QPS와 재현율 범위가 모두 허용 가능한 값에 도달할 때까지 4단계를 반복합니다.

색인 유지 관리

테이블이 자주 업데이트되거나 삽입되는 경우 검색 정확성을 개선하기 위해 주기적으로 기존 ScaNN 색인의 색인을 재생성하는 것이 좋습니다. 색인 측정항목을 모니터링하여 색인이 생성된 이후 벡터 분포 또는 벡터 변형의 변경사항을 확인한 후 적절하게 색인을 다시 생성할 수 있습니다. 측정항목에 관한 자세한 내용은 벡터 색인 측정항목 보기를 참고하세요.

다음 단계