Scegliere un approccio per ottimizzare l'archiviazione e l'elaborazione dei vettori
Gli incorporamenti, o la rappresentazione numerica di contenuto eterogeneo, sono la base dei carichi di lavoro di ricerca vettoriale, ma le dimensioni degli incorporamenti li rendono difficili da ridimensionare e dispendioso da elaborare. Ricerche e prodotti significativi hanno prodotto più soluzioni per migliorare la scalabilità e ridurre i tempi di elaborazione. Ricerca di intelligenza artificiale di Azure sfrutta alcune di queste funzionalità per carichi di lavoro vettoriali più veloci e più economici.
Questo articolo enumera tutte le tecniche di ottimizzazione in Ricerca di intelligenza artificiale di Azure che consentono di ridurre le dimensioni dei vettori e i tempi di elaborazione delle query.
Le impostazioni di ottimizzazione vettoriale vengono specificate nelle definizioni dei campi vettoriali in un indice di ricerca. La maggior parte delle funzionalità descritte in questo articolo è disponibile a livello generale nell'API REST 2024-07-01 e nei pacchetti di Azure SDK destinati a tale versione. La versione di anteprima più recente aggiunge il supporto per le dimensioni troncate se si usa text-embedding-3-large o text-embedding-3-small per la vettorializzazione.
Valutare le opzioni
Esaminare gli approcci in Ricerca di intelligenza artificiale di Azure per ridurre la quantità di spazio di archiviazione usato dai campi vettoriali. Questi approcci non si escludono a vicenda e possono essere combinati per ridurre al massimo le dimensioni del vettore.
È consigliabile la quantizzazione predefinita perché comprime le dimensioni del vettore in memoria e su disco con uno sforzo minimo e che tende a offrire il massimo vantaggio nella maggior parte degli scenari. Al contrario, i tipi narrow (ad eccezione di float16) richiedono uno sforzo particolare per essere creati e stored
consente di risparmiare sull'archiviazione su disco, cosa che ha un impatto inferiore rispetto alla memoria.
Approccio | Perché usare questa opzione |
---|---|
Aggiungere la quantizzazione scalare o binaria | Usare la quantizzazione per comprimere incorporamenti float32 o float16 nativi in int8 (scalare) o Byte (binari). Questa opzione riduce l'archiviazione in memoria e su disco senza ridurre le prestazioni delle query. Tipi di dati più piccoli come int8 o Byte producono indici vettoriali meno ricchi di contenuto rispetto a quelli con incorporamenti più grandi. Per compensare la perdita di informazioni, la compressione predefinita include opzioni per l'elaborazione post-query usando incorporamenti non compressi e sovracampionamento per restituire risultati più rilevanti. La ricategorizzazione e il sovracampionamento sono funzionalità specifiche della quantizzazione scalare predefinita dei campi float32 o float16 e non possono essere usate sugli incorporamenti che subiscono una quantizzazione personalizzata. |
Tronca le dimensioni per i modelli text-embedding-3 che supportano MRL (anteprima) | Esercizio dell'opzione per usare un minor numero di dimensioni nei modelli text-embedding-3. In Azure OpenAI questi modelli sono stati sottoposti nuovamente a training sulla tecnica di Apprendimento per rappresentazioni matryoshka (MRL) che produce più rappresentazioni vettoriali a diversi livelli di compressione. Questo approccio produce ricerche più veloci e costi di archiviazione ridotti, con una perdita minima di informazioni semantiche. In Ricerca di intelligenza artificiale di Azure il supporto MRL integra la quantizzazione scalare e binaria. Quando si usa uno dei metodi di quantizzazione, è anche possibile specificare una truncateDimension proprietà nei campi vettoriali per ridurre la dimensionalità degli incorporamenti di testo. |
Assegnare tipi di dati primitivi più piccoli ai campi vettoriali | Tipi di dati narrow, ad esempio float16, int16, int8 e Byte (binario) utilizzano meno spazio in memoria e su disco, ma è necessario disporre di un modello di incorporamento che restituisce vettori in un formato di dati narrow. In alternativa, è necessario avere una logica di quantizzazione personalizzata che restituisce dati di piccole dimensioni. Un terzo caso d'uso che richiede meno sforzi consiste nel ricalibrare gli incorporamenti nativi float32 prodotti dalla maggior parte dei modelli per float16. Per informazioni dettagliate sui vettori binari, vedere Vettori binari di indice. |
Eliminare l'archiviazione facoltativa dei vettori recuperabili | I vettori restituiti in una risposta di query vengono archiviati separatamente dai vettori usati durante l'esecuzione della query. Se non è necessario restituire vettori, è possibile disattivare l'archiviazione recuperabile, riducendo l'archiviazione complessiva per disco per campo fino al 50%. |
Tutte queste opzioni sono definite in un indice vuoto. Per implementarli, usare il portale di Azure, le API REST o un pacchetto di SDK Azure destinato a tale versione dell'API.
Dopo aver definito l'indice, è possibile caricare e indicizzare i documenti come passaggio separato.
Esempio: dimensione vettoriale per tecnica di compressione vettoriale
Esempio di codice: la quantizzazione vettoriale e le opzioni di archiviazione con Python è un esempio di codice Python che crea più indici di ricerca che variano in base all'uso della quantizzazione dell'archiviazione vettoriale, dei tipi di dati ristretti e delle proprietà di archiviazione.
Questo codice crea e confronta le dimensioni dell'indice di archiviazione e vettore per ogni opzione di ottimizzazione dell'archiviazione vettoriale. Da questi risultati è possibile notare che la quantizzazione riduce le dimensioni del vettore al massimo, ma se si usano più opzioni è possibile ottenere il massimo risparmio di spazio di archiviazione.
Nome dell'indice | Dimensioni dello spazio di archiviazione | Dimensioni vettore |
---|---|---|
compressiontest-baseline | 21,3613 MB | 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 |
Le API di ricerca segnalano le dimensioni di archiviazione e vettoriali a livello di indice, quindi gli indici e non i campi devono essere la base del confronto. Usare GET Index Statistics o un'API equivalente negli SDK di Azure per ottenere le dimensioni del vettore.