Docs Menu

벡터 검색 성능 개선하기

Atlas Vector Search 를 사용하면 선택한 제품과 유사한 결과를 검색하는 Atlas Search, 이미지에 대한 Atlas Search 등의 ANN 쿼리를 수행할 수 있습니다. 인덱싱 속도와 쿼리 성능을 개선하려면 다음 권장사항을 검토하세요.

Atlas Vector Search는 최대 4096 까지 벡터 차원을 지원합니다. 그러나 벡터가 클수록 더 많은 부동 소수점 비교가 필요하므로 벡터 Atlas Search 인덱싱 및 쿼리는 계산 집약적입니다. 따라서 가능하면 임베딩 모델 변경이 벡터 쿼리의 정확도에 미치는 영향을 측정할 수 있는지 확인한 후 차원 수를 줄이는 것이 좋습니다.

벡터 임베딩은 인덱싱 중에 컴퓨팅 리소스를 소비합니다. 벡터 검색 중에는 인덱싱 및 재인덱싱을 피하는 것이 좋습니다. 인덱싱할 벡터를 생성하는 임베딩 모델을 변경하려는 경우 현재 사용 중인 인덱스를 업데이트하는 대신 새 벡터를 새 인덱스로 다시 인덱싱하는 것이 좋습니다.

벡터가 더 많거나 차원이 더 높은 벡터가 있는 경우 시맨틱 검색 의 범위를 좁히고 모든 벡터가 비교 대상으로 고려되지 않도록 할 수 있습니다. 벡터 검색 수행할 문서 수를 줄이기 위해 사전 필터링을 수행하는 파이프라인 내에$vectorSearch 옵션을 포함하는 것이 좋습니다.filter 또한 배열이 크면 쿼리 성능이 저하될 수 있으므로 고차원 벡터가 성능에 영향 도 고려하세요.

mongodmongot 프로세스를 동일한 노드 에 배포 경우 프로세스 간에 리소스 경합이 발생할 수 있습니다. Atlas Vector Search mongot 쿼리의 성능을 최적화하려면 프로세스 전용 검색 노드에 배포 것이 좋습니다. 이렇게 하면 프로세스와 프로세스 간의 리소스 경합을 방지하는 mongotmongod 도움이 될 뿐만 아니라 검색 $vectorSearch 노드의 쿼리에 대해 기본값 으로 병렬 세그먼트 검색 사용할 수 있습니다.

결과 내 문서의 기존 필드와 $project 단계에서 새로 계산된 필드가 반환되도록 요청할 수 있습니다. 쿼리 성능을 향상시키려면 결과에 모든 필드가 필요한 경우를 제외하고 $project 단계를 사용하여 결과에 반환할 필드를 현명하게 선택합니다. 벡터 임베딩이 크고 결과 반환 시 쿼리 지연 시간에 영향을 줄 수 있으므로 $project 단계에서 벡터 필드를 제외하는 것이 좋습니다.

Hierarchical Navigable Small Worlds 는 벡터 데이터가 메모리에 저장되어 있을 때 효율적으로 작동합니다. 데이터 노드에 벡터 데이터와 인덱스를 저장할 수 있는 충분한 RAM 있는지 확인해야 합니다. 벡터 검색 사용 사례에서 메모리를 보다 효율적으로 사용할 수 있도록 데이터 격리 없이 워크로드 격리 하기 위해 별도의 검색 노드를 배포하는 것이 좋습니다.

벡터 검색을 수행하는 경우 쿼리는 계층적 탐색 가능 소규모 세계를 탐색하면서 디스크에서 무작위 검색을 수행하고 그래프와 벡터 값이 메모리로 읽혀집니다. 이로 인해 초기 쿼리의 지연 시간 이 매우 길어집니다. 계층적 탐색 가능 소규모 세계 탐색을 통해 인덱싱된 모든 벡터를 메모리로 읽어들일 때 지연 시간이 단축되어 후속 쿼리에서 벡터에 훨씬 빠르게 액세스할 수 있습니다.

하지만 대규모 쓰기 작업이나 인덱스를 다시 작성할 때는 이 캐시 워밍 프로세스를 반복해야 합니다.

BinData 벡터 3하위 유형은 에서 부동 소수점 벡터를 사용할 때 배 저장 절약할 mongod 수 있으며,int8 벡터 및 벡터와 같은 대체 유형으로 벡터를 인덱싱 int1 지원 . 이렇게 리소스 프로필이 크게 줄어들어 mongod 가 모든 쿼리 에 대해 데이터베이스 에서 문서를 조회 데 사용하는 내부 $vectorSearch 쿼리 경로를 가속화합니다. binData 부동 소수점을 사용하는 경우에도 binData 벡터를 사용하면 특히 limit (결과 수)가 20보다 큰 경우 쿼리 지연 시간 크게 가속화됩니다.

스칼라 양자화는 32비트 부동 소수점 숫자를 8비트 정수로 변환하는 것과 같이 각 개별 차원의 정밀도를 감소시킵니다. 그러나 대부분의 임베딩 모델에 대해 관련 정보를 잘 조회 기능 유지합니다. 반면에 이진 양자화는 벡터를 또는 1 로 축소하므로 0 QAT 임베딩 모델에서 더 나은 성능을 발휘합니다.

스칼라 양자화는 대부분의 임베딩 모델에서 벡터에 대한 재현율을 잘 보존합니다. QAT 임베딩 모델의 벡터가 있는 경우, 교육 프로세스 정밀도의 극단적인 감소에 적응하도록 모델을 훈련시키기 때문에 이진 양자화를 사용하면 더 나은 성능을 제공할 수 있습니다.