Välj en metod för att optimera vektorlagring och bearbetning
Inbäddningar, eller den numeriska representationen av heterogent innehåll, är grunden för vektorsökningsarbetsbelastningar, men inbäddningarnas storlekar gör dem svåra att skala och dyra att bearbeta. Betydande forskning och produktisering har skapat flera lösningar för att förbättra skalningstiden och minska bearbetningstiderna. Azure AI Search utnyttjar ett antal av dessa funktioner för snabbare och billigare vektorarbetsbelastningar.
Den här artikeln räknar upp alla optimeringstekniker i Azure AI Search som kan hjälpa dig att minska vektorstorleken och frågebearbetningstiderna.
Vektoroptimeringsinställningar anges i definitioner för vektorfält i ett sökindex. De flesta funktioner som beskrivs i den här artikeln är allmänt tillgängliga i REST-API :et 2024-07-01 och i Azure SDK-paket som riktar sig mot den versionen. Den senaste förhandsversionen lägger till stöd för trunkerade dimensioner om du använder text-embedding-3-large eller text-embedding-3-small för vektorisering.
Utvärdera alternativen
Granska metoderna i Azure AI Search för att minska mängden lagringsutrymme som används av vektorfält. Dessa metoder är inte ömsesidigt uteslutande och kan kombineras för maximal minskning av vektorstorleken.
Vi rekommenderar inbyggd kvantisering eftersom den komprimerar vektorstorleken i minnet och på disken med minimal ansträngning och som tenderar att ge mest nytta i de flesta scenarier. Däremot kräver smala typer (förutom float16) en särskild ansträngning för att göra dem och stored
sparar på disklagring, vilket inte är lika dyrt som minne.
Metod | Varför använda detta alternativ? |
---|---|
Lägga till skalär eller binär kvantisering | Använd kvantisering för att komprimera interna float32- eller float16-inbäddningar till int8 (skalär) eller Byte (binär). Det här alternativet minskar lagringen i minnet och på disken utan försämrad frågeprestanda. Mindre datatyper som int8 eller Byte skapar vektorindex som är mindre innehållsrika än de med större inbäddningar. För att kompensera för informationsförlust innehåller inbyggd komprimering alternativ för bearbetning efter fråga med okomprimerade inbäddningar och översampling för att returnera mer relevanta resultat. Reranking och översampling är specifika funktioner i den inbyggda kvantiseringen av float32- eller float16-fält och kan inte användas på inbäddningar som genomgår anpassad kvantisering. |
Trunkera dimensioner för MRL-kompatibla text-embedding-3-modeller (förhandsversion) | Använd alternativet för att använda färre dimensioner på text-embedding-3-modeller. I Azure OpenAI har de här modellerna tränats om med tekniken Matryoshka Representation Learning (MRL) som producerar flera vektorrepresentationer på olika komprimeringsnivåer. Den här metoden ger snabbare sökningar och minskade lagringskostnader, med minimal förlust av semantisk information. I Azure AI Search har MRL stöd för skalära och binära kvantiseringar. När du använder någon av kvantiseringsmetoderna kan du också ange en truncateDimension egenskap för dina vektorfält för att minska dimensionaliteten för text-inbäddningar. |
Tilldela mindre primitiva datatyper till vektorfält | Smala datatyper, till exempel float16, int16, int8 och Byte (binär) förbrukar mindre utrymme i minnet och på disken, men du måste ha en inbäddningsmodell som matar ut vektorer i ett smalt dataformat. Eller så måste du ha anpassad kvantiseringslogik som matar ut små data. Ett tredje användningsfall som kräver mindre arbete är omarbetning av inbäddning av inbyggda float32-inbäddningar som produceras av de flesta modeller till float16. Mer information om binära vektorer finns i Index binära vektorer. |
Eliminera valfri lagring av hämtningsbara vektorer | Vektorer som returneras i ett frågesvar lagras separat från vektorer som används vid frågekörning. Om du inte behöver returnera vektorer kan du inaktivera hämtningsbar lagring, vilket minskar den totala disklagringen per fält med upp till 50 procent. |
Alla dessa alternativ definieras för ett tomt index. Om du vill implementera någon av dem använder du Azure Portal, REST API:er eller ett Azure SDK-paket som riktar sig till den API-versionen.
När indexet har definierats kan du läsa in och indexeras som ett separat steg.
Exempel: vektorstorlek efter vektorkomprimeringsteknik
Kodexempel: Vektorkvantisering och lagringsalternativ med Python är ett Python-kodexempel som skapar flera sökindex som varierar beroende på hur de använder kvantisering av vektorlagring, smala datatyper och lagringsegenskaper.
Den här koden skapar och jämför lagrings- och vektorindexstorleken för varje vektorlagringsalternativ. Från dessa resultat kan du se att kvantisering minskar vektorstorleken mest, men de största lagringsbesparingarna uppnås om du använder flera alternativ.
Indexnamn | Lagringsstorlek | Vektorstorlek |
---|---|---|
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 |
Sök-API:er rapporterar lagring och vektorstorlek på indexnivå, så index och inte fält måste ligga till grund för jämförelsen. Använd GET Index Statistics eller ett motsvarande API i Azure SDK:erna för att hämta vektorstorlek.