🚀 Essayez Zilliz Cloud, la version entièrement gérée de Milvus, gratuitement—découvrez des performances 10x plus rapides ! Essayez maintenant>>

milvus-logo
LFAI
  • Home
  • Blog
  • Que sont les extensions vectorielles avancées ?

Que sont les extensions vectorielles avancées ?

  • Engineering
November 10, 2020
milvus

Les machines intelligentes et conscientes qui veulent conquérir le monde font partie intégrante de la science-fiction, mais en réalité, les ordinateurs modernes sont très obéissants. Sans qu'on le leur demande, ils savent rarement ce qu'ils doivent faire. Les ordinateurs exécutent des tâches sur la base d'instructions, ou d'ordres, envoyés par un programme à un processeur. Au niveau le plus bas, chaque instruction est une séquence de uns et de zéros qui décrit une opération à exécuter par l'ordinateur. En règle générale, dans les langages d'assemblage informatiques, chaque instruction du langage machine correspond à une instruction du processeur. L'unité centrale de traitement (UC) s'appuie sur des instructions pour effectuer des calculs et contrôler les systèmes. En outre, les performances de l'unité centrale de traitement sont souvent mesurées en termes de capacité d'exécution des instructions (par exemple, le temps d'exécution).

Que sont les extensions vectorielles avancées ?

Advanced Vector Extensions (AVX) est un jeu d'instructions pour les microprocesseurs qui reposent sur la famille x86 d'architectures de jeux d'instructions. Proposé pour la première fois par Intel en mars 2008, AVX a bénéficié d'un large soutien trois ans plus tard avec le lancement de Sandy Bridge - une microarchitecture utilisée dans la deuxième génération de processeurs Intel Core (par exemple, Core i7, i5, i3) - et de la microarchitecture concurrente d'AMD, Bulldozer, également lancée en 2011.

AVX a introduit un nouveau schéma de codage, de nouvelles fonctionnalités et de nouvelles instructions. AVX2 étend la plupart des opérations sur les nombres entiers à 256 bits et introduit des opérations de multiplication-accumulation fusionnées (FMA). AVX-512 étend AVX aux opérations sur 512 bits en utilisant un nouveau préfixe d'extension vectorielle améliorée (EVEX).

Milvus est une base de données vectorielles open-source conçue pour la recherche de similarités et les applications d'intelligence artificielle (IA). La plateforme prend en charge le jeu d'instructions AVX-512, ce qui signifie qu'elle peut être utilisée avec tous les processeurs qui incluent les instructions AVX-512. Milvus a de vastes applications couvrant les systèmes de recommandation, la vision par ordinateur, le traitement du langage naturel (NLP) et bien plus encore. Cet article présente les résultats et l'analyse des performances d'une base de données vectorielles Milvus sur AVX-512 et AVX2.

Performances de Milvus sur AVX-512 vs. AVX2

Configuration du système

  • CPU : Intel® Platinum 8163 CPU @ 2.50GHz24 cœurs 48 threads
  • Nombre de CPU : 2
  • Carte graphique : GeForce RTX 2080Ti 11GB 4 cartes
  • Mémoire : 768 Go
  • Disque : 2TB SSD

Paramètres Milvus

  • cahce.cahe_size : 25, La taille de la mémoire du CPU utilisée pour la mise en cache des données afin d'accélérer les requêtes.
  • nlist : 4096
  • nprobe : 128

Remarque : nlist est le paramètre d'indexation à créer à partir du client ; nprobe est le paramètre de recherche. IVF_FLAT et IVF_SQ8 utilisent tous deux un algorithme de clustering pour partitionner un grand nombre de vecteurs en buckets, nlist étant le nombre total de buckets à partitionner pendant le clustering. La première étape d'une requête consiste à trouver le nombre de godets qui sont les plus proches du vecteur cible, et la deuxième étape consiste à trouver les top-k vecteurs dans ces godets en comparant la distance des vecteurs. nprobe fait référence au nombre de godets dans la première étape.

Ensemble de données : Ensemble de données SIFT10M

Ces tests utilisent l'ensemble de données SIFT10M, qui contient un million de vecteurs à 128 dimensions et qui est souvent utilisé pour analyser les performances des méthodes de recherche du plus proche voisin correspondantes. Le temps de recherche top-1 pour nq = [1, 10, 100, 500, 1000] sera comparé entre les deux jeux d'instructions.

Résultats par type d'index vectoriel

Lesindex vectoriels sont des structures de données peu gourmandes en temps et en espace, construites sur le champ vectoriel d'une collection à l'aide de divers modèles mathématiques. L'indexation vectorielle permet de rechercher efficacement de grands ensembles de données en essayant d'identifier des vecteurs similaires à un vecteur d'entrée. En raison du temps nécessaire à une recherche précise, la plupart des types d'index pris en charge par Milvus utilisent la recherche approximative du plus proche voisin (ANN).

Pour ces tests, trois index ont été utilisés avec AVX-512 et AVX2 : IVF_FLAT, IVF_SQ8 et HNSW.

IVF_FLAT

Le fichier inversé (IVF_FLAT) est un type d'index basé sur la quantification. Il s'agit de l'index IVF le plus basique, et les données codées stockées dans chaque unité sont cohérentes avec les données d'origine. L'index divise les données vectorielles en un certain nombre d'unités de grappes (nlist), puis compare les distances entre le vecteur d'entrée cible et le centre de chaque grappe. En fonction du nombre de grappes que le système doit interroger (nprobe), les résultats de la recherche de similarité sont renvoyés sur la base des comparaisons entre l'entrée cible et les vecteurs dans la ou les grappes les plus similaires uniquement, ce qui réduit considérablement le temps de recherche. En ajustant nprobe, un équilibre idéal entre la précision et la vitesse peut être trouvé pour un scénario donné.

Résultats des performances IVF_FLAT.pngIVF_FLAT.png

IVF_SQ8

IVF_FLAT n'effectue aucune compression, de sorte que les fichiers d'index qu'il produit sont à peu près de la même taille que les données vectorielles brutes non indexées d'origine. Lorsque les ressources mémoire du disque, du CPU ou du GPU sont limitées, IVF_SQ8 est une meilleure option que IVF_FLAT. Ce type d'index peut convertir chaque dimension du vecteur original d'un nombre à virgule flottante de quatre octets en un entier non signé d'un octet en effectuant une quantification scalaire. Cela permet de réduire la consommation de mémoire du disque, du CPU et du GPU de 70 à 75 %.

Résultats des performances IVF_SQ8.pngIVF_SQ8.png

HNSW

Hierarchical Small World Graph (HNSW) est un algorithme d'indexation basé sur un graphe. Les requêtes commencent dans la couche supérieure par la recherche du nœud le plus proche de la cible, puis descendent dans la couche suivante pour un nouveau cycle de recherche. Après plusieurs itérations, il peut rapidement s'approcher de la position cible.

Résultats des performances HNSW.pngHNSW.png

Comparaison des index vectoriels

La recherche de vecteurs est toujours plus rapide avec le jeu d'instructions AVX-512 qu'avec AVX2. Cela s'explique par le fait que l'AVX-512 prend en charge le calcul sur 512 bits, contre 256 bits seulement pour l'AVX2. Théoriquement, l'AVX-512 devrait être deux fois plus rapide que l'AVX2, mais Milvus effectue d'autres tâches fastidieuses en plus des calculs de similarité vectorielle. Il est peu probable que le temps de recherche global de l'AVX-512 soit deux fois plus court que celui de l'AVX2 dans des scénarios réels. comparison.pngcomparison.png

La recherche est nettement plus rapide sur l'index HNSW que sur les deux autres index, tandis que la recherche IVF_SQ8 est légèrement plus rapide que IVF_FLAT sur les deux jeux d'instructions. Ceci est probablement dû au fait que IVF_SQ8 ne nécessite que 25 % de la mémoire nécessaire à IVF_FLAT. IVF_SQ8 charge 1 octet pour chaque dimension vectorielle, tandis que IVF_FLAT charge 4 octets par dimension vectorielle. Le temps nécessaire au calcul est très probablement limité par la bande passante de la mémoire. Par conséquent, IVF_SQ8 n'occupe pas seulement moins d'espace, mais nécessite également moins de temps pour récupérer les vecteurs.

Milvus est une base de données vectorielles polyvalente et performante

Les tests présentés dans cet article démontrent que Milvus offre d'excellentes performances sur les jeux d'instructions AVX-512 et AVX2 en utilisant différents index. Quel que soit le type d'index, Milvus est plus performant sur AVX-512.

Milvus est compatible avec une variété de plateformes d'apprentissage profond et est utilisé dans diverses applications d'IA. Milvus 2.0, une version réimaginée de la base de données vectorielles la plus populaire au monde, a été publiée sous une licence open-source en juillet 2021. Pour plus d'informations sur le projet, consultez les ressources suivantes :

  • Trouvez ou contribuez à Milvus sur GitHub.
  • Interagissez avec la communauté via Slack.
  • Connectez-vous avec nous sur Twitter.

Like the article? Spread the word

Continuer à Lire