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.