A vektorok tárolásának és feldolgozásának optimalizálására szolgáló módszer kiválasztása

Note

Azure AI Keresés a Azure portálon, REST API-kon és Azure SDK-k keresztül érhető el. Emellett a Foundry IQ-t is támogatja, amely a vállalati tartalmakat újrafelhasználható, engedélytudatos tudásbázisokká alakítja át az Microsoft Foundry portálon található ügynökök számára.

A beágyazások vagy a heterogén tartalom numerikus ábrázolása a vektorkeresési számítási feladatok alapja. A beágyazások mérete azonban megnehezíti a méretezést és a feldolgozást. A jelentős kutatás és termékfejlesztés számos megoldást hozott létre a skálázás javítására és a feldolgozási idő csökkentésére. Azure AI Keresés számos ilyen képességre koppintva gyorsabb és olcsóbb vektoros számítási feladatokat hozhat létre.

Ez a cikk a Azure AI Keresés összes olyan optimalizálási technikáját ismerteti, amely segíthet csökkenteni a vektorméretet és a lekérdezésfeldolgozási időt.

Vektoroptimalizálási beállításokat adhat meg a vektormező-definíciókban egy keresési indexben. A cikkben ismertetett funkciók többsége általánosan elérhető a latest stabil REST API-verzióban és Azure SDK az adott verziót célzó csomagokban.

A beállítások kiértékelése

Tekintse át a Azure AI Keresés a vektormezők által használt tárterület mennyiségének csökkentésére vonatkozó megközelítéseket. Ezek a megközelítések nem zárják ki egymást, így kombinálhatja őket a vektorméret maximális csökkentése érdekében.

A beépített kvantálást azért javasoljuk, mert minimális erőfeszítéssel tömöríti a vektorméretet a memóriában és a lemezen. Ez a megközelítés általában a legtöbb forgatókönyvben a leghasznosabb. Ezzel szemben a keskeny típusok (kivéve a float16-ot) különleges erőfeszítéseket igényelnek a létrehozásukhoz, és stored a lemeztárolón menthetők, ami nem olyan költséges, mint a memória.

Megközelítés Miért érdemes ezt a megközelítést használni?
Skaláris vagy bináris kvantálás hozzáadása Natív float32 vagy float16 beágyazások tömörítése int8 (skaláris) vagy bájt (bináris) formátumba. Ez a beállítás csökkenti a memória és a lemez tárhelyét a lekérdezési teljesítmény romlása nélkül. A kisebb adattípusok( például int8 vagy bájt) olyan vektorindexeket hoznak létre, amelyek kevésbé tartalomban gazdagok, mint a nagyobb beágyazásokkal rendelkezők. Az információvesztés eltolásához a beépített tömörítés a lekérdezés utáni feldolgozásra vonatkozó beállításokat tartalmaz tömörítetlen beágyazások és túlbélyegzés használatával a relevánsabb eredmények visszaadásához. Az átrangsorolás és a túlmintavétel a float32 vagy float16 mezők beépített kvantálásának speciális jellemzői, és nem használhatók olyan embeddings esetében, amelyek egyéni kvantáláson esnek át.
Rácsos dimenziók MRL-kompatibilis szövegbeágyazási-3 modellekhez Kevesebb dimenzió használata szövegbeágyazási-3 modelleken. Az OpenAI Azure ezeket a modelleket újratanítja a Matryoshka Representation Learning (MRL) technikával, amely több vektorképezést hoz létre különböző tömörítési szinteken. Ez a megközelítés gyorsabb kereséseket és alacsonyabb tárolási költségeket eredményez a szemantikai információk minimális elvesztésével. Az Azure AI Keresés MRL támogatása kiegészíti a skaláris és bináris kvantálást. Kvantálási módszer használata esetén megadhatja a truncateDimension vektormezők egyik tulajdonságát is, hogy csökkentse a szövegbeágyazások dimenzióját.
Kisebb primitív adattípusok hozzárendelése vektormezőkhöz A szűk adattípusok, például a float16, az int16, az int8 és a bájt (bináris) kevesebb helyet foglalnak el a memóriában és a lemezen. Azonban olyan beágyazási modellel kell rendelkeznie, amely a vektorokat keskeny adatformátumban adja ki. Másik lehetőségként egyéni kvantálási logikával kell rendelkeznie, amely kis adatokat ad ki. A harmadik olyan használati eset, amely kevesebb erőfeszítést igényel, a legtöbb modell által előállított natív float32-beágyazások átdolgozása a float16-ba. A bináris vektorokról további információt az Index bináris vektorok című témakörben talál.
A beolvasható vektorok nem kötelező tárolásának megszüntetése A lekérdezési válaszban visszaadott vektorok tárolása külön történik a lekérdezés végrehajtása során használt vektoroktól. Ha nem kell vektorokat visszaadnia, kikapcsolhatja a beolvasható tárolót, így akár 50 százalékkal is csökkentheti a mezőnkénti lemezterület teljes tárterületét.

Definiálja az összes beállítást egy üres indexen. Bármelyik implementálásához használja a Azure portált, REST API-kat vagy egy Azure SDK csomagot, amely az ADOTT API-verziót célozza.

Az index definiálása után külön lépésként töltheti be és indexelheti a dokumentumokat.

Példa: Vektorméret vektoros tömörítési technikával

Vektor kvantálás és tárolási lehetőségek Python segítségével egy Python kódminta, amely több keresési indexet hoz létre, amelyek a vektoros tárolás kvantálásától, szűk adattípusoktól és tárolási opcióktól függnek.

Ez a kód létrehozza és összehasonlítja a tároló- és vektorindex méretét az egyes vektortároló-optimalizálási lehetőségekhez. Ezekből az eredményekből láthatja, hogy a kvantálás a vektorméretet csökkenti a leginkább, de a legnagyobb tárolási megtakarítás akkor érhető el, ha több lehetőséget használ.

Index neve Tárterület mérete Vektorméret
compressiontest-baseline 21,3613 MB 4,8277 MB
compressiontest-scalar-compression 17,7604 MB 1,2242 MB
kompresszióteszt-szűk 16,5567 MB 2,4254 MB
tömörítési teszt-nincs tárolva 10,9224 MB 4,8277 MB
kompressziósteszt-minden-opcióval 4,9192 MB 1,2242 MB

A Search Service REST API-k az index szintjén jelentik a tárolót és a vektorméretet, ezért nem mezőket, hanem indexeket kell összehasonlítani. A Indexes – Statisztikák lekérése (REST API) vagy egy egyenértékű API használata a Azure SDK-k vektorméretének lekéréséhez.