Megosztás a következőn keresztül:


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

A beágyazások vagy a heterogén tartalom numerikus ábrázolása a vektorkeresési számítási feladatok alapja, de a beágyazások mérete 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. Az Azure AI Search számos ilyen képességre koppint a gyorsabb és olcsóbb vektoros számítási feladatokhoz.

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

A vektoroptimalizálási beállítások a keresési index vektormező-definícióiban vannak megadva. A cikkben ismertetett funkciók többsége általánosan elérhető a 2024-07-01 REST API-ban és az ezt a verziót célzó Azure SDK-csomagokban. A legújabb előzetes verzió támogatja a csonkolt dimenziókat, ha a vektorizáláshoz 3-nagy vagy 3-kicsi szövegbeágyazást használ.

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

Tekintse át az Azure AI Search megközelítéseit a vektormezők által használt tárterület csökkentéséhez. Ezek a megközelítések nem zárják ki egymást, és kombinálhatók a vektorméret maximális csökkentéséhez.

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, és ez a legtöbb forgatókönyvben a legnagyobb előnyt nyújtja. Ezzel szemben a keskeny típusok (kivéve a float16-ot) különleges erőfeszítést igényelnek a használatukhoz, és stored a lemeztárolón is megtakaríthatók, ami nem olyan költséges, mint a memória.

Módszer Miért érdemes ezt a lehetőséget használni?
Skaláris vagy bináris kvantálás hozzáadása Kvantálással tömörítheti a natív float32- vagy float16-beágyazásokat az int8 (skaláris) vagy a 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. Az olyan kisebb adattípusok, mint az int8 vagy a Bájt, kevésbé tartalomban gazdag vektorindexeket hoznak létre, mint a nagyobb beágyazású adattípusok. 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 használatával, valamint a túlbélyegzést a relevánsabb eredmények visszaadásához. Az újrahatolá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 egyéni kvantáláson átesett beágyazásokhoz.
Rácsos dimenziók MRL-kompatibilis szövegbeágyazási-3 modellekhez (előzetes verzió) A szövegbeágyazási-3 modelleken használhat kevesebb dimenziót. Az Azure OpenAI-ban ezeket a modelleket újratanították a Matryoshka Representation Learning (MRL) technikán, 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, minimális szemantikai adatvesztéssel. Az Azure AI Searchben az MRL támogatja a skaláris és bináris kvantálás kiegészítését. 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 keskeny 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, de olyan beágyazási modellel kell rendelkeznie, amely keskeny adatformátumban adja ki a vektorokat. Vagy 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 vektorokkal kapcsolatos részletekért tekintse meg a bináris vektorok indexelt indexét.
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 lekérhető tárolást, így akár 50%-kal csökkentheti a teljes mezőnkénti lemeztárolást.

Ezek a beállítások egy üres indexen vannak definiálva. Bármelyikük implementálásához használja az Azure Portalt, a REST API-kat vagy az adott API-verziót célzó Azure SDK-csomagot.

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 vektortömörítési technikával

Kódminta: A Pythont használó vektorkvantálási és tárolási lehetőségek egy Python-kódminta, amely több keresési indexet hoz létre, amelyek a vektoros tárolás kvantálásától, a szűk adattípusoktól és a tárolási tulajdonságoktól függően változnak.

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,3613MB 4,8277 MB
compressiontest-scalar-compression 17,7604 MB 1,2242 MB
compressiontest-narrow 16,5567 MB 2,4254 MB
compressiontest-no-stored 10,9224 MB 4,8277 MB
compressiontest-all-options 4,9192 MB 1,2242 MB

A keresési API-k az index szintjén jelentik a tárolót és a vektorméretet, ezért az indexek és nem a mezők legyenek az összehasonlítás alapjai. Használja a GET indexstatisztikát vagy egy azzal egyenértékű API-t az Azure SDK-kban a vektorméret beszerzéséhez.

Lásd még