Hur accelererar produktkvantisering stora privata vektorsamlingar?

Eva Wong är Teknisk skribent och den boende fixaren på ZimaSpace. En livslång nörd med en passion för hemma-labb och öppen källkod, hon specialiserar sig på att översätta komplexa tekniska koncept till tillgängliga, praktiska guider. Eva tror att självhosting ska vara roligt, inte skrämmande. Genom sina handledningar ger hon gemenskapen verktyg att avmystifiera hårdvaruinstallationer, från att bygga sin första NAS till att bemästra Docker-containrar.

Produktkvantisering accelererar stora privata vektorsamlingar genom att dela upp embeddingar i delutrymmen och ersätta varje delvektor med en kompakt, inlärd centroidkod.

Detta är en specifik mekanism inom den bredare familjen av vektorkvantisering. I stället för att reducera varje koordinat individuellt lär PQ sig flera mindre kodböcker och representerar en högdimensionell embedding som en sekvens av kod-ID:n. En hemsökserver kan hålla betydligt fler av dessa koder i minnet och uppskatta frågeavstånd från förberäknade tabeller, vilket minskar både antalet lagrade vektorbyte och mängden flyttalsaritmetik med full precision som behövs under en bred kandidatsökning.

PQ delar upp en högdimensionell embedding i flera delvektorer

Anta att en embedding har dimensionen `d`. PQ väljer `M` delkvantiserare och delar upp koordinaterna i `M` block med lägre dimension, så att varje block kan modelleras separat.

Antalet delkvantiserare avgör hur många block med lägre dimension som den ursprungliga embeddingen delas upp i och därmed hur många kod-ID:n som utgör en PQ-representation.

Det är denna faktorisering som har gett produktkvantisering dess namn: hela approximationen sätts samman av val som görs oberoende i flera delutrymmen, i stället för från en enda enorm kodbok över hela vektorn. Delutrymmena måste dela upp vektordimensionerna på ett kompatibelt sätt. Deras storlek och antal påverkar komprimering, kostnaden för att träna kodboken, avståndsnoggrannheten och hur väl datadistributionen passar den faktoriserade representationen.

Varje delutrymme lär sig en kodbok med representativa centroider

PQ tränas normalt på ett representativt urval av samlingen. För varje delutrymme hittar klustring centroidvektorer som representerar grupper av liknande delvektorer.

En typisk produktkvantiserare använder k-means för att lära sig centroider inom varje delutrymme och minimerar approximationsfelet mellan träningsdelvektorerna och deras tilldelade representanter.

Efter träningen behöver databasen inte längre lagra alla ursprungliga koordinater i den kompakta sökkoden. Den behöver bara identifieraren för den närmaste centroiden från varje delutrymme.

Om träningsurvalet representerar framtida hushållsdokument dåligt kan de inlärda centroiderna approximera senare vektorer på ett bristfälligt sätt. Kodbokskvalitet är därför en implementeringsgräns, inte en engångsdetalj som kan ignoreras.

Den lagrade vektorn blir en kort sekvens av kod-ID:n

För varje delvektor hittar kodaren den närmaste centroiden och lagrar centroidens index. Genom att sammanfoga de `M` indexen bildas PQ-koden för hela embeddingen.

Att lagra m delvektorskoder med konfigurerbara bitar ersätter en lång flyttalsarray med en kort sekvens av centroididentifierare samt delade kodböcker.

Åtta bitar per delkvantiserare kan till exempel representera 256 centroidval i det delutrymmet. Den totala vektorkoden växer då med antalet delkvantiserare, i stället för med 32-bitars precision för varje ursprunglig dimension. Kodböcker och indexöverhead använder fortfarande minne, så hela samlingen är större än enbart kodbytesen. Besparingarna blir mest betydelsefulla när vektorantalet är tillräckligt stort för att de delade kodböckerna ska kunna fördelas över många vektorer.

-15% OFF
Single board computer zimaboard2

En fråga bygger uppslagstabeller för avstånd för varje delutrymme

När en fråga anländer delar systemet upp den i samma delutrymmen och beräknar dess avstånd till varje centroid i varje kodbok. Dessa värden bildar små uppslagstabeller.

En avståndstabell mellan fråga och centroid förberäknar frågans avstånd till varje centroid i varje delutrymme, så att kandidatavstånd kan sättas samman från små uppslag i stället för aritmetik på hela vektorer.

För att uppskatta avståndet till en lagrad databasvektor behöver sökningen inte längre återskapa varje fullständig koordinat. Den läser varje kod-ID, slår upp motsvarande delutrymmesavstånd och summerar värdena.

Denna tabellstyrda metod kallas ofta asymmetrisk avståndsberäkning, eftersom frågan kan behålla hög precision medan databasvektorerna representeras av kvantiserade koder.

Kompakta koder förbättrar cachelokaliteten när samlingar växer

Stora vektorskanningar begränsas ofta av att kandidatdata måste flyttas genom minnet, snarare än av den matematiska komplexiteten i en enskild avståndsberäkning.

Korta koder gör att fler kandidater får plats i processorernas cacheminnen och minskar bandbredden per jämförelse.

Den komprimerade avståndsberäkningsvägen kan accelereras med SIMD-vänliga tabelluppslag, eftersom produktkvantiserad sökning upprepade gånger läser kompakta koder och ackumulerar delutrymmesavstånd.

I en privat hemsamling kan det vara skillnaden mellan ett index vars aktiva sökrepresentation får plats i RAM och ett index som hela tiden konkurrerar med den lokala LLM:en, databasen och filsystemets cache.

Fördelarna blir mindre när samlingen är liten, när metadatafiltrering reducerar varje fråga till en handfull vektorer eller när ett annat indexlager dominerar fördröjningen.

PQ byter vanligtvis viss träffsäkerhet mot komprimering och hastighet

Centroidkoder approximerar de ursprungliga delvektorerna, så två kandidater kan byta plats när deras verkliga avstånd ligger nära varandra. Mer aggressiv komprimering lämnar i allmänhet mindre information kvar för att skilja dem åt.

Att betrakta produktkvantisering som förlustbringande komprimering gör gränsen tydlig: mindre koder minskar vektorminnet, men kvantiseringsfel kan ändra ordningen mellan närliggande grannar.

Fler delkvantiserare eller fler bitar kan bevara mer detaljer, men gör varje kod och uppslagsstrukturerna större. Mindre koder sparar mer minne, men ökar risken för kvantiseringsfel. Den användbara konfigurationen är specifik för korpusen. Närbesläktade manualer, duplicerade dokumentversioner och detaljerad kodsökning kan kräva mer precision än bred semantisk sökning över varierade hushållsanteckningar.

En kompakt första sökning kan följas av omsortering med full precision

PQ kräver inte att det slutliga svaret blint litar på den komprimerade avståndsordningen. Ett system kan hämta en bredare kandidat mängd med PQ och sedan beräkna om rangordningen för endast dessa kandidater med hjälp av ursprungliga vektorer som lagras någon annanstans.

Inom semantisk vektorhämtning ändrar PQ den representation som används för kandid jämförelser; proveniens, metadatafiltrering, omrankning och RAG fungerar fortfarande runt detta vektor steg.

Denna tvåstegsmetod fördelar minne och beräkningskraft asymmetriskt: kompakta koder hanterar det stora kandidat utrymmet, medan exakta vektorer endast används för en liten kortlista.

Produktkvantisering accelererar en privat samling när kompakta koder avsevärt minskar arbetsmängden och avståndstrafiken utan att den uppmätta träffsäkerheten sjunker under den evidenskvalitet som det lokala RAG-systemet kräver.

Teknik- och AI-hubb

Mer att läsa

Get More Builds Like This

Stay in the Loop

Get updates from Zima - new products, exclusive deals, and real builds from the community.

Stay in the Loop preferences

We respect your inbox. Unsubscribe anytime.