Choisir une approche pour optimiser le stockage et le traitement vectoriels
Les incorporations, ou la représentation numérique du contenu hétérogène, constituent la base des charges de travail de recherche vectorielle, mais les tailles des incorporations les rendent difficiles à mettre à l’échelle et coûteuses à traiter. Des recherches et des produits importants ont produit plusieurs solutions pour améliorer la mise à l’échelle et réduire les temps de traitement. Azure AI Search appuie sur un certain nombre de ces fonctionnalités pour des charges de travail vectorielles plus rapides et moins coûteuses.
Cet article énumère toutes les techniques d’optimisation dans Recherche Azure AI qui peuvent vous aider à réduire la taille des vecteurs et les temps de traitement des requêtes.
Les paramètres d’optimisation des vecteurs sont spécifiés dans les définitions de champ vectoriel dans un index de recherche. La plupart des fonctionnalités décrites dans cet article sont en disponibilité générale dans l’API REST 2024-07-01 et dans les packages du Kit de développement logiciel (SDK) Azure ciblant cette version. La préversion la plus récente ajoute la prise en charge des dimensions tronquées si vous utilisez text-embedding-3-large ou text-embedding-3-small pour la vectorisation.
Évaluer les options
Passez en revue les approches d’Azure AI Search pour réduire la quantité de stockage utilisée par les champs vectoriels. Ces approches ne s’excluent pas mutuellement et peuvent être associées pour obtenir une réduction maximale de la taille de vecteur.
Nous recommandons la quantification intégrée, car elle compresse la taille des vecteurs en mémoire et sur le disque avec un minimum d’effort, ce qui tend à offrir le plus d’avantages dans la plupart des scénarios. En revanche, les types étroits (à l’exception de float 16) nécessitent un effort spécial pour les créer et stored
enregistre sur un stockage sur disque, ce qui n’est pas aussi coûteux que la mémoire.
Approche | Pourquoi utiliser cette option |
---|---|
Ajouter une quantification binaire ou scalaire | Utilisez une quantification pour compresser des incorporations float32 ou float16 natives en int8 (scalaire) ou Byte (binaire). Cette option réduit le stockage en mémoire et sur disque sans dégradation des performances des requêtes. Les types de données plus petits, comme int8 ou Byte, produisent des index vectoriels moins riches en contenu que ceux avec des incorporations plus grandes. Pour compenser la perte d'informations, la compression intégrée inclut des options de traitement post-requête utilisant des intégrations non compressées et un suréchantillonnage pour renvoyer des résultats plus pertinents. Le reclassement et le suréchantillonnage sont des fonctionnalités spécifiques de la quantification intégrée des champs float32 ou float16 et ne peuvent pas être utilisés sur les incorporations soumises à une quantification personnalisée. |
Tronquer des dimensions pour les modèles text-embedding-3 compatibles MRL (préversion) | Choisissez l’option permettant d’utiliser moins de dimensions sur les modèles text-embedding-3. Sur Azure OpenAI, ces modèles ont été réentraînés avec 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, MRL prend en charge les suppléments la quantification scalaire et binaire. Quand vous utilisez ces méthodes de quantification, vous pouvez aussi spécifier une propriété truncateDimension sur vos champs vectoriels pour réduire la dimensionnalité des incorporations de texte. |
Attribuer 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 dans la mémoire et sur le disque, mais vous devez disposer d’un modèle d’incorporation qui génère des vecteurs dans un format de données étroit. Ou bien, vous devez disposer d’une logique de quantification personnalisée qui génère de petites données. Un troisième cas d’utilisation nécessitant moins d’efforts consiste à recaster des incorporations float32 natives produites par la plupart des modèles en float16. Pour plus d’informations sur les vecteurs binaires, consultez Indexer les vecteurs binaires. |
Éliminer le stockage facultatif des vecteurs récupérables | Les vecteurs renvoyés dans une réponse à une 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, ce qui réduit le stockage global par disque par champ de jusqu’à 50 %. |
Toutes ces options sont définies sur un index vide. Pour implémenter l’un d’entre eux, utilisez le Portail Azure, les API REST ou un package du Kit de développement logiciel (SDK) Azure ciblant cette version d’API.
Une fois l'index défini, vous pouvez charger et indexer les documents dans le cadre d'une étape distincte.
Exemple : taille de vecteur par technique de compression vectorielle
Exemple de code : les options de quantification et de stockage vectorisées à l’aide de Python sont un exemple de code Python qui crée plusieurs index de recherche qui varient selon leur utilisation de quantification de stockage vectoriel, types de données étroitset 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 quantification réduit la taille du vecteur le plus, mais les économies de stockage les plus importantes sont réalisées si vous utilisez plusieurs options.
Nom de l'index | Taille de stockage | Taille du vecteur |
---|---|---|
compressiontest-baseline | 21.3613 MO | 4.8277 MO |
compressiontest-scalar-compression | 17.7604 MO | 1.2242 MO |
compressiontest-narrow | 16.5567 MO | 2.4254 MO |
compressiontest-no-stored | 10.9224 MO | 4.8277 MO |
compressiontest-all-options | 4.9192 MO | 1.2242 MO |
Les API Recherche signalent la taille de vecteur et de stockage au niveau de l’index. Les index, et non les champs, doivent donc être la base de la comparaison. Utilisez GET Index Statistics ou une API équivalente dans les Kits de développement logiciel (SDK) Azure pour obtenir la taille de vecteur.