Choisir une approche pour optimiser le stockage et le traitement vectoriels

Note

Recherche Azure AI est disponible via le portail Azure, les API REST et les SDK Azure. Il sous-tend également Foundry IQ, la couche de connaissances managée qui transforme le contenu d’entreprise en bases de connaissances réutilisables et prenant en charge les autorisations pour les agents dans le portail Microsoft Foundry.

Les incorporations, ou la représentation numérique du contenu hétérogène, constituent la base des charges de travail de recherche vectorielle. Toutefois, les tailles des incorporations les rendent difficiles à mettre à l’échelle et coûteuses à traiter. Des recherches significatives et la mise en produit ont conduit à plusieurs solutions pour améliorer l'extensibilité et réduire les temps de traitement. Recherche Azure AI appuie sur un certain nombre de ces fonctionnalités pour des charges de travail vectorielles plus rapides et moins coûteuses.

Cet article traite de toutes les techniques d’optimisation dans Recherche Azure AI qui peuvent vous aider à réduire les temps de traitement des vecteurs et des requêtes.

Vous spécifiez des paramètres d’optimisation vectorielle dans les définitions de champ vectoriel dans un index de recherche. La plupart des fonctionnalités décrites dans cet article sont généralement disponibles dans la dernière version stable de l’API REST et les packages Kit de développement logiciel (SDK) Azure ciblant cette version.

Évaluer les options

Passez en revue les approches de Recherche Azure AI pour réduire la quantité de stockage utilisée par les champs vectoriels. Ces approches ne s’excluent pas mutuellement. Vous pouvez donc les combiner pour une réduction maximale de la taille vectorielle.

Nous vous recommandons la quantisation intégrée, car elle compresse la taille du vecteur en mémoire et sur le disque avec un effort minimal. Cette approche a tendance à offrir le plus d’avantages dans la plupart des scénarios. En revanche, les types étroits (à l’exception de float16) nécessitent un effort spécial pour les créer, et stored enregistrent sur le stockage sur disque, ce qui n’est pas aussi coûteux que la mémoire.

Approche Pourquoi utiliser cette approche
Ajouter une quantisation scalaire ou binaire Compressez les embeddings float32 ou float16 natifs en int8 (scalaire) ou octet (binaire). Cette option réduit le stockage en mémoire et sur le disque sans dégradation des performances des requêtes. Des types de données plus petits, tels que int8 ou byte, produisent des index vectoriels moins riches en contenu que ceux avec des incorporations plus volumineuses. Pour compenser la perte d’informations, la compression intégrée inclut des options pour le traitement post-requête à l’aide d’incorporations non compressées et d’un sur-échantillonnage pour retourner des résultats plus pertinents. La reclassement et le suréchantillonnement sont des fonctionnalités spécifiques de la quantisation intégrée des champs float32 ou float16 et ne peuvent pas être utilisées sur les incorporations qui subissent une quantisation personnalisée.
Tronquer des dimensions pour les modèles text-embedding-3 compatibles MRL Utilisez moins de dimensions avec les modèles text-embedding-3. Sur Azure OpenAI, ces modèles sont réentraînés sur la technique Matryoshka Representation Learning (MRL) qui produit plusieurs représentations vectorielles à différents niveaux de compression. Cette approche produit des recherches plus rapides et réduit les coûts de stockage avec une perte minimale d’informations sémantiques. Dans Recherche Azure AI, la prise en charge de MRL complète la quantification scalaire et binaire. Lorsque vous utilisez l’une ou l’autre méthode de quantisation, vous pouvez également spécifier une truncateDimension propriété sur vos champs vectoriels pour réduire la dimensionnalité des incorporations de texte.
Affecter des types de données primitifs plus petits aux champs vectoriels Les types de données étroits, tels que float16, int16, int8 et byte (binaire), consomment moins d’espace en mémoire et sur le disque. Toutefois, vous devez disposer d’un modèle d’incorporation qui génère des vecteurs dans un format de données étroit. Vous devez également avoir une logique de quantisation personnalisée qui génère de petites données. Un troisième cas d’usage qui nécessite moins d’efforts consiste à convertir les embeddings float32 natifs produits par la plupart des modèles en float16. Pour plus d’informations sur les vecteurs binaires, consultez Vecteurs binaires d’index.
Éliminer le stockage facultatif des vecteurs récupérables Les vecteurs retournés dans une réponse de requête sont stockés séparément des vecteurs utilisés lors de l’exécution de la requête. Si vous n’avez pas besoin de retourner des vecteurs, vous pouvez désactiver le stockage récupérable pour réduire le stockage global par disque par champ de jusqu’à 50 %.

Définissez toutes ces options sur un index vide. Pour implémenter l’un d’eux, utilisez le portail Azure, les API REST ou un package Kit de développement logiciel (SDK) Azure ciblant cette version de l’API.

Après avoir défini l’index, vous pouvez charger et indexer des documents en tant qu’étape distincte.

Exemple : Taille de vecteur par technique de compression de vecteur

Quantification vectorielle et options de stockage à l'aide de Python est un exemple de code Python qui crée plusieurs index de recherche qui varient selon leur utilisation de la quantification du stockage vectoriel, types de données étroits et propriétés de stockage.

Ce code crée et compare la taille du stockage et de l’index vectoriel pour chaque option d’optimisation du stockage vectoriel. À partir de ces résultats, vous pouvez voir que la quantisation réduit la taille des vecteurs le plus, mais les économies de stockage les plus importantes sont réalisées si vous utilisez plusieurs options.

Nom de l’index Taille du stockage Taille du vecteur
compressiontest-baseline 21,3613 Mo 4,8277 Mo
compressiontest-compression-scalaire 17,7604 Mo 1,2242 Mo
compressiontest-étroit 16,5567 Mo 2.4254 Mo
test-compression-non-enregistré 10,9224 Mo 4,8277 Mo
testcompression-toutes-options 4,9192 Mo 1,2242 Mo

Les API REST du service de recherche rapportent le stockage et la taille de vecteur au niveau de l’index. Vous devez donc comparer les index, et non les champs. Utilisez Indexes - Obtenir des statistiques (API REST) ou une API équivalente dans la SDK Azure pour obtenir la taille du vecteur.