Delen via


Een methode kiezen voor het optimaliseren van vectoropslag en -verwerking

Insluitingen, of de numerieke weergave van heterogene inhoud, vormen de basis van vectorzoekworkloads, maar de grootte van insluitingen maken ze moeilijk te schalen en duur te verwerken. Significant onderzoek en productisering hebben meerdere oplossingen geproduceerd voor het verbeteren van schaal en het verminderen van verwerkingstijden. Azure AI Search gebruikt een aantal van deze mogelijkheden voor snellere en goedkopere vectorworkloads.

In dit artikel worden alle optimalisatietechnieken in Azure AI Search opgesomd waarmee u de vectorgrootte en queryverwerkingstijden kunt verminderen.

Instellingen voor vectoroptimalisatie worden opgegeven in vectorvelddefinities in een zoekindex. De meeste functies die in dit artikel worden beschreven, zijn algemeen beschikbaar in 2024-07-01 REST API en in de Azure SDK-pakketten die gericht zijn op die versie. Met de nieuwste preview-versie wordt ondersteuning toegevoegd voor afgekapte dimensies als u gebruikmaakt van tekst-insluiten-3-groot of tekst-insluiten-3-klein voor vectorisatie.

De opties evalueren

Bekijk de benaderingen in Azure AI Search voor het verminderen van de hoeveelheid opslagruimte die wordt gebruikt door vectorvelden. Deze benaderingen sluiten elkaar niet wederzijds uit en kunnen worden gecombineerd voor maximale vermindering van vectorgrootte.

We raden ingebouwde kwantisatie aan, omdat het vectorgrootte in het geheugen en op schijf met minimale inspanning comprimeert, en dat meestal het meeste voordeel biedt in de meeste scenario's. Daarentegen vereisen smalle typen (met uitzondering van float16) een speciale inspanning om ze te maken en stored bespaart u op schijfopslag, wat niet zo duur is als geheugen.

Methode Waarom deze optie gebruiken?
Scalaire of binaire kwantisatie toevoegen Gebruik kwantisatie om systeemeigen float32- of float16-insluitingen te comprimeren naar int8 (scalaire) of Byte (binair). Deze optie vermindert de opslag in het geheugen en op de schijf zonder de prestaties van query's te verminderen. Kleinere gegevenstypen zoals int8 of Byte produceren vectorindexen die minder inhoudsrijk zijn dan die met grotere insluitingen. Om informatieverlies te compenseren, bevat ingebouwde compressie opties voor het verwerken van query's met behulp van niet-gecomprimeerde insluitingen en oversampling om relevantere resultaten te retourneren. Herrankering en oversampling zijn specifieke kenmerken van ingebouwde kwantisatie van float32- of float16-velden en kunnen niet worden gebruikt voor insluitingen die aangepaste kwantisatie ondergaan.
Dimensies afkappen voor modellen die geschikt zijn voor MRL voor tekst insluiten-3 (preview) Gebruik de optie om minder dimensies te gebruiken voor modellen met tekst insluiten-3. In Azure OpenAI zijn deze modellen opnieuw getraind op de Matryoshka Representation Learning-techniek (MRL) die meerdere vectorweergaven produceert op verschillende niveaus van compressie. Deze benadering produceert snellere zoekopdrachten en lagere opslagkosten, met minimaal verlies van semantische informatie. In Azure AI Search ondersteunt MRL scalaire en binaire kwantisatie. Wanneer u een van beide kwantisatiemethoden gebruikt, kunt u ook een truncateDimension eigenschap opgeven voor uw vectorvelden om de dimensionaliteit van tekst insluitingen te verminderen.
Kleinere primitieve gegevenstypen toewijzen aan vectorvelden Smalle gegevenstypen, zoals float16, int16, int8 en Byte (binair) verbruiken minder ruimte in het geheugen en op schijf, maar u moet een insluitmodel hebben dat vectoren uitvoert in een smalle gegevensindeling. U moet ook aangepaste kwantisatielogica hebben die kleine gegevens uitvoert. Een derde use case waarvoor minder inspanning is vereist, is het herschikken van systeemeigen float32-insluitingen die door de meeste modellen worden geproduceerd om te zweven16. Zie Binaire indexvectoren voor meer informatie over binaire vectoren.
Optionele opslag van ophaalbare vectoren elimineren Vectoren die in een queryantwoord worden geretourneerd, worden afzonderlijk opgeslagen van vectoren die worden gebruikt tijdens het uitvoeren van de query. Als u geen vectoren hoeft te retourneren, kunt u ophaalbare opslag uitschakelen, waardoor de totale schijfopslag per veld met maximaal 50 procent wordt verminderd.

Al deze opties worden gedefinieerd in een lege index. Als u een van deze pakketten wilt implementeren, gebruikt u Azure Portal, REST API's of een Azure SDK-pakket dat is gericht op die API-versie.

Nadat de index is gedefinieerd, kunt u documenten laden en indexeren als een afzonderlijke stap.

Voorbeeld: vectorgrootte per vectorcompressietechniek

Codevoorbeeld: Vector kwantisatie en opslagopties met behulp van Python is een Python-codevoorbeeld waarmee meerdere zoekindexen worden gemaakt die variƫren op basis van het gebruik van vectoropslag kwantisatie, smalle gegevenstypen en opslageigenschappen.

Met deze code maakt en vergelijkt u de opslag- en vectorindexgrootte voor elke optie voor optimalisatie van vectoropslag. In deze resultaten kunt u zien dat kwantisatie de meeste vectorgrootte vermindert, maar de grootste opslagbesparingen worden bereikt als u meerdere opties gebruikt.

Naam van de index Opslaggrootte Vectorgrootte
compressietestbasislijn 21.3613MB 4,8277 MB
compressiontest-scalar-compression 17.7604MB 1,2242 MB
compressietest-smal 16,5567 MB 2,4254 MB
compressiontest-no-stored 10.9224MB 4,8277 MB
compressiontest-all-options 4,9192 MB 1,2242 MB

Zoek-API's rapporteren opslag en vectorgrootte op indexniveau, dus indexen en geen velden moeten de basis van vergelijking zijn. Gebruik de GET Index Statistics of een equivalente API in de Azure SDK's om vectorgrootte te verkrijgen.

Zie ook