벡터 스토리지 및 처리를 최적화하는 방법 선택
임베딩 또는 이질적인 콘텐츠의 숫자 표현은 벡터 검색 워크로드의 기초이지만 포함 크기는 크기 조정이 어렵고 처리 비용이 많이 듭니다. 중요한 연구 및 제품화는 규모를 개선하고 처리 시간을 줄이기 위한 여러 솔루션을 생성했습니다. Azure AI Search는 더 빠르고 저렴한 벡터 워크로드를 위해 이러한 기능을 많이 활용합니다.
이 문서에서는 벡터 크기 및 쿼리 처리 시간을 줄이는 데 도움이 되는 Azure AI Search의 모든 최적화 기술을 열거합니다.
벡터 최적화 설정은 검색 인덱스의 벡터 필드 정의에 지정됩니다. 이 문서에 설명된 대부분의 기능은 2024-07-01 REST API 및 해당 버전을 대상으로 하는 Azure SDK 패키지에서 일반적으로 사용할 수 있습니다. 최신 미리 보기 버전은 벡터화에 텍스트 포함-3-large 또는 text-embedding-3-small을 사용하는 경우 잘린 차원에 대한 지원을 추가합니다.
옵션 평가
Azure AI Search의 접근 방식을 검토하여 벡터 필드에서 사용하는 스토리지 양을 줄입니다. 이러한 접근 방식은 상호 배타적이지 않으며 벡터 크기를 최대로 줄이기 위해 결합할 수 있습니다.
기본 제공 양자화는 최소한의 활동으로 메모리와 디스크의 벡터 크기를 압축하고 대부분의 시나리오에서 가장 큰 이점을 제공하는 경향이 있으므로 권장됩니다. 대조적으로, 좁은 형식(float16 제외)은 이를 만드는데 특별한 활동이 필요하며, stored
는 메모리만큼 비싸지 않은 디스크 스토리지를 절약합니다.
접근법 | 옵션 사용 이유 |
---|---|
스칼라 또는 이진 양자화 추가 | 양자화를 사용하여 네이티브 float32 또는 float16 임베딩을 int8(스칼라) 또는 Byte(이진)로 압축합니다. 이 옵션은 쿼리 성능 저하 없이 메모리 및 디스크의 스토리지를 줄입니다. int8 또는 Byte와 같은 더 작은 데이터 형식은 임베딩이 큰 데이터 형식을 사용하는 것보다 콘텐츠가 덜 풍부한 벡터 인덱스를 생성합니다. 정보 손실을 상쇄하기 위해 기본 제공 압축에는 압축되지 않은 포함 및 오버샘플링을 사용하여 보다 관련성이 높은 결과를 반환하는 쿼리 후 처리 옵션이 포함되어 있습니다. 순위 재지정 및 과다 샘플링은 float32 또는 float16 필드의 기본 제공 양자화에 특정된 기능이며 사용자 지정 양자화를 수행하는 임베딩에는 사용할 수 없습니다. |
MRL 지원 텍스트 포함-3 모델의 차원 자르기(미리 보기) | 텍스트 포함-3 모델에서 더 적은 차원을 사용하는 옵션을 연습합니다. Azure OpenAI에서 이러한 모델은 다양한 수준의 압축에서 여러 벡터 표현을 생성하는 MRL(Matryoshka Representation Learning) 기술을 다시 학습했습니다. 이 방법은 의미 체계 정보의 손실을 최소화하면서 더 빠른 검색 및 스토리지 비용을 절감합니다. Azure AI Search에서 MRL은 스칼라 및 이진 양자화를 보완합니다. 두 양자화 방법 중 하나를 truncateDimension 사용하는 경우 벡터 필드에 속성을 지정하여 텍스트 포함의 차원을 줄일 수도 있습니다. |
벡터 필드에 더 작은 기본 데이터 형식 할당 | float16, int16, int8 및 Byte(이진)와 같은 좁은 데이터 형식은 메모리와 디스크에서 더 적은 공간을 사용하지만 좁은 데이터 서식으로 벡터를 출력하는 포함 모델이 있어야 합니다. 또는 작은 데이터를 출력하는 사용자 지정 양자화 논리가 있어야 합니다. 더 적은 활동이 필요한 세 번째 사용 사례는 대부분의 모델에서 생성된 네이티브 float32 임베딩을 float16으로 다시 캐스팅하는 것입니다. 이진 파일 벡터에 대한 자세한 내용은 인덱스 이진 파일 벡터를 참조하세요. |
선택적 검색 가능 벡터 스토리지 제거 | 쿼리 응답에서 반환되는 벡터는 쿼리 실행 중에 사용되는 벡터와 별도로 저장됩니다. 벡터를 반환할 필요가 없는 경우 검색 가능 디스크 스토리지를 비활성화하여 전체 필드별 스토리지를 최대 50%까지 줄일 수 있습니다. |
이러한 옵션 모두는 빈 인덱스로 정의됩니다. 이들 중 하나를 구현하려면 Azure Portal, REST API 또는 해당 API 버전을 대상으로 하는 Azure SDK 패키지를 사용하세요.
인덱스가 정의되면 문서를 별도의 단계로 로드하고 인덱싱할 수 있습니다.
예: 벡터 압축 기술별 벡터 크기
코드 샘플: Python을 사용하는 벡터 정량화 및 스토리지 옵션은 벡터 스토리지 양자화, 좁은 데이터 형식 및 스토리지 속성의 사용에 따라 다른 여러 검색 인덱스를 만드는 Python 코드 샘플입니다.
이 코드는 각 벡터 스토리지 최적화 옵션에 대한 스토리지 및 벡터 인덱스 크기를 만들고 비교합니다. 이러한 결과에서 수량화는 벡터 크기를 가장 많이 줄이지만 여러 옵션을 사용하는 경우 스토리지를 가장 많이 절약할 수 있음을 알 수 있습니다.
인덱스 이름 | 스토리지 크기 | 벡터 크기 |
---|---|---|
compressiontest-baseline | 21.3613MB | 4.8277MB |
compressiontest-scalar-compression | 17.7604MB | 1.2242MB |
compressiontest-narrow | 16.5567MB | 2.4254MB |
compressiontest-no-stored | 10.9224MB | 4.8277MB |
compressiontest-all-options | 4.9192MB | 1.2242MB |
검색 API는 인덱스 수준에서 스토리지 및 벡터 크기를 보고하므로 필드가 아닌 인덱스가 비교 기준이 되어야 합니다. Azure SDK에서 인덱스 통계 가져오기 또는 해당 API를 사용하여 벡터 크기를 가져옵니다.