FAQ opérationnelle

Qu'est-ce qu'un délégateur QueryNode et quelles sont ses responsabilités ?

Lorsqu'une collection est chargée, un QueryNode s'abonne aux canaux DML pour les messages d'insertion et de suppression provenant de la file d'attente des messages. Le QueryNode qui s'abonne à ces canaux, connu sous le nom de délégué, est responsable de ce qui suit :

  • gérer les segments croissants qui nécessitent de la mémoire supplémentaire en raison des insertions en cours
  • Recevoir les messages de suppression et les transmettre à d'autres nœuds de requête qui détiennent les segments concernés.

Comment identifier les nœuds délégateurs d'une collection ?

Utilisez Birdwatcher.

Installez Birdwatcher en suivant ce lien, puis exécutez la commande suivante :

./birdwatcher
# Find delegator nodes for your collection
Milvus(my-release) > show segment-loaded-grpc --collection <your-collectionID>

ServerID 2
Channel by-dev-rootcoord-dml_2, collection: 430123456789, version 1
Leader view for channel: by-dev-rootcoord-dml_2
Growing segments count: 1, ids: [430123456789_4]

# Map server ID to pod IP
Milvus(my-release) > show session

Node(s) querynode
        ID: 1        Version: 2.4.0        Address: 10.0.0.4:19530
        ID: 2        Version: 2.4.0        Address: 10.0.0.5:19530
        ID: 3        Version: 2.4.0        Address: 10.0.0.6:19530

Quels paramètres peuvent être ajustés si l'utilisation de la mémoire du nœud de requête est déséquilibrée ?

Parfois, la mémoire des nœuds de requête varie parce que certains d'entre eux agissent comme des délégateurs en utilisant plus de RAM. Si la mémoire d'un délégateur est élevée, ajustez le paramètre queryCoord.delegatorMemoryOverloadFactor pour décharger les segments scellés sur d'autres nœuds et réduire l'utilisation de la mémoire vive.

  • La valeur par défaut est 0,1.
  • Si vous augmentez cette valeur (par exemple, jusqu'à 0,3 ou plus), le système déchargera davantage de segments scellés du délégateur surchargé vers d'autres nœuds de requête, ce qui contribuera à équilibrer l'utilisation de la mémoire. Vous pouvez également essayer d'augmenter la valeur jusqu'à 1, ce qui signifie qu'aucun segment scellé ne sera chargé dans les nœuds délégateurs.

Si vous ne voulez pas redémarrer le cluster, vous pouvez modifier la configuration de milvus avec birdwatcher :

./birdwatcher
Offline > connect --etcd <your-etcd-ip>:2379 --auto

# Change delegatorMemoryOverloadFactor to 0.3 without restart, default value is 0.1
set config-etcd --key queryCoord.delegatorMemoryOverloadFactor --value 0.3

Comment définir le shard_num pour une collection ?

Comme meilleure pratique, pour une collection avec des vecteurs de dimension 768, il est recommandé d'utiliser au moins 1 shard pour ~100 millions de vecteurs. Dans le cas d'une utilisation intensive en écriture, il est recommandé d'utiliser 4 shards pour ~100 millions de vecteurs.

Par exemple, si vous avez 100 millions de vecteurs, utilisez de 1 à 4 tiroirs. Si vous avez 500 millions de vecteurs, utilisez 5 à 10 cartes.

Que se passe-t-il si je ne parviens pas à extraire l'image Docker Milvus de Docker Hub ?

Si vous n'avez pas réussi à extraire l'image Docker Milvus de Docker Hub, essayez d'ajouter d'autres miroirs de registre.

Les utilisateurs de Chine continentale peuvent ajouter l'URL "https://registry.docker-cn.com" au tableau registry-mirrors dans /etc.docker/daemon.json.

{
  "registry-mirrors": ["https://registry.docker-cn.com"]
}

Docker est-il le seul moyen d'installer et d'exécuter Milvus ?

Docker est un moyen efficace de déployer Milvus, mais ce n'est pas le seul. Vous pouvez également déployer Milvus à partir du code source. Cela nécessite Ubuntu (18.04 ou supérieur) ou CentOS (7 ou supérieur). Voir Construire Milvus à partir du code source pour plus d'informations.

Quels sont les principaux facteurs affectant le rappel ?

Le rappel est principalement affecté par le type d'index et les paramètres de recherche.

Pour les index FLAT, Milvus effectue un balayage exhaustif dans une collection, avec un retour de 100 %.

Pour les index IVF, le paramètre nprobe détermine l'étendue d'une recherche dans la collection. L'augmentation de nprobe accroît la proportion de vecteurs recherchés et le rappel, mais diminue les performances de la requête.

Pour l'index HNSW, le paramètre ef détermine l'étendue de la recherche dans le graphe. L'augmentation de ef augmente le nombre de points recherchés dans le graphe et le rappel, mais diminue les performances de la requête.

Pour plus d'informations, voir Indexation vectorielle.

Pourquoi les modifications que j'ai apportées aux fichiers de configuration n'ont-elles pas été prises en compte ?

Milvus ne prend pas en charge la modification des fichiers de configuration pendant l'exécution. Vous devez redémarrer Milvus Docker pour que les modifications des fichiers de configuration soient prises en compte.

Comment puis-je savoir si Milvus a démarré avec succès ?

Si Milvus est démarré à l'aide de Docker Compose, exécutez docker ps pour observer le nombre de conteneurs Docker en cours d'exécution et vérifier si les services Milvus ont démarré correctement.

Pour Milvus standalone, vous devez pouvoir observer au moins trois conteneurs Docker en cours d'exécution, l'un étant le service Milvus et les deux autres étant le service de gestion et de stockage etcd. Pour plus d'informations, voir Installation de Milvus Standalone.

Pourquoi l'heure dans les fichiers journaux est-elle différente de l'heure du système ?

La différence d'heure est généralement due au fait que la machine hôte n'utilise pas le temps universel coordonné (UTC).

Les fichiers journaux contenus dans l'image Docker utilisent l'UTC par défaut. Si votre machine hôte n'utilise pas l'UTC, ce problème peut se produire.

Comment puis-je savoir si mon processeur prend en charge Milvus ?

Les opérations de calcul de Milvus dépendent de la prise en charge par l'unité centrale du jeu d'instructions d'extension SIMD (instruction unique, données multiples). La prise en charge par votre unité centrale du jeu d'instructions d'extension SIMD est cruciale pour la construction d'index et la recherche de similarité vectorielle dans Milvus. Assurez-vous que votre unité centrale prend en charge au moins l'un des jeux d'instructions SIMD suivants :

  • SSE4.2
  • AVX
  • AVX2
  • AVX512

Exécutez la commande lscpu pour vérifier si votre processeur prend en charge les jeux d'instructions SIMD mentionnés ci-dessus :

$ lscpu | grep -e sse4_2 -e avx -e avx2 -e avx512

Pourquoi Milvus renvoie-t-il illegal instruction au démarrage ?

Milvus exige que votre CPU prenne en charge un jeu d'instructions SIMD : SSE4.2, AVX, AVX2 ou AVX512. L'unité centrale doit prendre en charge au moins l'une de ces instructions pour que Milvus fonctionne normalement. Une erreur illegal instruction renvoyée lors du démarrage suggère que votre CPU ne prend pas en charge l'un des quatre jeux d'instructions ci-dessus.

Voir la prise en charge du jeu d'instructions SIMD par le processeur.

Puis-je installer Milvus sous Windows ?

Oui, vous pouvez installer Milvus sur Windows soit en compilant à partir du code source, soit à partir d'un package binaire.

Voir Exécuter Milvus sous Windows pour savoir comment installer Milvus sous Windows.

J'ai obtenu une erreur lors de l'installation de pymilvus sur Windows. Que dois-je faire ?

Essayez d'utiliser la commande suivante pour mettre à jour pymilvus vers la version la plus récente.

pip install --upgrade pymilvus

Puis-je déployer Milvus lorsque je suis déconnecté d'Internet ?

Oui, vous pouvez installer Milvus dans un environnement hors ligne. Voir Installer Milvus hors ligne pour plus d'informations.

Où puis-je trouver les journaux générés par Milvus ?

Le journal Milvus est imprimé sur stout (sortie standard) et stderr (erreur standard) par défaut, mais nous vous recommandons vivement de rediriger votre journal vers un volume persistant en production. Pour ce faire, mettez à jour log.file.rootPath dans milvus.yaml. Et si vous déployez Milvus avec le diagramme milvus-helm, vous devez également activer la persistance du journal via --set log.persistence.enabled=true.

Si vous n'avez pas modifié la configuration, l'utilisation de kubectl logs ou de docker logs CONTAINER peut également vous aider à trouver le journal.

Puis-je créer un index pour un segment avant d'y insérer des données ?

Oui, vous pouvez le faire. Mais nous recommandons d'insérer les données par lots, chacun ne devant pas dépasser 256 Mo, avant d'indexer chaque segment.

Puis-je partager une instance etcd entre plusieurs instances Milvus ?

Oui, vous pouvez partager une instance etcd entre plusieurs instances Milvus. Pour ce faire, vous devez modifier etcd.rootPath en une valeur distincte pour chaque instance Milvus dans les fichiers de configuration de chacune d'entre elles avant de les démarrer.

Puis-je partager une instance Pulsar entre plusieurs instances Milvus ?

Oui, vous pouvez partager une instance Pulsar entre plusieurs instances Milvus. Pour ce faire, vous pouvez

  • Si le multi-tenant est activé sur votre instance Pulsar, envisagez d'allouer un locataire ou un espace de noms distinct pour chaque instance Milvus. Pour ce faire, vous devez modifier pulsar.tenant ou pulsar.namespace dans les fichiers de configuration de vos instances Milvus en une valeur unique pour chacune d'entre elles avant de les démarrer.
  • Si vous ne prévoyez pas d'activer le multi-tenant sur votre instance Pulsar, envisagez de modifier msgChannel.chanNamePrefix.cluster dans les fichiers de configuration de vos instances Milvus en une valeur unique pour chacune d'entre elles avant de les démarrer.

Puis-je partager une instance MinIO entre plusieurs instances Milvus ?

Oui, vous pouvez partager une instance MinIO entre plusieurs instances Milvus. Pour ce faire, vous devez changer minio.rootPath en une valeur unique pour chaque instance Milvus dans les fichiers de configuration de chacune d'entre elles avant de les démarrer.

Comment traiter le message d'erreur pymilvus.exceptions.ConnectionConfigException: <ConnectionConfigException: (code=1, message=Illegal uri: [example.db], expected form 'https://user:pwd@example.com:12345')>?

Le message d'erreur Illegal uri [example.db] indique que vous essayez de vous connecter à Milvus Lite à l'aide d'une version antérieure de PyMilvus qui ne prend pas en charge ce type de connexion. Pour résoudre ce problème, mettez à niveau votre installation PyMilvus vers au moins la version 2.4.2, qui inclut la prise en charge de la connexion à Milvus Lite.

Vous pouvez mettre à jour PyMilvus à l'aide de la commande suivante :

pip install pymilvus>=2.4.2

Pourquoi est-ce que j'obtiens moins de résultats que les limit que j'ai définis dans ma recherche/requête ?

Plusieurs raisons peuvent expliquer pourquoi vous obtenez moins de résultats que le site limit que vous avez spécifié :

  • Données limitées: Il se peut que la collection ne contienne pas suffisamment d'entités pour respecter la limite que vous avez demandée. Si le nombre total d'entités dans la collection est inférieur à la limite, vous obtiendrez naturellement moins de résultats.

  • Doubles clés primaires: Milvus donne la priorité à des entités spécifiques lorsqu'il rencontre des clés primaires en double au cours d'une recherche. Ce comportement varie en fonction du type de recherche :

  • Requête (correspondance exacte): Milvus sélectionne l'entité la plus récente avec la clé primaire correspondante. Recherche ANN : Milvus sélectionne l'entité ayant le score de similarité le plus élevé, même si les entités partagent le même PK. Cette priorisation peut entraîner moins de résultats uniques que la limite si votre collection comporte de nombreuses clés primaires en double.

  • Correspondances insuffisantes: Les expressions de filtrage de votre recherche peuvent être trop strictes, ce qui réduit le nombre d'entités répondant au seuil de similarité. Si les conditions définies pour la recherche sont trop restrictives, il n'y aura pas assez d'entités correspondantes, ce qui entraînera moins de résultats que prévu.

MilvusClient("milvus_demo.db") gives an error: ModuleNotFoundError: No module named 'milvus_lite'. Quelle est la cause de cette erreur et comment la résoudre ?

Cette erreur se produit lorsque vous essayez d'utiliser Milvus Lite sur une plate-forme Windows. Milvus Lite est principalement conçu pour les environnements Linux et peut ne pas avoir de support natif pour Windows.

La solution consiste à utiliser un environnement Linux :

  • Utilisez un système d'exploitation basé sur Linux ou une machine virtuelle pour exécuter Milvus Lite.
  • Cette approche garantira la compatibilité avec les dépendances et les fonctionnalités de la bibliothèque.

Quelles sont les erreurs "length exceeds max length" dans Milvus, et comment les comprendre et les traiter ?

Les erreurs "Length exceeds max length" dans Milvus se produisent lorsque la taille d'un élément de données dépasse la taille maximale autorisée pour une collection ou un champ. Voici quelques exemples et explications :

  • Erreur de champ JSON : <MilvusException: (code=1100, message=the length (398324) of json field (metadata) exceeds max length (65536): expected=valid length json string, actual=length exceeds max length: invalid parameter)>

  • Erreur de longueur de chaîne : <ParamError: (code=1, message=invalid input, length of string exceeds max length. length: 74238, max length: 60535)>

  • Erreur de champ VarChar : <MilvusException: (code=1100, message=the length (60540) of 0th VarChar paragraph exceeds max length (0)%!(EXTRA int64=60535): invalid parameter)>

Pour comprendre et traiter ces erreurs :

  • Comprenez que len(str) en Python représente le nombre de caractères, et non la taille en octets.
  • Pour les types de données basés sur des chaînes comme VARCHAR et JSON, utilisez len(bytes(str, encoding='utf-8')) pour déterminer la taille réelle en octets, ce que Milvus utilise pour "max-length".

Exemple en Python :

# Python Example: result of len() str cannot be used as "max-length" in Milvus 
>>> s = "你好,世界!"
>>> len(s) # Number of characters of s.
6
>>> len(bytes(s, "utf-8")) # Size in bytes of s, max-length in Milvus.
18

pymilvus.exceptions.ConnectionConfigException: <ConnectionConfigException: (code=1, message=Illegal uri: [example.db], expected form 'https://user:pwd@example.com:12345')>. Quelle est la cause de cette erreur et comment la résoudre ?

Cette erreur indique que vous essayez de vous connecter à Milvus Lite en utilisant une version antérieure de pymilvus qui ne la prend pas en charge. Pour résoudre ce problème, mettez à niveau votre installation de pymilvus vers la version 2.4.2 au minimum. Cette version prend en charge la connexion à Milvus Lite. Pour effectuer la mise à jour, utilisez la commande suivante :

pip install pymilvus>=2.4.2

Vous avez encore des questions ?

Vous pouvez le faire :

  • Consulter Milvus sur GitHub. N'hésitez pas à poser des questions, à partager des idées et à aider les autres.
  • Rejoignez notre forum Milvus ou notre canal Discord pour obtenir de l'aide et participer à notre communauté open-source.
Table de contenu

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 ?