Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Note
Azure AI-sökning är tillgängligt via Azure-portalen, REST-API:er och Azure-SDK:er. Den ligger också till grund för Foundry IQ, det hanterade kunskapsskiktet som omvandlar företagsinnehåll till återanvändbara, behörighetsmedvetna kunskapsbaser för agenter i Microsoft Foundry-portalen.
Inbäddningar, eller den numeriska representationen av heterogent innehåll, är grunden för vektorsökningsarbetsbelastningar. Men storleken på inbäddningar 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-sökning utnyttjar ett antal av dessa funktioner för snabbare och billigare vektorarbetsbelastningar.
Den här artikeln beskriver alla optimeringstekniker i Azure AI-sökning som kan hjälpa dig att minska vektorstorleken och frågebearbetningstiderna.
Du anger vektoroptimeringsinställningar i vektorfältdefinitioner i ett sökindex. De flesta funktioner som beskrivs i den här artikeln är allmänt tillgängliga i den test stabila REST API-versionen och Azure SDKs paket som riktar sig mot den versionen.
Utvärdera alternativen
Granska metoderna i Azure AI-sökning för att minska mängden lagringsutrymme som används av vektorfält. Dessa metoder är inte ömsesidigt uteslutande, så du kan kombinera dem för maximal minskning av vektorstorleken.
Vi rekommenderar inbyggd kvantisering eftersom den komprimerar vektorstorleken i minnet och på disken med minimal ansträngning. Den här metoden tenderar att ge mest nytta i de flesta scenarier. Däremot kräver smala typer (förutom float16) särskilda ansträngningar för att skapa dem och stored sparar på disklagring, vilket inte är lika dyrt som minne.
| Tillvägagångssätt | Varför ska du använda den här metoden? |
|---|---|
| Lägga till skalär eller binär kvantisering | 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, till exempel 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ågor med hjälp av 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 | Använd färre dimensioner på text-embedding-3-modeller. På Azure OpenAI tränas dessa modeller om på 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-sökning kompletterar MRL stöd för skalär och binär kvantisering. 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. Du måste dock ha en inbäddningsmodell som matar ut vektorer i ett smalt dataformat. Du måste också ha anpassad kvantiseringslogik som matar ut små data. Ett tredje användningsfall som kräver mindre ansträngning är att omvandla float32-inbäddningar, som de flesta modeller producerar, till float16. 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 under frågekörning. Om du inte behöver returnera vektorer kan du inaktivera hämtningsbar lagring för att minska den totala disklagringen per fält med upp till 50 procent. |
Definiera alla dessa alternativ i ett tomt index. Om du vill implementera någon av dem använder du Azure-portalen, REST-API:er eller ett Azure SDKs paket som riktar sig till den API-versionen.
Efter att du har definierat indexet kan du läsa in dokument och indexera dem som ett separat steg.
Exempel: Vektorstorlek efter vektorkomprimeringsteknik
Vector-kvantisering och lagringsalternativ med hjälp av Python är ett Python-kodexempel som skapar flera sökindex som varierar beroende på deras användning av 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 |
|---|---|---|
| kompressionstest-baslinje | 21,3613 MB | 4,8277 MB |
| kompressionstest-skalär-kompression | 17,7604 MB | 1,2242 MB |
| compressiontest-narrow | 16,5567 MB | 2,4254 MB |
| komprimeringstest-ingen-lagrad | 10,9224 MB | 4,8277 MB |
| kompressionstest-alla-alternativ | 4,9192 MB | 1,2242 MB |
REST-API:er för söktjänsten rapporterar lagring och vektorstorlek på indexnivå, så du måste jämföra index i stället för fält. Använd Indexes – Hämta statistik (REST API) eller ett motsvarande API i Azure-SDK:er för att hämta vektorstorlek.