벡터 스토리지 및 처리를 최적화하는 방법 선택

메모

Azure AI 검색 Azure 포털, REST API 및 Azure SDK 통해 사용할 수 있습니다. 또한 엔터프라이즈 콘텐츠를 Microsoft Foundry 포털의 에이전트에 대해 재사용 가능한 사용 권한 인식 기술 자료로 변환하는 관리되는 기술 계층인 Foundry IQ를 뒷받침합니다.

포함 또는 다른 유형의 콘텐츠의 숫자 표현은 벡터 검색 워크로드의 기초입니다. 그러나 embedding의 크기 때문에 크기 조정이 어렵고 처리 비용이 많이 듭니다. 중요한 연구 및 제품화는 규모를 개선하고 처리 시간을 줄이기 위한 여러 솔루션을 생성했습니다. Azure AI 검색 더 빠르고 저렴한 벡터 워크로드를 위해 이러한 기능을 다양하게 활용합니다.

이 문서에서는 벡터 크기 및 쿼리 처리 시간을 줄이는 데 도움이 되는 Azure AI 검색 모든 최적화 기술을 다룹니다.

검색 인덱스의 벡터 필드 정의에서 벡터 최적화 설정을 지정합니다. 이 문서에 설명된 대부분의 기능은 일반적으로 해당 버전을 대상으로 하는 latest stable REST API 버전 및 Azure SDK 패키지에서 사용할 수 있습니다.

옵션 평가

벡터 필드에서 사용하는 스토리지 양을 줄이기 위해 Azure AI 검색 방법을 검토합니다. 이러한 방법은 상호 배타적이지 않으므로 벡터 크기를 최대로 줄이기 위해 결합할 수 있습니다.

최소한의 노력으로 메모리 및 디스크에서 벡터 크기를 압축하므로 기본 제공 양자화가 권장됩니다. 이 방법은 대부분의 시나리오에서 가장 큰 이점을 제공하는 경향이 있습니다. 반면, 좁은 형식(float16 제외)을 만들 stored 려면 특별한 노력이 필요하며 메모리만큼 비용이 많이 들지 않는 디스크 스토리지에 저장합니다.

접근 이 방법을 사용하는 이유
스칼라 또는 이진 양자화 추가 네이티브 float32 또는 float16 임베딩을 int8(스칼라) 또는 바이트(이진)로 압축합니다. 이 옵션은 쿼리 성능 저하 없이 메모리 및 디스크의 스토리지를 줄입니다. int8 또는 byte와 같은 작은 데이터 형식은 더 큰 포함 항목이 있는 데이터 형식보다 콘텐츠가 덜 풍부한 벡터 인덱스를 생성합니다. 정보 손실을 상쇄하기 위해 내장된 압축에는 비압축 임베딩과 오버샘플링을 사용한 관련 결과 반환을 통해 쿼리 후 처리 옵션을 제공합니다. 재정렬 및 오버샘플링은 float32 또는 float16 필드의 기본 제공 양자화의 특정 특징이며, 사용자 지정 양자화가 적용된 임베딩에는 사용할 수 없습니다.
MRL 지원 text-embedding-3 모델의 차원 축소 텍스트 임베딩-3 모델에서 더 적은 차원을 사용하십시오. Azure OpenAI에서 이러한 모델은 서로 다른 수준의 압축에서 여러 벡터 표현을 생성하는 Matryoshka Representation Learning 기술을 다시 학습합니다. 이 방법은 의미 체계 정보의 손실을 최소화하면서 더 빠른 검색 및 스토리지 비용을 절감합니다. Azure AI 검색에서 MRL 지원은 스칼라 및 이진 양자화를 보완합니다. 두 양자화 방법 중 하나를 truncateDimension 사용하는 경우 벡터 필드에 속성을 지정하여 텍스트 포함의 차원을 줄일 수도 있습니다.
벡터 필드에 더 작은 기본 데이터 형식 할당 float16, int16, int8 및 바이트(이진)와 같은 좁은 데이터 형식은 메모리와 디스크의 공간을 적게 사용합니다. 그러나 좁은 데이터 형식으로 벡터를 출력하는 포함 모델이 있어야 합니다. 또는 작은 데이터를 출력하는 사용자 지정 양자화 논리가 있어야 합니다. 더 적은 노력이 필요한 세 번째 사용 사례는 대부분의 모델에서 생성된 네이티브 float32 포함을 float16으로 다시 캐스팅하는 것입니다. 이진 벡터에 대한 자세한 내용은 인덱스 이진 벡터를 참조하세요.
검색 가능한 벡터의 선택적 스토리지 제거 쿼리 응답에서 반환된 벡터는 쿼리 실행 중에 사용되는 벡터와 별도로 저장됩니다. 벡터를 반환할 필요가 없는 경우 검색 가능한 스토리지를 해제하여 전체 필드별 디스크 스토리지를 최대 50%까지 줄일 수 있습니다.

빈 인덱스로 이러한 옵션을 모두 정의합니다. 구현하려면 Azure 포털, REST API 또는 해당 API 버전을 대상으로 하는 Azure SDK 패키지를 사용합니다.

인덱스 정의 후 문서를 별도의 단계로 로드하고 인덱싱할 수 있습니다.

예: 벡터 압축 기술별 벡터 크기

Python를 사용하는 벡터 정량화 및 스토리지 옵션은 벡터 스토리지 양자화, 다음 데이터 형식 및 저장소 속성 사용에 따라 다른 여러 검색 인덱스를 만드는 Python 코드 샘플입니다.

이 코드는 각 벡터 스토리지 최적화 옵션에 대한 스토리지 및 벡터 인덱스 크기를 만들고 비교합니다. 이러한 결과에서 수량화 는 벡터 크기를 가장 많이 줄이지만 여러 옵션을 사용하는 경우 스토리지를 가장 많이 절약할 수 있음을 알 수 있습니다.

인덱스 이름 스토리지 크기 벡터 크기
압축 테스트-기준선 21.3613MB 4.8277MB
압축 테스트-스칼라 압축 17.7604MB 1.2242MB
압축시험-좁은 16.5567MB 2.4254MB
Compression test - 저장되지 않음 10.9224MB 4.8277MB
compressiontest-all-options 4.9192MB 1.2242MB

Search Service REST API는 인덱스 수준에서 스토리지 및 벡터 크기를 보고하므로 필드가 아닌 인덱스를 비교해야 합니다. 인덱스 - 통계 가져오기(REST API) 또는 Azure SDK 해당하는 API를 사용하여 벡터 크기를 가져옵니다.