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.
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
parfalse
dans votre fichier de configuration milvus. - Pour la réactiver, vous pouvez remplacer
queryNode.enableDisk
partrue
.
- Pour la désactiver, vous pouvez remplacer
- 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ètre Description de la recherche Plage de valeurs Valeur par défaut search_list
Taille 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
Configurations Milvus liées à DiskANN
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ètre | Description du paramètre | Plage de valeurs | Valeur par défaut |
---|---|---|---|
MaxDegree | Degré 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 |
SearchListSize | Taille 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 |
PQCodeBugetGBRatio | Limite 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 |
SearchCacheBudgetGBRatio | Rapport 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 |
BeamWidthRatio | Rapport 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ètreaio-max-nr
détermine le nombre maximum de requêtes simultanées autorisées.La valeur par défaut de
aio-max-nr
est65535
, mais vous pouvez la régler sur10485760
.