Udostępnij za pośrednictwem


Wybieranie podejścia do optymalizacji magazynu i przetwarzania wektorów

Osadzanie lub liczbowa reprezentacja zawartości heterogenicznej są podstawą obciążeń wyszukiwania wektorowego, ale rozmiary osadzania utrudniają ich skalowanie i kosztowne przetwarzanie. Znaczące badania i produktyzacja stworzyły wiele rozwiązań w celu poprawy skali i skrócenia czasu przetwarzania. Usługa Azure AI Search umożliwia korzystanie z wielu tych funkcji w celu uzyskania szybszych i tańszych obciążeń wektorowych.

W tym artykule wymieniono wszystkie techniki optymalizacji w usłudze Azure AI Search, które mogą ułatwić skrócenie czasu przetwarzania wektorów i zapytań.

Ustawienia optymalizacji wektorów są określane w definicjach pól wektorów w indeksie wyszukiwania. Większość funkcji opisanych w tym artykule jest ogólnie dostępna w interfejsie API REST 2024-07-01 i w pakietach zestawu Azure SDK przeznaczonych dla tej wersji. Najnowsza wersja zapoznawcza dodaje obsługę obcinanych wymiarów, jeśli używasz funkcji osadzania tekstu w formacie 3-large lub text-embedding-3-small na potrzeby wektoryzacji.

Ocena opcji

Zapoznaj się z podejściami w usłudze Azure AI Search, aby zmniejszyć ilość miejsca do magazynowania używanego przez pola wektorowe. Te podejścia nie wykluczają się wzajemnie i można je połączyć w celu maksymalnego zmniejszenia rozmiaru wektora.

Zalecamy wbudowane kwantyzację, ponieważ kompresuje rozmiar wektora w pamięci i na dysku przy minimalnym wysiłku i ma tendencję do zapewnienia największej korzyści w większości scenariuszy. Natomiast wąskie typy (z wyjątkiem float16) wymagają specjalnego nakładu pracy w ich tworzeniu i stored zapisywania w magazynie dyskowym, który nie jest tak kosztowny, jak pamięć.

Metoda Dlaczego warto używać tej opcji
Dodawanie kwantyzacji skalarnych lub binarnych Użyj kwantyzacji, aby skompresować natywne float32 lub float16 osadzania do int8 (skalarnych) lub bajtów (binarnych). Ta opcja zmniejsza ilość miejsca w pamięci i na dysku bez obniżenia wydajności zapytań. Mniejsze typy danych, takie jak int8 lub Byte, generują indeksy wektorów, które są mniej bogate w zawartość niż te z większymi osadzaniami. Aby zrównoważyć utratę informacji, wbudowana kompresja obejmuje opcje przetwarzania po zapytaniu przy użyciu nieskompresowanych osadzeń i oversampling w celu zwrócenia bardziej odpowiednich wyników. Refranking i oversampling to specyficzne cechy wbudowanego kwantyzacji float32 lub float16 pól i nie można ich używać na osadzaniu, które przechodzą niestandardowe kwantyzacje.
Obcinanie wymiarów dla modeli osadzania tekstu z obsługą języka MRL—3 (wersja zapoznawcza) Przećwiczyć opcję używania mniejszej liczby wymiarów w modelach osadzania tekstu-3. W usłudze Azure OpenAI te modele zostały ponownie przeszkolone w technice uczenia reprezentacji matryoshka (MRL), która tworzy wiele reprezentacji wektorów na różnych poziomach kompresji. Takie podejście pozwala szybciej wyszukiwać i zmniejszać koszty magazynowania przy minimalnej utracie informacji semantycznych. W usłudze Azure AI Search język MRL obsługuje uzupełnienie kwantyzacji skalarnej i binarnej. W przypadku użycia jednej z metod kwantyzacji można również określić truncateDimension właściwość w polach wektorów, aby zmniejszyć wymiarowość osadzania tekstu.
Przypisywanie mniejszych typów danych pierwotnych do pól wektorów Wąskie typy danych, takie jak float16, int16, int8 i Byte (binarne) zużywają mniej miejsca w pamięci i na dysku, ale musisz mieć model osadzania, który generuje wektory w wąskim formacie danych. Możesz też mieć niestandardową logikę kwantyzacji, która generuje małe dane. Trzeci przypadek użycia, który wymaga mniejszego nakładu pracy, to ponowne odemisji natywnych osadzania float32 generowanych przez większość modeli do float16. Zobacz Indeksowanie wektorów binarnych , aby uzyskać szczegółowe informacje o wektorach binarnych.
Eliminowanie opcjonalnego przechowywania wektorów do pobrania Wektory zwracane w odpowiedzi zapytania są przechowywane oddzielnie od wektorów używanych podczas wykonywania zapytania. Jeśli nie musisz zwracać wektorów, możesz wyłączyć magazyn, który można pobrać, zmniejszając ogólny magazyn dyskowy na pole o maksymalnie 50 procent.

Wszystkie te opcje są definiowane w pustym indeksie. Aby zaimplementować dowolne z nich, użyj witryny Azure Portal, interfejsów API REST lub pakietu zestawu Azure SDK przeznaczonego dla tej wersji interfejsu API.

Po zdefiniowaniu indeksu można załadować i indeksować dokumenty jako oddzielny krok.

Przykład: rozmiar wektora według techniki kompresji wektorów

Przykład kodu: kwantyzacja wektorów i opcje magazynowania przy użyciu języka Python to przykład kodu w języku Python , który tworzy wiele indeksów wyszukiwania, które różnią się w zależności od użycia kwantyzacji magazynu wektorowego, wąskich typów danych i właściwości magazynu.

Ten kod tworzy i porównuje rozmiar magazynu i indeksu wektorowego dla każdej opcji optymalizacji magazynu wektorowego. Z tych wyników widać, że kwantyzacja zmniejsza rozmiar wektora najbardziej, ale największe oszczędności w magazynie są osiągane, jeśli używasz wielu opcji.

Nazwa indeksu Rozmiar magazynu Rozmiar wektora
compressiontest-baseline 21.3613 MB 4.8277 MB
compressiontest-scalar-compression 17.7604 MB 1.2242 MB
compressiontest-narrow 16.5567 MB 2.4254 MB
compressiontest-no-stored 10,9224 MB 4.8277 MB
compressiontest-all-options 4.9192 MB 1.2242 MB

Interfejsy API wyszukiwania raportują magazyn i rozmiar wektorów na poziomie indeksu, więc indeksy, a nie pola, muszą być podstawą porównania. Użyj statystyk indeksu GET lub równoważnego interfejsu API w zestawach SDK platformy Azure, aby uzyskać rozmiar wektora.

Zobacz też