다음을 통해 공유


Azure Cosmos DB for MongoDB(vCore)의 Half-Precision 벡터 인덱싱

Half-Precision 벡터 인덱싱이란?

반정밀도 벡터 인덱싱을 사용하면 표준 32비트 부동 소수점 대신 16비트 부동 소수점 숫자를 사용하여 벡터 포함을 저장하고 인덱싱할 수 있습니다. 이러한 최적화로 인해 메모리 사용량과 스토리지 비용이 크게 감소하여 더 큰 데이터 세트 및 더 높은 차원 벡터로 작업하는 것이 더 적합합니다. 또한 데이터 밀도를 최적화하면 많은 벡터 검색 시나리오에서 쿼리 성능이 향상될 수 있습니다.

주요 이점

  • 차원 지원 증가: 반정밀도를 사용하면 이제 최대 4,000개의 차원 으로 벡터를 인덱싱할 수 있습니다(이전 제한인 2,000개에서 증가).
  • 스토리지 공간 감소: 벡터를 16비트 형식으로 저장하면 전체 정밀도 벡터에 비해 필요한 스토리지 양이 크게 줄어듭니다. 따라서 특히 대규모 벡터 데이터베이스의 경우 상당한 비용을 절감할 수 있습니다.
  • 구성 가능한 성능 및 정밀도: 검색 결과를 미세 조정하기 위해 쿼리 실행 중에 오버샘플링 매개 변수를 제공합니다. 이렇게 하면 검색 속도와 정밀도 감소의 잠재적 영향 간의 균형을 제어할 수 있습니다.

Half-Precision 벡터 인덱스 만들기

컬렉션에 대한 벡터 인덱스를 정의할 때, "compression": "half" 내에서 cosmosSearchOptions 옵션을 지정하여 반정밀도 압축을 사용할 수 있습니다.

db.runCommand({
  "createIndexes": "<vector_collection_name>",
  "indexes": [
    {
      "key": { "<vector_field_name>": "cosmosSearch" },
      "name": "<index_name>",
      "cosmosSearchOptions": {
        "kind": "vector-hnsw", // or vector-ivf
        "similarity": "cos",
        "dimensions": integer_value, // max 4000
        "compression": "half"
      }
    }
  ]
});

오버샘플링을 사용하여 검색 개선

반정밀도 압축을 사용하는 벡터 인덱스를 쿼리할 때 oversampling 매개 변수를 $search 집계 단계에서 사용할 수 있습니다. 이 매개 변수는 16비트 표현에서 도입된 정밀도의 잠재적 손실을 완화하는 데 도움이 됩니다.

oversampling 인수를 사용하면 원하는 최종 결과 수(k)보다 반정밀도 인덱스에서 가장 가까운 잠재적인 인접 항목을 검색할 수 있습니다. 그런 다음, 최종 순위가 지정된 결과에서 더 높은 정확도를 보장하기 위해 원래 전체 정밀도 벡터를 사용하여 이러한 후보를 비교합니다.

예를 들어 가장 유사한 상위 10개(k=10)를 얻으려면 1.5 또는 oversampling과 같은 값으로 설정하는 것이 좋습니다. 이를 통해 "oversampling": 1.5시스템은 먼저 반정밀도 인덱스에서 15명의 후보를 구한 다음 전체 정밀도 데이터를 사용하여 상위 10개 후보를 구체화합니다.

db.collection.aggregate([
  {
    "$search": {
      "cosmosSearch": {
        "vector": query_vector,
        "path": path_to_property,
        "k":  num_results_to_return,
        "oversampling": double_value
      }
    }
  },
  {
    "$project": {
      "similarityScore": { "$meta": "searchScore" },
      "_id": 0
    }
  }
]);

비고

oversampling 요소는 최소값이 1.0이어야 합니다. 이 요소는 .을 사용하여 만든 벡터 인덱스와만 관련이 있습니다 "compression": "half".

Half-Precision 및 제품 양자화

azure Cosmos DB for MongoDB (vCore)의 Half-Precision 및 Product Quantization (PQ)는 벡터 인덱스를 압축하는 방법으로, 두 방법 모두 압축을 달성하고 검색에 영향을 미치는 부분에서 차이가 있습니다.

특징 Half-Precision 제품 양자화(PQ)
Compression 메서드 각 벡터 차원을 16비트로 줄입니다. 벡터 공간을 하위 영역으로 나누고 각각을 정량화합니다.
최대 크기 최대 4,000 최대 16,000개
정밀도 변경 낮은 비트 깊이로 인해 약간의 손실이 발생합니다. 잠재적으로 더 큰 손실, pqCompressedDims를 통해 구성 가능함.
검색 속도 더 작은 인덱스로 인해 속도가 적당히 증가했습니다. 고도로 압축된 벡터로 인해 속도가 크게 향상됩니다.
인덱스 빌드 시간 비교적 빠릅니다. 중심점을 훈련시키면 더 길어질 수 있습니다 (pqSampleSize).
인덱스 지원 HNSW, IVF. DiskANN.
설정 직접 compression: "half"를 활성화하세요. 추가 매개 변수: pqCompressedDims, . pqSampleSize
오버샘플링 사용 경미한 정밀도 손실에 도움이 됩니다. 더 큰 압축에서 정확도를 복구하는 데 필수적입니다.
이상적인 사용 사례 적당한 메모리 감소, 증가된 차원, 허용 가능한 정밀도 절충. 큰 데이터 세트, 높은 차원, 우선 순위가 지정된 빠른 검색, 오버샘플링으로 관리되는 정밀도.

다음 단계