milvus-logo
LFAI
Home
  • Concepts

Indexation sur disque

Cet article présente un algorithme d'indexation sur disque appelé DiskANN. Basé sur les graphes de Vamana, DiskANN permet d'effectuer des recherches efficaces dans les grands ensembles de données.

Pour améliorer les performances des requêtes, vous pouvez spécifier un type d'index pour chaque champ vectoriel.

Actuellement, un champ vectoriel ne prend en charge qu'un seul type d'index. Milvus supprime automatiquement l'ancien index lors du changement de type d'index.

Conditions préalables

Pour utiliser DiskANN, notez que

  • DiskANN est désactivé par défaut. Si vous préférez les index en mémoire aux index sur disque, il est conseillé de désactiver cette fonction pour obtenir de meilleures performances.
    • Pour la désactiver, vous pouvez remplacer queryNode.enableDisk par false dans votre fichier de configuration milvus.
    • Pour la réactiver, vous pouvez remplacer queryNode.enableDisk par true.
  • L'instance Milvus fonctionne sous Ubuntu 18.04.6 ou une version ultérieure.
  • Le chemin de données Milvus doit être monté sur un disque SSD NVMe pour des performances optimales :
    • Pour une instance Milvus autonome, le chemin de données doit être /var/lib/milvus/data dans le conteneur où l'instance s'exécute.
    • Pour une instance Milvus Cluster, le chemin de données doit être /var/lib/milvus/data dans les conteneurs où s'exécutent les QueryNodes et les IndexNodes.

Limites

Pour utiliser DiskANN, veillez à

  • N'utilisez que des vecteurs flottants ayant au moins une dimension dans vos données.
  • d'utiliser uniquement la distance euclidienne (L2), le produit intérieur (IP) ou COSINE pour mesurer la distance entre les vecteurs.

Paramètres d'index et de recherche

  • Paramètres de construction d'index

    Lors de la création d'un index DiskANN, utilisez DISKANN comme type d'index. Aucun paramètre d'index n'est nécessaire.

  • Paramètres de recherche

    ParamètreDescription de la recherchePlage de valeursValeur par défaut
    search_listTaille de la liste des candidats ; une taille plus importante permet d'obtenir un taux de rappel plus élevé, mais avec des performances dégradées.[topk, int32_max]16

DiskANN est paramétrable. Vous pouvez modifier les paramètres liés à DiskANN dans ${MILVUS_ROOT_PATH}/configs/milvus.yaml afin d'améliorer ses performances.

...
DiskIndex:
  MaxDegree: 56
  SearchListSize: 100
  PQCodeBugetGBRatio: 0.125
  SearchCacheBudgetGBRatio: 0.125
  BeamWidthRatio: 4.0
...
ParamètreDescription du paramètrePlage de valeursValeur par défaut
MaxDegreeDegré maximal du graphe de Vamana.
Une valeur plus élevée permet d'obtenir un taux de rappel plus important, mais augmente la taille de l'index et le temps nécessaire à sa construction.
[1, 512]56
SearchListSizeTaille de la liste des candidats.
Une valeur plus élevée augmente le temps consacré à la construction de l'index mais offre un taux de rappel plus élevé.
Fixez-la à une valeur inférieure à MaxDegree, sauf si vous avez besoin de réduire le temps de construction de l'index.
[1, int32_max]100
PQCodeBugetGBRatioLimite de taille du code PQ.
Une valeur plus élevée offre un taux de rappel plus important mais augmente l'utilisation de la mémoire.
(0.0, 0.25]0.125
SearchCacheBudgetGBRatioRapport entre les numéros de nœuds mis en cache et les données brutes.
Une valeur plus élevée améliore la performance de la construction de l'index mais augmente l'utilisation de la mémoire.
[0.0, 0.3)0.10
BeamWidthRatioRapport entre le nombre maximum de requêtes IO par itération de recherche et le nombre de CPU.[1, max(128 / nombre de CPU, 16)]4.0

Résolution des problèmes

  • Comment traiter l'erreur io_setup() failed; returned -11, errno=11:Resource temporarily unavailable?

    Le noyau Linux propose la fonction E/S asynchrone non bloquante (AIO) qui permet à un processus de lancer simultanément plusieurs opérations d'E/S sans avoir à attendre la fin de l'une d'entre elles. Cela permet d'améliorer les performances des applications qui peuvent chevaucher le traitement et les E/S.

    Les performances peuvent être ajustées à l'aide du fichier virtuel /proc/sys/fs/aio-max-nr dans le système de fichiers proc. Le paramètre aio-max-nr détermine le nombre maximum de requêtes simultanées autorisées.

    La valeur par défaut de aio-max-nr est 65535, mais vous pouvez la régler sur 10485760.

Traduit parDeepL

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started
Feedback

Cette page a-t - elle été utile ?