Volba přístupu pro optimalizaci úložiště a zpracování vektorů
Vkládání nebo číselná reprezentace heterogenního obsahu jsou základem úloh vektorového vyhledávání, ale velikosti vkládání je obtížné škálovat a nákladně zpracovávat. Významné výzkumy a produktizace vytvořily několik řešení pro zlepšení škálování a zkrácení doby zpracování. Azure AI Search narazí na řadu těchto funkcí pro rychlejší a levnější vektorové úlohy.
Tento článek obsahuje výčet všech technik optimalizace ve službě Azure AI Search, které vám pomůžou zmenšit velikost vektoru a doby zpracování dotazů.
Nastavení optimalizace vektorů se zadává v definicích vektorového pole v indexu vyhledávání. Většina funkcí popsaných v tomto článku je obecně dostupná v rozhraní REST API 2024-07-01 a v balíčcích sady Azure SDK, které cílí na tuto verzi. Nejnovější verze Preview přidává podporu zkrácených dimenzí, pokud pro vektorizaci používáte text-embedding-3-large nebo text-embedding-3-small.
Vyhodnocení možností
Projděte si přístupy ve službě Azure AI Search a snižte množství úložiště používaného vektorovými poli. Tyto přístupy se vzájemně nevylučují a lze je kombinovat pro maximální zmenšení velikosti vektoru.
Doporučujeme předdefinované kvantování, protože komprimuje velikost vektoru v paměti a na disku s minimálním úsilím a ve většině scénářů poskytuje největší výhodu. Naproti tomu úzké typy (s výjimkou float16) vyžadují zvláštní úsilí při jejich vytváření a stored
šetří diskové úložiště, což není tak nákladné jako paměť.
Přístup | Proč tuto možnost použít |
---|---|
Přidání skalární nebo binární kvantování | Pomocí kvantování můžete komprimovat nativní float32 nebo float16 vkládání na int8 (skalární) nebo bajt (binární). Tato možnost snižuje úložiště v paměti a na disku bez snížení výkonu dotazů. Menší datové typy, jako jsou int8 nebo Bajt, vytvářejí vektorové indexy, které jsou méně bohaté na obsah než ty, které mají větší vkládání. K posunu ztráty informací obsahuje integrovaná komprese možnosti následného zpracování dotazů pomocí nekomprimovaných vkládání a převzorkování pro vrácení relevantnějších výsledků. Přehodnocení a převzorkování jsou specifické funkce předdefinované kvantování polí float32 nebo float16 a nelze je použít při vkládání, které procházejí vlastní kvantizací. |
Zkrácení dimenzí pro modely s podporou MRL pro vkládání textu -3 (Preview) | Využijte možnost použít méně dimenzí u modelů pro vkládání textu-3. V Azure OpenAI byly tyto modely přetrénovány na technice Matryoshka Representation Learning (MRL), která vytváří více vektorových reprezentací na různých úrovních komprese. Tento přístup vytváří rychlejší vyhledávání a snižuje náklady na úložiště s minimální ztrátou sémantických informací. Ve službě Azure AI Search podporuje MRL doplňky skalární a binární kvantování. Pokud použijete některou truncateDimension metodu kvantování, můžete také zadat vlastnost u vektorových polí, abyste snížili dimenzionální rozměry vkládání textu. |
Přiřazení menších primitivních datových typů k vektorům polím | Úzké datové typy, jako je float16, int16, int8 a Byte (binární), spotřebovávají méně místa v paměti a na disku, ale musíte mít model pro vložení, který vypíše vektory v úzkém datovém formátu. Nebo musíte mít vlastní logiku kvantování, která vypíše malá data. Třetí případ použití, který vyžaduje menší úsilí, spočívá v přesílání nativních vkládání float32 vytvořených většinou modelů na float16. Podrobnosti o binárních vektorech binárních vektorů naleznete v tématu Index binární vektory. |
Eliminujte volitelné ukládání vektorů, které lze načíst. | Vektory vrácené v odpovědi dotazu se ukládají odděleně od vektorů používaných během provádění dotazu. Pokud nepotřebujete vracet vektory, můžete vypnout úložiště s možností načítání a snížit celkové úložiště disku na pole o až 50 procent. |
Všechny tyto možnosti jsou definovány na prázdném indexu. K implementaci některé z nich použijte Azure Portal, rozhraní REST API nebo balíček sady Azure SDK, který cílí na tuto verzi rozhraní API.
Po definování indexu můžete dokumenty načíst a indexovat jako samostatný krok.
Příklad: velikost vektoru podle techniky komprese vektorů
Ukázka kódu: Vektorové kvantování a možnosti úložiště pomocí Pythonu je ukázka kódu Pythonu , která vytváří více indexů vyhledávání, které se liší pomocí kvantování vektorového úložiště, úzkých datových typů a vlastností úložiště.
Tento kód vytvoří a porovná velikost indexu úložiště a vektoru pro každou možnost optimalizace úložiště vektorů. Z těchto výsledků vidíte, že kvantování zmenšuje velikost vektoru nejvíce, ale největší úspora úložiště se dosáhne, pokud použijete více možností.
Název indexu | Velikost úložiště | Velikost vektoru |
---|---|---|
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 |
Rozhraní API pro vyhledávání hlásí úložiště a velikost vektoru na úrovni indexu, takže indexy a nikoli pole musí být základem porovnání. K získání velikosti vektoru použijte statistiku indexu GET nebo ekvivalentní rozhraní API v sadách Azure SDK.