색인 쿼리하여 최근접 이웃 가져오기

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

색인을 만든 후에는 쿼리를 실행하여 가장 가까운 인접 항목을 가져올 수 있습니다.

DeployedIndex에는 DEPLOYED_INDEX_SERVER_IP가 있으며, 이는 IndexEndpoints를 나열하여 검색할 수 있습니다. DeployedIndex를 쿼리하려면 포트 10000에서 DEPLOYED_INDEX_SERVER_IP에 연결하고 Match 또는 BatchMatch 메서드를 호출합니다.

다음 예시에서는 오픈소스 도구인 grpc_cli를 사용하여 배포된 색인 서버로 grpc 요청을 보냅니다. 첫 번째 예시에서는 Match 메서드를 사용하여 단일 쿼리를 보냅니다.

./grpc_cli call ${DEPLOYED_INDEX_SERVER_IP}:10000 google.cloud.aiplatform.container.v1.MatchService.Match '{deployed_index_id: "${DEPLOYED_INDEX_ID}", float_val: [-0.1,..]}'

두 번째 예시에서는 두 개의 개별 쿼리를 동일한 BatchMatch 요청으로 결합합니다.

./grpc_cli call ${DEPLOYED_INDEX_SERVER_IP}:10000 google.cloud.aiplatform.container.v1.MatchService.BatchMatch 'requests: [{deployed_index_id: "${DEPLOYED_INDEX_ID}", requests: [{deployed_index_id: "${DEPLOYED_INDEX_ID}", float_val: [-0.1,..]}, {deployed_index_id: "${DEPLOYED_INDEX_ID}", float_val: [-0.2,..]}]}]'

서비스가 피어링된 동일한 VPC에서 실행 중인 클라이언트에서 이러한 API를 호출해야 합니다.

이러한 쿼리를 실행하려면 Vertex AI용 Python Cloud 클라이언트 라이브러리를 사용해도 됩니다. 자세한 내용은 클라이언트 라이브러리 설명을 참조하세요.

색인 조정

색인을 조정하려면 배포된 색인의 성능, 특히 재현율과 지연 시간에 영향을 주는 구성 매개변수를 설정해야 합니다. 이러한 매개변수는 색인을 처음 만들 때 설정됩니다. 무작위 공격 색인을 사용하여 재현율을 측정할 수 있습니다.

재현율과 지연 시간에 영향을 미치는 구성 매개변수는 다음과 같습니다.

  1. distanceMeasureType

    다음과 같은 값이 지원됩니다.

    • SQUARED_L2_DISTANCE: 유클리드 L2 거리
    • L1_DISTANCE: 맨해튼 L1 거리
    • COSINE_DISTANCE: '1 - 코사인 유사성'으로 정의된 코사인 거리
    • DOT_PRODUCT_DISTANCE: vDot 곱셈 거리이며 스칼라곱의 음으로 정의되며 기본값입니다.

    대부분의 경우 유사성 일치에 사용되는 임베딩 벡터는 측정항목 학습 모델(샴 네트워크 또는 2타워 모델이라고도 함)을 사용하여 계산됩니다. 이 모델은 거리 측정항목을 사용하여 대조 손실 함수를 계산합니다. 이상적으로는 일치 색인의 distanceMeasureType 매개변수가 임베딩 벡터를 생성한 모델에서 사용하는 거리 측정과 일치해야 합니다.

  2. approximateNeighborsCount

    정확한 순서 변경을 수행하기 전에 유사 검색을 사용하여 찾을 인접 항목의 기본 개수입니다. 정확한 순서 변경은 유사 검색 알고리즘에서 반환하는 결과가 비용이 더 많이 드는 거리 계산을 통해 재정렬되는 절차입니다. 이 값을 늘리면 재현율이 증가하고 지연 시간이 비례하여 증가할 수 있습니다.

  3. treeAhConfig.leafNodesToSearchPercent

    각 쿼리에서 검색할 리프의 비율입니다. 이 값을 늘리면 재현율이 증가하고 지연 시간이 비례하여 증가할 수 있습니다. 기본값은 10 또는 리프의 10% 입니다.

  4. treeAhConfig.leafNodeEmbeddingCount

    각 리프 노드의 임베딩 수입니다. 기본적으로 1000으로 설정됩니다.

    이 매개변수에는 재현율에 대한 선형 상관관계가 없습니다. treeAhConfig.leafNodeEmbeddingCount 매개변수 값을 올리거나 내리면 재현율이 항상 증가하거나 감소하지 않습니다. 실험을 통해 최적의 값을 찾습니다. 일반적으로 treeAhConfig.leafNodeEmbeddingCount 매개변수 값을 변경하는 것이 다른 매개변수 값을 변경하는 것보다 영향이 적습니다.

무작위 대입 색인을 사용하여 재현율 측정

가장 가까운 이웃을 가져오려면 무작위 대입 알고리즘으로 색인을 사용합니다. 무작위 대입 알고리즘은 100% 재현율을 제공하지만 지연 시간이 길어집니다. 무작위 대입 색인을 사용하여 재현율을 측정하는 것은 일반적으로 프로덕션 제공에 적합하지 않지만 오프라인으로 다양한 색인 생성 옵션의 재현율을 평가하는 데 유용할 수 있습니다.

무작위 대입 알고리즘으로 색인을 만들려면 색인 메타데이터에 brute_force_config를 지정합니다.

curl -X POST -H "Content-Type: application/json" \
-H "Authorization: Bearer `gcloud auth print-access-token`" \
https://us-central1-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/us-central1/indexes \
-d '{
    displayName: "'${DISPLAY_NAME}'",
    description: "'${DESCRIPTION}'",
    metadata: {
       contentsDeltaUri: "'${INPUT_DIR}'",
       config: {
          dimensions: 100,
          approximateNeighborsCount: 150,
          distanceMeasureType: "DOT_PRODUCT_DISTANCE",
          featureNormType: "UNIT_L2_NORM",
          algorithmConfig: {
             bruteForceConfig: {}
          }
       },
    },
}'