Docs Menu
Docs Home
/ /

벡터 양자화

MongoDB Vector Search는 부동 소수점 벡터 임베딩(32비트 및 64비트 모두)의 자동 양자화를 지원합니다. 또한 특정 임베딩 모델에서 사전 양자화된 스칼라 및 이진 벡터의 수집 및 인덱싱 지원합니다.

양자화는 완전 충실도 벡터를 더 적은 비트로 축소하는 프로세스 입니다. 대신 축소된 표현 벡터를 인덱싱 하여 MongoDB Vector Search 인덱스 에 각 벡터를 저장 데 필요한 메인 메모리의 양을 줄입니다. 이를 통해 더 많은 벡터 또는 더 높은 차원의 벡터를 저장 수 있습니다. 따라서 양자화는 리소스 소비를 줄이고 속도를 향상시킵니다. 100000와 같이 벡터 수가 많은 애플리케이션에는 양자화를 권장합니다.

스칼라 양자화 에는 먼저 인덱싱된 벡터의 각 차원에 대한 최소값과 최대값을 식별하여 차원의 값 범위 설정하는 작업이 포함됩니다. 그런 다음 범위 동일한 크기의 간격 또는 빈으로 나눕니다. 마지막으로 각 부동 소수점 값을 빈에 매핑하여 연속 부동 소수점 값을 불연속적인 정수로 변환합니다. MongoDB Vector Search에서 이 양자화는 벡터 임베딩의 RAM 비용 양자화 전 비용 의 약 1/4(1/3.75)로 줄입니다.

이진 양자화에는 각 차원에 대해 중간점을 0 로 가정하는 작업이 포함되며, 이는 일반적으로 OpenAI의 text-embedding-3-large와 같이 길이 1 로 정규화된 임베딩에 적합합니다. 그런 다음 벡터의 각 값을 중간점과 비교하여 중간점보다 크면 이진 값 1, 중간점보다 작거나 같으면 이진 값 0 를 할당합니다. MongoDB Vector Search에서 이 양자화는 벡터 임베딩의 RAM 비용 양자화 전 비용 의 24분의 1(1/24)로 줄입니다. 1/32 이 아닌 이유는 벡터 값과 별도로 Hierarchical Navigable Small Worlds 그래프 자체를 포함하는 데이터 구조가 압축되지 않기 때문입니다.

MongoDB Vector Search는 쿼리 실행 때 쿼리 벡터와 인덱싱된 이진 벡터를 효율적으로 비교할 수 있도록 동일한 중점을 사용하여 쿼리 벡터의 부동 소수점 값을 이진 벡터로 변환합니다. 그런 다음 이진 인덱스 의 결과와 관련된 원래 부동 소수점 값을 사용하여 이진 비교에서 식별된 후보를 재평가하여 점수를 다시 매겨 결과를 더욱 세분화합니다. 전체 충실도 벡터는 디스크의 자체 데이터 구조에 저장되며, 이진 양자화를 구성하거나 이진 또는 스칼라 양자화된 벡터에 대해 정확한 검색 수행할 때 재채점하는 동안에만 참조됩니다.

다음 표는 양자화된 벡터를 자동으로 양자화하고 수집하는 데 필요한 요구 사항을 보여줍니다.

참고

Atlas는 모든 부동 소수점 값을 내부적으로 double 데이터 유형으로 저장합니다. 따라서 32비트 및 64비트 임베딩은 변환 없이 자동 양자화와의 호환성이 보장됩니다.

요구 사항
int1 수집의 경우
int8 수집의 경우
자동 스칼라 양자화의 경우
자동 이진 양자화의 경우

인덱스 정의 설정 필요

No

No

BSON binData 형식이 필요합니다.

No

No

mongod 에 저장

binData(int1)

binData(int8)

binData(float32)
array(double)
binData(float32)
array(double)

지원되는 유사성 메서드

euclidean

cosine
euclidean
dotProduct
cosine
euclidean
dotProduct
cosine
euclidean
dotProduct

지원되는 차원 수

8의 배수

1에서 8192

1에서 8192

1에서 8192

근사 최근접 이웃(ANN)등가 최근접 이웃(ENN) 검색 지원

컬렉션 의 부동 소수점 벡터 임베딩을 벡터 인덱스의 int8 (스칼라) 및 binary 와 같은 축소 표현 유형으로 자동으로 양자화하도록 MongoDB Vector Search를 구성할 수 있습니다.

양자화 유형을 설정하거나 변경하려면 인덱스 정의에서 quantization 필드 값을 scalar 또는 binary로 지정합니다. 이렇게 하면 다른 인덱스 정의 변경과 유사하게 인덱스 재구성이 트리거됩니다. 지정된 양자화 유형은 쿼리 시점에 모든 인덱싱된 벡터와 쿼리 벡터에 적용됩니다. 쿼리 벡터가 자동으로 양자화되므로 쿼리를 변경할 필요가 없습니다.

대부분의 임베딩 모델의 경우 점수 재지정을 포함한 이진 양자화를 권장합니다. QAT 가 아닌 저차원 모델을 사용하려면 표현 손실이 적고 표현 용량 손실이 적은 스칼라 양자화를 사용합니다.

MongoDB Vector Search는 스칼라 양자화 및 재채점을 통한 이진 양자화를 위한 네이티브 기능을 제공합니다. 자동 양자화는 벡터의 효율적인 처리 위한 계산 리소스를 줄여 애플리케이션의 확장성 비용 절감을 향상시킵니다. 자동 양자화는 mongot 의 RAM 스칼라의 경우 3.75x만큼, 바이너리의 경우 24x만큼 줄입니다. 벡터 값은 각각 4x 및 32x만큼 축소되지만 Hierarchical Navigable Small Worlds 그래프 자체는 축소되지 않습니다. 이렇게 하면 가장 높은 볼륨과 확장하다 에서도 성능이 향상됩니다.

일반적으로 100를 초과하는000 완전 충실도 벡터가 많은 경우 자동 양자화를 권장합니다. 양자화 후 벡터를 검색할 때 정확도를 저하시키지 않으면서 축소된 표현 벡터를 인덱스 .

자동 양자화를 활성화하려면:

1

신규 또는 기존 MongoDB Vector Search 인덱스 에서 인덱스 정의의 fields.quantization 필드 에 다음 양자화 유형 중 하나를 지정합니다.

  • scalar: 부동 소수점 입력 벡터로부터 바이트 벡터를 생성합니다.

  • binary: 부동 소수점 입력 벡터로부터 바이트 벡터를 생성합니다.

부동 소수점 값의 배열 아닌 데이터에 자동 양자화를 지정하면 MongoDB Vector Search는 벡터를 인덱싱 대신 해당 벡터를 자동으로 무시하며 해당 벡터는 건너뜁니다. Atlas 부동 소수점 값(32비트 및 64비트 모두)을 내부적으로 double 유형으로 저장하므로 두 정밀도 중 하나를 출력하는 모델의 임베딩은 자동 양자화에서 작동합니다.

2

인덱스 작성에는 약 1분 정도가 소요됩니다. 인덱스가 작성되는 동안 인덱스는 초기 동기화 상태에 있습니다. 빌드가 완료되면 컬렉션의 데이터 쿼리를 시작할 수 있습니다.

지정된 양자화 유형은 쿼리 시점의 모든 인덱싱된 벡터와 쿼리 벡터에 적용됩니다.

Atlas UI 에서 양자화된 인덱스 볼 때 인덱스 크기는 양자화가 없는 인덱스 보다 크게 나타날 수 있습니다. 이는 지표가 Hierarchical Size Navigable Small Worlds 그래프 (메모리 내), 양자화된 벡터(메모리 내), 완전 충실도 벡터(디스크 내)를 포함하여 저장된 총 데이터 를 나타내기 때문입니다. 쿼리 시점에 인덱스 에서 사용하는 메모리 양을 추정하려면 Required Memory 지표를 참조하세요.

MongoDB Vector Search는 특정 임베딩 모델에서 스칼라 및 이진 양자화된 벡터의 수집 및 인덱싱 도 지원합니다. 아직 양자화된 벡터가 없는 float32int1경우,, 또는 하위 유형을 사용하여 임베딩을 BSON BinData 벡터로 변환할 수 int8 있습니다.

다음과 같은 사용 사례에는 양자화된 BSON binData 벡터를 수집하는 것이 좋습니다.

  • 임베딩 모델에서 양자화된 벡터 출력을 인덱싱해야 합니다.

  • 많은 수의 float 벡터가 있으며 mongod에서 스토리지 및 WiredTiger의 사용량(예: 디스크 및 메모리 사용량)을 줄이고자 합니다.

BinData는 이진 데이터를 저장하는 BSON 데이터 유형입니다. 이는 벡터 임베딩을 압축하여 표준 float32 배열을 사용하는 임베딩에 비해 클러스터에서 약 3배 적은 디스크 공간을 필요로 합니다. 자세한 내용은 벡터 압축을 참조하세요.

또한 이 하위 유형을 사용하면 int1 또는 int8 벡터와 같은 대체 유형으로 벡터를 인덱스 컬렉션 에 대한 MongoDB Vector Search 인덱스 빌드 데 필요한 메모리를 줄일 수 있습니다. mongot 의 RAM 스칼라의 경우 3.75x, 바이너리의 경우 24x만큼 줄입니다. 벡터 값은 각각 4x 및 32x만큼 축소되지만 Hierarchical Navigable Small Worlds 그래프 자체는 축소되지 않습니다.

binData 벡터가 아직 없는 경우 컬렉션에 데이터를 쓰기 전에 지원되는 드라이버를 사용하여 임베딩을 이 형식으로 변환할 수 있습니다. 다음 절차에서는 임베딩을 float32, int8int1 하위 유형을 가진 BinData 벡터로 변환하는 단계를 안내합니다.

BSON float32, int1int8 하위 유형을 가진 BinData 벡터는 다음 드라이버에서 지원됩니다.

이 절차의 예시에서는 Voyage AIvoyage-3-large 모델을 사용하여 생성된 새로운 데이터 또는 기존 데이터와 임베딩을 사용합니다. 새 데이터 예시에서는 샘플 텍스트 문자열을 사용하며, 이를 사용자 데이터로 대체할 수 있습니다. 기존 데이터의 예시는 sample_airbnb 데이터베이스의 listingsAndReviews 컬렉션에서 임베딩이 없는 문서의 하위 집합을 사용하며, 이를 임베딩 포함 여부에 관계없이 사용자의 데이터베이스 및 컬렉션으로 교체할 수 있습니다.

아래의 Data Source 드롭다운 메뉴를 사용하여 새 데이터에 대해 또는 클러스터 에 이미 있는 데이터에 대해 binData 벡터를 양자화할지 여부를 선택합니다. 선호하는 프로그래밍 언어 도 선택하세요.

ANN 검색 결과가 양자화된 벡터에 대해 ENN 검색 결과와 얼마나 일치하는지 평가하여 MongoDB Vector Search 쿼리의 정확성을 측정할 수 있습니다. 즉, 동일한 쿼리 기준에 대한 ANN 검색 결과를 ENN 검색 결과와 비교하고 ANN 검색 결과에 ENN 검색 결과에 가장 가까운 이웃이 포함되는 빈도를 측정할 수 있습니다.

쿼리 결과를 평가하는 방법에 대한 데모는 쿼리 결과의 정확성을 측정하는 방법을 참조하세요.

돌아가기

배포 옵션 검토

이 페이지의 내용