milvus-logo
LFAI
Home
  • À propos de Milvus

Notes de mise à jour

Découvrez les nouveautés de Milvus ! Cette page résume les nouvelles fonctionnalités, les améliorations, les problèmes connus et les corrections de bogues de chaque version. Vous trouverez dans cette section les notes de version pour chaque version publiée après la v2.4.0. Nous vous conseillons de consulter régulièrement cette page pour prendre connaissance des mises à jour.

v2.4.11

Date de sortie : 11 septembre 2024

Version de MilvusVersion du SDK PythonVersion du SDK JavaVersion du SDK Node.js
2.4.112.4.62.4.32.4.8

Milvus 2.4.11 est une version de correction de bogues qui résout plusieurs problèmes critiques liés à l'index MARISA trie, au compactage et aux opérations de chargement. Cette version introduit de nouvelles fonctionnalités pour visualiser les expressions et améliorer la stabilité des suppressions. Nous recommandons à tous les utilisateurs de la série 2.4.x de passer à cette version pour bénéficier de ces améliorations et corrections.

Caractéristiques

  • Ajout d'une vue statique pour les expressions en 2.4(#35954)
  • Implémentation de la logique de quota liée au tampon de suppression(#35997)

Corrections de bugs

  • Résolution du problème d'opération de plage d'index Trie pour les comparaisons GreaterThan et GreaterThanEqual(#36126)
  • Correction de l'utilisation de marisa_label_order dans la construction de l'index Trie(#36060)
  • Amélioration de la vérification des valeurs pour trie.predictive_search (#35999)
  • Activation du support des expressions arithmétiques binaires sur les index inversés(#36097)
  • Correction d'une erreur de segment causée par Skipindex(#35908)
  • Résolution d'une fuite de mémoire dans le méta-cache du proxy(#36076)
  • Renommer le chemin du fichier mmap pour éviter les conflits de répertoire(#35975)
  • Amélioration de la journalisation et du nettoyage pour les tâches échouées ou en retard dans le compactage du mélange(#35967)
  • Correction d'un blocage logique lors d'une utilisation élevée de la mémoire par le délégateur(#36066)
  • Implémentation de la création de segments vides lorsque le compactage supprime toutes les insertions(#36045)
  • Correction de la population de la liste des champs de chargement à partir des informations de chargement de l'ancienne version dans la 2.4(#36018)
  • Correction de la logique de mise à jour de la configuration de traçage dans la version 2.4(#35998)
  • Résolution des échecs de recherche/requête lors de la libération de la partition dynamique(#36019)
  • Prévention de l'annulation des paramètres de repli(#36006)
  • Enregistrement correct des groupes de privilèges pour la validation(#35938)
  • Prévention d'un nettoyage erroné des nœuds de limitation de la base de données(#35992)
  • Résolution du problème avec les répliques ne participant pas aux requêtes après la récupération de l'échec(#35925)
  • Résolution de la course aux données dans le compacteur de clustering(#35958)
  • Correction de la référence de variable après l'opération de déplacement(#35904)
  • Implémentation de la vérification du comportement de chargement du saut de clé de clustering(#35899)
  • Garantie d'un démarrage unique des observateurs de querycoord en 2.4(#35817)

Améliorations

  • Mise à jour de Milvus et de la version proto vers 2.4.11(#36069)
  • Correction de la fuite de mémoire dans les tests unitaires et activation de l'option use_asan pour les constructions unittest(#35857)
  • Ajustement des limites de l0segmentsrowcount à des valeurs plus appropriées(#36015)
  • Modification du facteur d'estimation de la mémoire de deltalog à un(#36035)
  • Implémentation de slicesetequal pour les comparaisons de listes de champs de chargement(#36062)
  • Réduction de la fréquence des journaux pour les opérations de suppression(#35981)
  • Mise à jour de la version etcd vers 3.5.14(#35977)
  • Optimisation de la réduction de mmap-rss après l'échauffement(#35965)
  • Suppression de la période de refroidissement dans le limiteur de taux pour les requêtes de lecture(#35936)
  • Amélioration de la vérification des champs de chargement pour les collections déjà chargées(#35910)
  • Ajout de la prise en charge de l'abandon des rôles liés aux listes de privilèges dans la version 2.4(#35863)
  • Implémentation des règles depguard pour interdire l'utilisation de la bibliothèque proto obsolète(#35818)

Autres

  • Mise à jour de la version de Knowhere(#36067)

v2.4.10

Date de publication : 30 août 2024

Version de MilvusVersion du SDK PythonVersion du SDK JavaVersion du SDK Node.js
2.4.102.4.62.4.32.4.6

Milvus 2.4.10 apporte des améliorations significatives en termes de fonctionnalité et de stabilité. Les principales caractéristiques comprennent la prise en charge des opérations d'insertion ascendante sur les collections compatibles AutoID, les capacités de chargement de collections partielles et diverses configurations à mémoire mappée (MMAP) afin d'optimiser l'utilisation de la mémoire. Cette version corrige également plusieurs bogues provoquant des paniques, des vidages de noyau et des fuites de ressources. Nous recommandons une mise à jour pour profiter pleinement de ces améliorations.

Fonctionnalités

  • Upsert avec Auto ID: Prise en charge des opérations d'insertion avec génération automatique d'ID(#34633)
  • Chargement partiel des champs d'une collection [Beta Preview] : Permet de charger des champs spécifiques d'une collection(#35696)
  • Améliorations RBAC:
    • Ajout de la prise en charge des messages RBAC pour la capture des données de changement (CDC)(#35562)
    • Introduction des groupes de privilèges readonly/readwrite/admin pour simplifier le processus d'attribution RBAC(#35543)
    • Nouvelle API pour sauvegarder et restaurer les configurations RBAC(#35513)
    • Rafraîchissement du cache du proxy après la restauration des métadonnées RBAC(#35636)
  • Configuration MMAP améliorée: Options de configuration plus générales pour contrôler le comportement de MMAP(#35609)
  • Restrictions d'accès aux bases de données: Nouvelles propriétés pour restreindre l'accès en lecture aux bases de données(#35754)

Corrections de bugs

  • Correction de l'erreur Arrow Go client don't return(#35820)
  • Correction de l'imprécision de la limitation de débit(#35700)
  • Résolution de la panique du proxy après les échecs de l'API liés à l'importation(#35559)
  • Correction des suppressions erronées potentielles pendant les points de contrôle du canal GC(#35708)
  • Correction de la panique due à des segments d'importation candidats vides(#35674)
  • Correction de la désallocation de mémoire mmap(#35726)
  • Garantie d'une surveillance correcte des canaux pour les mises à niveau de 2.2 à 2.4(#35695)
  • Correction de la fonction de libération de canal de DataNode sans surveillance(#35657)
  • Correction du nombre de partitions dans les métadonnées RootCoord(#35601)
  • Résolution des problèmes de mise à jour dynamique de la configuration pour certains paramètres(#35637)

Améliorations

Performance

  • Optimisation de la recherche sur les champs dynamiques(#35602)
  • Amélioration des performances des bitset pour AVX512(#35480)
  • Relecture de la valeur après l'initialisation de once pour une meilleure efficacité(#35643)

Améliorations de la mise à jour continue

  • Marquage du noeud de requête en lecture seule après suspension(#35586)
  • Prévention de la coexistence de l'ancien coordinateur avec le nouveau noeud/proxy(#35760)

Autres

  • Optimisation du processus de construction du noyau Milvus(#35660)
  • Mise à jour vers protobuf-go v2(#35555)
  • Amélioration du traçage avec encodage des chaînes hexagonales pour traceid et spanid(#35568)
  • Ajout de la métrique "hit segment number" pour le "query hook"(#35619)
  • Amélioration de la compatibilité avec l'ancien SDK pour la fonctionnalité configure load param(#35573)
  • Ajout de la prise en charge de l'étranglement HTTP v1/v2(#35504)
  • Correction de l'estimation de la mémoire de l'index(#35670)
  • Possibilité d'écrire plusieurs segments dans le compacteur de mix pour éviter la génération de gros segments(#35648)

v2.4.9

Date de sortie : 20 août 2024

Version de MilvusVersion du SDK PythonVersion du SDK JavaVersion du SDK Node.js
2.4.92.4.52.4.32.4.4

Milvus v2.4.9 corrige un problème critique qui pouvait renvoyer des résultats inférieurs à la limite (topk) dans certains cas particuliers et inclut plusieurs améliorations clés pour améliorer les performances et la convivialité de la plateforme.

Corrections critiques

  • Exclusion du segment l0 de l'instantané lisible(#35510).

Améliorations

  • Suppression de la création dupliquée de l'aide de schéma dans le proxy(#35502).
  • Ajout de la prise en charge de la compilation de Milvus sur Ubuntu 20.04(#35457).
  • Optimisation de l'utilisation des verrous et évitement du double flush du clustering buffer writer(#35490).
  • Suppression du journal invalide(#35473).
  • Ajout d'un guide d'utilisation du compactage en grappe(#35428).
  • Ajout du support des champs dynamiques dans l'aide au schéma(#35469).
  • Ajout de la section msgchannel dans le YAML généré(#35466).

v2.4.8

Date de publication : 14 août 2024

Version de MilvusVersion du SDK PythonVersion du SDK JavaVersion du SDK Node.js
2.4.82.4.52.4.32.4.4

Milvus 2.4.8 a apporté plusieurs améliorations significatives aux performances et à la stabilité du système. La caractéristique la plus notable est la mise en œuvre du compactage par regroupement, un mécanisme qui améliore l'efficacité des recherches et des requêtes en redistribuant les données dans de grandes collections sur la base d'une clé de regroupement désignée, réduisant ainsi la quantité de données analysées. Le compactage a également été découplé du DataNode, ce qui permet à n'importe quel DataNode d'effectuer le compactage indépendamment, améliorant ainsi la tolérance aux pannes, la stabilité, les performances et l'évolutivité. En outre, l'interface entre les composants Go et C++ a été remaniée pour utiliser des appels CGO asynchrones, ce qui a permis de résoudre des problèmes tels que les délais de session, tandis que plusieurs autres optimisations des performances ont été réalisées sur la base du profilage. Les dépendances de l'application ont également été mises à jour pour corriger les vulnérabilités de sécurité connues. De plus, cette version comprend également de nombreuses optimisations de performance et des corrections de bogues critiques.

Fonctionnalités

  • Implémentation du clustering compaction, permettant aux données d'être redistribuées sur la base d'une clé de clustering désignée afin d'améliorer l'efficacité des requêtes(#34326),(#34363).

Améliorations

  • Implémentation des capacités de recherche et d'extraction asynchrones dans CGO.(#34200)
  • Séparation du processus de compaction du DataNode Shard pour améliorer la modularité du système.(#34157)
  • Ajout du support pour le pooling client dans QueryNode au sein du proxy/délégateur pour améliorer les performances.(#35195)
  • Intégration de Sonic pour minimiser la surcharge CPU pendant le marshaling JSON et le unmarshaling dans les handlers Gin et RestfulV1.(#35018)
  • Introduction d'un cache en mémoire pour optimiser la récupération des résultats d'authentification.(#35272)
  • Modification du type de métrique par défaut pour autoindex.[#34277, #34479]
  • Refonte du format de mémoire d'exécution pour les colonnes variables, conduisant à une réduction de l'utilisation de la mémoire.[#34367, #35012, #35041]
  • Refonte des processus de compactage pour permettre le stockage de données persistantes.(#34268)
  • Activation de la prise en charge des fichiers mappés en mémoire pour les segments croissants, ce qui améliore la gestion de la mémoire.(#34110)
  • Amélioration des journaux d'accès en ajoutant la prise en charge de l'API RESTful, les niveaux de cohérence des journaux et la distinction entre les erreurs système et les erreurs utilisateur.[#34295, #34352, #34396]
  • Utilisation du nouveau paramètre range_search_k dans Knowhere pour accélérer les recherches de portée.(#34709)
  • Application de filtres de Bloom bloqués pour améliorer la vitesse de construction des filtres et des requêtes.[#34377, #34922]
  • Amélioration de l'utilisation de la mémoire :
    • Espace pré-alloué pour les tampons d'insertion des DataNodes.(#34205)
    • Pré-allocation de FieldData pour les opérations Reduce.(#34254)
    • Libération des enregistrements dans le codec de suppression pour éviter les fuites de mémoire.(#34506)
    • Contrôle du niveau de concurrence du gestionnaire de fichiers disque pendant le chargement des fichiers.(#35282)
    • Optimisation de la logique de collecte des ordures en cours d'exécution de Go pour libérer la mémoire en temps voulu.(#34950)
    • Implémentation d'une nouvelle politique de scellement pour les segments croissants.(#34779)
  • Améliorations de DataCoord :
    • Réduction de l'utilisation du CPU.[#34231, #34309]
    • Implémentation d'une logique de sortie du ramasse-miettes plus rapide.(#35051)
    • Amélioration des algorithmes de planification des noeuds de travail.(#34382)
    • Amélioration de l'algorithme de contrôle de la taille des segments spécifiquement pour les opérations d'importation.(#35149)
  • Amélioration de l'algorithme d'équilibrage de charge :
    • Réduction du facteur de surcharge de la mémoire sur le délégateur.(#35164)
    • Allocation d'une taille de mémoire fixe pour le délégateur.(#34600)
    • Evite l'allocation excessive de segments et de canaux pour les nouveaux noeuds de requête.(#34245)
    • Réduction du nombre de tâches par cycle d'ordonnancement par le coordinateur de requêtes tout en augmentant la fréquence d'ordonnancement.(#34987)
    • Amélioration de l'algorithme d'équilibrage des canaux sur le DataNode.(#35033)
  • Extension des métriques du système : Ajout de nouvelles mesures à travers divers composants pour surveiller des aspects spécifiques, y compris :

Changements

  • Pour les utilisateurs de logiciels libres, cette version modifie les types de métriques dans AutoIndex pour FloatVector et BinaryVector en Cosine et Hamming, respectivement.

  • Versions de dépendances tierces corrigées:

    • Cette version introduit des versions corrigées pour certaines bibliothèques de dépendances tierces, ce qui améliore considérablement la gestion de la chaîne d'approvisionnement logicielle de Milvus.
    • En isolant le projet des modifications en amont, elle protège les constructions quotidiennes des perturbations potentielles.
    • La mise à jour garantit la stabilité en hébergeant exclusivement des paquets tiers C++ validés sur JFrog Cloud et en utilisant les révisions de recettes Conan (RREV).
    • Cette approche atténue le risque de rupture des changements provenant des mises à jour dans ConanCenter.
    • Les développeurs utilisant Ubuntu 22.04 bénéficieront immédiatement de ces changements. Cependant, les développeurs utilisant d'autres systèmes d'exploitation devront peut-être mettre à jour leur version de glibc pour éviter les problèmes de compatibilité.

Corrections de bugs critiques

  • Correction d'un problème où les données de suppression étaient perdues à cause de l'omission de segments pendant le compactage de L0.[#33980, #34363]
  • Correction d'un problème où les messages de suppression n'étaient pas transférés en raison d'une mauvaise gestion de l'étendue des données.(#35313)
  • Résolution d'une exception SIGBUS survenant suite à une utilisation incorrecte de mmap[#34455, #34530].
  • Correction des plantages causés par des expressions de recherche illégales.(#35307)
  • Correction d'un problème où la surveillance d'un DataNode échouait à cause d'un réglage incorrect du délai d'attente dans le contexte de surveillance.(#35017)

Correction de bogues

  • Correction des vulnérabilités de sécurité en mettant à jour certaines dépendances.[#33927, #34693]
  • Correction d'une erreur d'analyse déclenchée par des expressions excessivement longues.(#34957)
  • Résolution d'une fuite de mémoire qui se produisait lors de l'analyse du plan de requête.(#34932)
  • Correction d'un problème où les modifications dynamiques du niveau du journal ne prenaient pas effet.(#34777)
  • Résolution d'un problème où les requêtes group by sur des données croissantes échouaient à cause d'offsets de segments non initialisés.(#34750)
  • Correction de la définition des paramètres de recherche lors de l'utilisation de l'itérateur Knowhere.(#34732)
  • Révision de la logique de vérification de l'état du chargement de la partition.(#34305)
  • Correction d'un problème où les mises à jour du cache des privilèges échouaient à cause d'erreurs de requête non gérées.(#34697)
  • Résolution d'un échec dans la récupération de la collection chargée après le redémarrage de QueryCoord.(#35211)
  • Correction d'un problème d'idempotence de charge en supprimant la validation inutile des paramètres d'index.(#35179)
  • S'assurer que compressBinlog est exécuté pour permettre à reloadFromKV de remplir correctement le logID de binlog après le redémarrage de DataCoord.(#34062)
  • Correction d'un problème où les métadonnées de collecte n'étaient pas supprimées après le ramassage des ordures dans DataCoord.(#34884)
  • Résolution d'une fuite de mémoire dans SegmentManager au sein de DataCoord en supprimant les segments vidés générés par les importations.(#34651)
  • Correction d'un problème de panique lorsque le compactage était désactivé et qu'une collection était abandonnée.(#34206)
  • Correction d'un problème de dépassement de mémoire dans DataNode en améliorant l'algorithme d'estimation de l'utilisation de la mémoire.(#34203)
  • Prévention de l'utilisation de la mémoire en rafale lorsque plusieurs requêtes d'extraction de vecteur ont un échec de cache en implémentant le vol unique pour le cache de morceaux.(#34283)
  • Capture de ErrKeyNotFound pendant les opérations CAS (Compare and Swap) dans la configuration.(#34489)
  • Correction d'un problème où les mises à jour de configuration échouaient à cause de l'utilisation par erreur de la valeur formatée dans une opération CAS.(#34373)

Divers

  • Ajout de la prise en charge de l'exportateur HTTP OTLP, améliorant l'observabilité et les capacités de surveillance.[#35073, #35299]
  • Amélioration de la fonctionnalité de la base de données en introduisant des propriétés telles que "max collections" et "disk quota", qui peuvent maintenant être modifiées dynamiquement.[#34511, #34386]
  • Ajout de capacités de traçage pour les processus de compactage L0 dans DataNode afin d'améliorer les diagnostics et la surveillance.(#33898)
  • Introduction d'une configuration de quotas pour le nombre d'entrées de segments L0 par collection, permettant un meilleur contrôle des taux de suppression en appliquant une rétropression.(#34837)
  • Extension du mécanisme de limitation du taux pour les opérations d'insertion afin de couvrir également les opérations d'insertion ascendante, garantissant des performances constantes en cas de charge élevée.(#34616)
  • Implémentation d'un pool CGO dynamique pour les appels CGO proxy, optimisant l'utilisation des ressources et les performances.(#34842)
  • Activation de l'option de compilation DiskAnn pour les systèmes d'exploitation Ubuntu, Rocky et Amazon, améliorant la compatibilité et les performances sur ces plateformes.(#34244)
  • Mise à jour de Conan vers la version 1.64.1, assurant la compatibilité avec les dernières fonctionnalités et améliorations.(#35216)
  • Mise à jour de Knowhere vers la version 2.3.7, apportant des améliorations de performance et de nouvelles fonctionnalités.(#34709)
  • Correction de la révision de certains paquets tiers pour assurer des constructions cohérentes et réduire le risque de changements inattendus.(#35316)

v2.4.6

Date de sortie : 16 juillet 2024

Version de MilvusVersion du SDK PythonVersion SDK JavaVersion du SDK Node.js
2.4.62.4.42.4.22.4.4

Milvus v2.4.6 est une version de correction de bogues qui résout des problèmes critiques tels que les paniques, les fuites de mémoire et la perte de données lors des suppressions. Elle introduit également plusieurs optimisations, notamment des améliorations des mesures de surveillance, la mise à niveau de la version Go vers 1.21 et l'amélioration de l'expérience utilisateur pour les requêtes RESTful count(*).

Améliorations

  • Amélioration de la convivialité des requêtes RESTful API(#34444).
  • Mise à jour de la version Go de 1.20 à 1.21(#33940).
  • Optimisation de l'histogramme métrique pour une granularité plus fine(#34592).
  • Mise à jour de la version de dépendance de Pulsar de 2.8.2 à 2.9.5. Il est recommandé de mettre à jour Pulsar vers la version 2.9.5 depuis Milvus 2.4.6.

Corrections de bogues

  • Correction d'un problème où l'API GetReplicas renvoyait un statut nul(#34019).
  • Correction d'un problème où les requêtes pouvaient renvoyer des enregistrements supprimés(#34502).
  • Résolution d'un problème où IndexNode se bloquait pendant l'arrêt à cause d'un contrôle incorrect de la durée de vie(#34559).
  • Correction d'une fuite de mémoire des objets oracle de clé primaire lorsqu'un travailleur est hors ligne(#34020).
  • Correction de ChannelManagerImplV2 pour notifier le bon Node, adressant les problèmes de capture de paramètres dans la fermeture de boucle(#34004).
  • Correction d'une course aux données en lecture-écriture dans ImportTask segmentsInfo en implémentant une copie profonde(#34126).
  • Correction des informations de version pour l'option de configuration "legacyVersionWithoutRPCWatch" afin d'éviter les erreurs lors des mises à jour(#34185).
  • Correction de la métrique pour le nombre de partitions chargées(#34195).
  • Passage de la configuration otlpSecure lors de la mise en place du traçage segcore(#34210).
  • Correction d'un problème où les propriétés de DataCoord étaient écrasées par erreur(#34240).
  • Résolution d'un problème de perte de données causé par la fusion erronée de deux flux de messages nouvellement créés(#34563).
  • Correction d'une panique causée par msgstream essayant de consommer un pchannel invalide(#34230).
  • Correction d'un problème où les importations pouvaient générer des fichiers orphelins(#34071).
  • Correction des résultats de requête incomplets dus à la duplication des clés primaires dans un segment(#34302).
  • Résolution d'un problème de segments scellés manquants dans le compactage L0(#34566).
  • Correction du problème des données sales dans la méta channel-cp générée après le garbage collection(#34609).
  • Correction des métriques où database_num était 0 après le redémarrage de RootCoord(#34010).
  • Correction d'une fuite de mémoire dans SegmentManager dans DataCoord en supprimant les segments vidés générés par l'importation(#34652).
  • Assurer que compressBinlog remplisse le logID des binlogs après le redémarrage de DataCoord, assurant un rechargement correct depuis KV(#34064).

v2.4.5

Date de publication : 18 juin 2024

Version de MilvusVersion du SDK PythonVersion SDK JavaVersion du SDK Node.js
2.4.52.4.42.4.12.4.3

La version 2.4.5 de Milvus apporte plusieurs améliorations et corrections de bogues pour améliorer les performances, la stabilité et les fonctionnalités. Milvus 2.4.5 simplifie la recherche vectorielle sparse, float16 et bfloat16 grâce à l'indexation automatique, accélère les recherches, les suppressions et les compactions grâce aux optimisations du filtre Bloom, et s'attaque à la gestion des données grâce à des temps de chargement plus rapides et à la prise en charge des segments L0 importés. Elle introduit également l'index sparse HNSW pour une recherche efficace de données spares en haute dimension, améliore l'API RESTful avec la prise en charge des vecteurs flottants sparse, et corrige des bogues critiques pour une meilleure stabilité.

Nouvelles fonctionnalités

  • Ajout du support rbac à l'API de description/modification de base de données(#33804)
  • Support de la construction de l'index HNSW pour les vecteurs sparse(#33653, #33662)
  • Prise en charge de la construction de l'index Disk pour les vecteurs binaires(#33575)
  • Prise en charge du type de vecteur sparse sur RESTful v2(#33555)
  • Ajout de l'api RESTful /management/stop pour arrêter un composant(#33799)

Améliorations

  • Fixer la valeur par défaut de maxPartitionNum à 1024(#33950)
  • Activation de la réinitialisation forcée de la connexion en cas d'erreur d'indisponibilité(#33910)
  • Activation de la limitation du taux de vidange au niveau de la collection(#33864)
  • Exécution en parallèle de l'application du filtre bloom pour accélérer la prédiction des segments(#33793)
  • Utilisation de la librairie fastjson pour unmarshal delete log afin d'accélérer json.Unmarshal(#33802)
  • Utilisation de BatchPkExist pour réduire le coût d'appel de la fonction bloom filter(#33752)
  • Accélération du chargement des petites collections(#33746)
  • Prise en charge de l'importation de données de suppression dans le segment L0 (#33712)
  • Suppression des tâches de compactage de marque pour être temporisées afin d'éviter d'exécuter la même tâche encore et encore(#33833)
  • Gestion des vecteurs float16 et bfloat16 comme BinaryVector dans l'insertion en masse de numpy (#33788)
  • Ajout du drapeau includeCurrentMsg pour la méthode seek(#33743)
  • Ajout de mergeInterval, targetBufSize, maxTolerantLagde msgdispatcher dans les configurations(#33680)
  • Amélioration de GetVectorByID pour les vecteurs épars(#33652)
  • Suppression de StringPrimarykey pour réduire les copies inutiles et le coût des appels de fonction (#33649)
  • Ajout de la correspondance autoindex pour le type de données binaire/sparse(#33625)
  • Optimisation de certains caches pour réduire l'utilisation de la mémoire(#33560)
  • Abstraction de l'interface d'exécution pour la tâche d'importation/préimportation (#33607)
  • Utilisation de map pk pour l'horodatage dans l'insertion de tampon pour réduire les causes de bf(#33582)
  • Evite les méta-opérations redondantes de l'import (#33519)
  • Amélioration des journaux en enregistrant de meilleures informations sur les quotas de disque, en ajoutant le drapeau UseDefaultConsistency, en supprimant les journaux inutiles(#33597, #33644, #33670)

Correction de bugs

  • Correction d'un bug qui empêchait queryHook de reconnaître le type de vecteur(#33911)
  • Prévention de l'utilisation de la variable d'itération partitionID capturée(#33970)
  • Correction d'un bogue pouvant entraîner l'impossibilité pour Milvus de créer un index automatique sur des vecteurs binaires et épars(#33867)
  • Correction d'un bogue pouvant amener l'indexnode à réessayer de créer un index sur des paramètres d'index invalides de tous les vecteurs (#33878)
  • Correction d'un bogue qui, lorsque des chargements et des libérations se produisent simultanément, peut faire planter le serveur(#33699)
  • Amélioration de la cohérence du cache pour les valeurs de configuration(#33797)
  • Prévention d'une éventuelle perte de données lors d'une suppression(#33821)
  • Garantie que le champ DroppedAt (horodatage probable de la suppression) est défini après l'abandon de collections(#33767)
  • Correction d'un problème qui aurait pu amener Milvus à gérer incorrectement la taille des données vectorielles binaires(#33751)
  • Prévention de l'enregistrement des informations d'identification Kafka sensibles en texte clair(#33694, #33747)
  • Milvus peut correctement importer des données avec plusieurs champs vectoriels(#33724).
  • Amélioration de la fiabilité de l'importation en vérifiant si un travail d'importation existe avant de démarrer.(#33673)
  • Amélioration de la gestion de l'index HNSW clairsemé (fonctionnalité interne)(#33714)
  • Nettoyage de la mémoire vectorielle pour éviter les fuites de mémoire(#33708)
  • Garantie d'un échauffement asynchrone plus fluide en corrigeant un problème de verrouillage d'état(#33687)
  • Correction d'un bogue qui pouvait causer des résultats manquants dans les itérateurs de requêtes.(#33506)
  • Correction d'un bogue pouvant entraîner une taille inégale des segments d'importation (#33634)
  • Correction d'une mauvaise gestion de la taille des données pour les types bf16, fp16 et les vecteurs binaires(#33488)
  • Amélioration de la stabilité en corrigeant les problèmes potentiels avec le compacteur L0(#33564)
  • Garantie que les mises à jour de la configuration dynamique sont correctement reflétées dans le cache.(#33590)
  • Amélioration de la précision de la métrique RootCoordQuotaStates (#33601)
  • Assurer un rapport précis du nombre d'entités chargées dans la métrique(#33522)
  • Fourniture d'informations plus complètes dans les journaux d'exception. (#33396)
  • Optimisation du pipeline de requêtes en supprimant le vérificateur de groupe inutile(#33485)
  • Utilisation du chemin de stockage local pour une vérification plus précise de la capacité du disque sur le noeud d'index.(#33505)
  • Correction hasMoreResult peut retourner false quand le nombre de hits est plus grand que la limite(#33642)
  • Retardement du chargement des bf dans le délégateur pour éviter que les bf soient chargés encore et encore lorsque le travailleur n'a plus de mémoire(#33650) - Correction d'un bogue qui empêchait queryHook de reconnaître le type de vecteur(#33911)
  • Prévention de l'utilisation de la variable d'itération capturée partitionID(#33970)
  • Correction d'un bogue pouvant entraîner l'impossibilité pour Milvus de créer un index automatique sur des vecteurs binaires et épars(#33867)
  • Correction d'un bogue pouvant amener l'indexnode à réessayer de créer un index sur des paramètres d'index invalides de tous les vecteurs (#33878)
  • Correction d'un bogue qui, lorsque des chargements et des libérations se produisent simultanément, peut faire planter le serveur(#33699)
  • Amélioration de la cohérence du cache pour les valeurs de configuration(#33797)
  • Prévention d'une éventuelle perte de données lors d'une suppression(#33821)
  • Garantie que le champ DroppedAt (horodatage probable de la suppression) est défini après l'abandon de collections(#33767)
  • Correction d'un problème qui aurait pu amener Milvus à gérer incorrectement la taille des données vectorielles binaires(#33751)
  • Prévention de l'enregistrement des informations d'identification Kafka sensibles en texte clair(#33694, #33747)
  • Milvus peut correctement importer des données avec plusieurs champs vectoriels(#33724).
  • Amélioration de la fiabilité de l'importation en vérifiant si un travail d'importation existe avant de démarrer.(#33673)
  • Amélioration de la gestion de l'index HNSW clairsemé (fonctionnalité interne)(#33714)
  • Nettoyage de la mémoire vectorielle pour éviter les fuites de mémoire(#33708)
  • Garantie d'un échauffement asynchrone plus fluide en corrigeant un problème de verrouillage d'état(#33687)
  • Correction d'un bogue qui pouvait causer des résultats manquants dans les itérateurs de requêtes.(#33506)
  • Correction d'un bogue pouvant entraîner une taille inégale des segments d'importation (#33634)
  • Correction d'une mauvaise gestion de la taille des données pour les types bf16, fp16 et les vecteurs binaires(#33488)
  • Amélioration de la stabilité en corrigeant les problèmes potentiels avec le compacteur L0(#33564)
  • Garantie que les mises à jour de la configuration dynamique sont correctement reflétées dans le cache.(#33590)
  • Amélioration de la précision de la métrique RootCoordQuotaStates (#33601)
  • Assurer un rapport précis du nombre d'entités chargées dans la métrique(#33522)
  • Fourniture d'informations plus complètes dans les journaux d'exception. (#33396)
  • Optimisation du pipeline de requêtes en supprimant le vérificateur de groupe inutile(#33485)
  • Utilisation du chemin de stockage local pour une vérification plus précise de la capacité du disque sur le noeud d'index.(#33505)
  • Correction hasMoreResult peut retourner false quand le nombre de hits est plus grand que la limite(#33642)
  • Retardement du chargement des bf dans le délégateur pour éviter que les bf soient chargés encore et encore lorsque le travailleur n'a plus de mémoire(#33650)

v2.4.4

Date de publication : 31 mai 2024

Version de MilvusVersion du SDK PythonVersion SDK JavaVersion du SDK Node.js
2.4.42.4.32.4.12.4.2

Milvus v2.4.4 comprend plusieurs corrections de bogues critiques et des améliorations visant à accroître les performances et la stabilité. Nous avons notamment résolu un problème critique dans lequel les journaux de statistiques d'insertion en masse étaient incorrectement collectés, ce qui pouvait affecter l'intégrité des données. Nous recommandons fortement à tous les utilisateurs de la version 2.4 de passer à cette version pour bénéficier de ces corrections.

Si vous utilisez l'insertion en bloc, mettez à jour vers la version 2.4.4 dès que possible pour garantir l'intégrité des données.

Corrections de bogues critiques

  • Remplissage de l'ID du journal des statistiques et validation de son exactitude(#33478)

Améliorations

  • Mise à jour du jeu de bits pour ARM SVE(#33440)
  • Activation de la compilation Milvus avec GCC-13(#33441)

Correction de bogues

  • Affichage de collections vides lorsque tous les privilèges sont accordés(#33454)
  • S'assure que CMake se télécharge et s'installe pour la plateforme actuelle, et pas seulement pour x86_64(#33439)

v2.4.3

Date de publication : 29 mai 2024

Version de MilvusVersion du SDK PythonVersion SDK JavaVersion du SDK Node.js
2.4.32.4.32.4.12.4.2

La version 2.4.3 de Milvus a introduit un grand nombre de fonctionnalités, d'améliorations et de corrections de bogues afin d'améliorer les performances et la fiabilité. Parmi les améliorations notables, citons la prise en charge de l'insertion en bloc de vecteurs flottants épars et l'accélération optimisée du filtre Bloom. Les améliorations couvrent différents domaines, des mises à jour dynamiques de la configuration à l'optimisation de l'utilisation de la mémoire. Les corrections de bogues ont permis de résoudre des problèmes critiques tels que des scénarios de panique et de garantir un fonctionnement plus fluide du système. Cette version souligne l'engagement continu de Milvus à améliorer les fonctionnalités, à optimiser les performances et à offrir une expérience utilisateur robuste.

Caractéristiques

  • Prise en charge de l'insertion en bloc de vecteurs flottants épars pour binlog/json/parquet(#32649)

Améliorations

  • Implémentation d'un canal de surveillance Datacoord/node basé sur RPC(#32036)
  • Optimisation du filtre bloom pour accélérer le filtrage des suppressions(#32642, #33329, #33284)
  • Chargement des données brutes via mmap si l'index scalaire n'a pas de données brutes(#33317)
  • Synchronisation de la configuration de milvus avec milvus.yaml(#33322, #32920, #32857, #32946)
  • Mise à jour de la version de knowhere(#33310, #32931, #33043)
  • Activation de la mise à jour dynamique de la politique d'équilibrage dans QueryCoord(#33272)
  • Utilisation d'un logger pré-construit dans le tampon d'écriture pour minimiser l'allocation du logger(#33304)
  • Amélioration de la vérification des paramètres(#32777, #33271, #33218)
  • Ajout d'un paramètre pour ignorer les ID de messages incorrects dans le point de contrôle(#33249)
  • Ajout d'une configuration pour contrôler la gestion des échecs d'initialisation pour les plugins(#32680)
  • Ajout d'une configuration de cohérence de calcul de score pour knowhere(#32997)
  • Introduction d'une option de configuration pour contrôler l'initialisation des permissions des rôles publics(#33174)
  • Optimisation de l'utilisation de la mémoire lors de la lecture des champs(#33196)
  • Amélioration de l'implémentation du Channel Manager v2(#33172, #33121, #33014)
  • Ajout d'une fonctionnalité permettant de suivre la taille des données en mémoire pour binlog(#33025)
  • Ajout de métriques pour la taille des fichiers d'index de segment(#32979, #33305)
  • Remplacement de Delete par DeletePartialMatch pour supprimer les métriques(#33029)
  • Obtention de la taille des données liées en fonction du type de segment(#33017)
  • Nettoyage des informations sur les noeuds de canaux dans le méta-magasin(#32988)
  • Suppression du rootcoord du courtier de nœuds de données(#32818)
  • Activation du téléchargement par lots(#32788)
  • Modification du numéro de partition par défaut à 16 lors de l'utilisation de la clé de partition(#32950)
  • Amélioration des performances de réduction sur les très grandes requêtes top-k(#32871)
  • Utilisation de la capacité de TestLocations pour accélérer l'écriture et le compactage(#32948)
  • Optimisation du pool d'analyseurs de plans pour éviter le recyclage inutile(#32869)
  • Amélioration de la vitesse de chargement(#32898)
  • Utilisation du niveau de cohérence par défaut de la collection pour restv2(#32956)
  • Ajout d'une réponse au coût pour l'API rest(#32620)
  • Activation de la politique d'équilibre exclusif des canaux(#32911)
  • Exposition de l'API describedatabase dans le proxy(#32732)
  • Utilisation du mapping coll2replica lors de l'obtention de RG par collection(#32892)
  • Ajout de plus de traçage pour la recherche et la requête(#32734)
  • Supporte la configuration dynamique pour la trace opentelemetry(#32169)
  • Evite l'itération sur les résultats des canaux lors de la mise à jour du leaderview(#32887)
  • Optimisation de la gestion des décalages de vecteurs pour parquet(#32822)
  • Amélioration du filtrage des segments de datacoord avec la collecte(#32831)
  • Ajustement du niveau et de la fréquence des journaux(#33042, #32838, #33337)
  • Activation de l'arrêt de l'équilibrage après que l'équilibrage ait été suspendu(#32812)
  • Mise à jour du cache du chef de file lorsque l'emplacement du chef de file a changé(#32470)
  • Suppression d'API et de champs obsolètes(#32808, #32704)
  • Ajout de metautil.channel pour convertir les comparaisons de chaînes en int(#32749)
  • Ajout d'informations sur le type pour le message d'erreur du rédacteur de la charge utile et le journal lorsque le querynode a trouvé une nouvelle collection(#32522)
  • Vérification du numéro de partition lors de la création d'une collection avec une clé de partition(#32670)
  • Suppression de l'ancien segment l0 en cas d'échec de la surveillance(#32725)
  • Amélioration de l'impression du type de requête(#33319)
  • Vérification que les données d'un champ de tableau sont nulles avant d'obtenir le type(#33311)
  • Retour d'erreur en cas d'échec du démarrage de l'opération Delete/AddNode(#33258)
  • Permet la mise à jour de l'ID du serveur du datanode(#31597)
  • Nettoyage unifié des métriques des querynodes dans la version de collection(#32805)
  • Correction de la version incorrecte de la configuration de l'index scalaire automatique(#32795)
  • Amélioration de la vérification des paramètres d'index pour la création/modification d'index(#32712)
  • Suppression de la récupération redondante des répliques(#32985)
  • Activation de la table méta des canaux pour écrire plus de 200k segments(#33300)

Correction de bugs

  • Correction d'une panique lorsque la base de données n'existe pas dans l'intercepteur de limite de taux(#33308)
  • Correction de l'échec de la collecte des métriques quotacenter en raison de paramètres incorrects(#33399)
  • Correction d'une panique si processactivestandby retournait une erreur(#33372)
  • Correction de la troncature des résultats de recherche dans restful v2 lorsque nq > 1(#33363)
  • Ajout du champ nom de la base de données pour les opérations sur les rôles dans restful v2(#33291)
  • Correction de la limite de taux globale qui ne fonctionne pas(#33336)
  • Correction de la panique causée par l'échec de la construction de l'index(#33314)
  • Ajout d'une validation pour le vecteur sparse dans segcore pour assurer la légalité(#33312)
  • Suppression de la tâche de syncmgr après l'achèvement de la tâche(#33303)
  • Correction de l'échec du filtrage de la clé de partition pendant l'importation de données(#33277)
  • Correction de l'impossibilité de générer le traceID lors de l'utilisation de l'exportateur noop(#33208)
  • Amélioration de la récupération des résultats des requêtes(#33179)
  • Marquage de l'abandon du point de contrôle du canal pour éviter la fuite des métriques de décalage du point de contrôle(#33201)
  • Correction du blocage du noeud de la requête lors de l'arrêt de la progression(#33154)
  • Correction des segments manquants dans la réponse de rinçage(#33061)
  • Rendre l'opération de soumission idempotente(#33053)
  • Allocation d'une nouvelle tranche pour chaque lot dans le lecteur de flux(#33360)
  • Nettoyage du noeud hors ligne du groupe de ressources après le redémarrage de QueryCoord(#33233)
  • Suppression du compacteur l0 dans completedCompactor(#33216)
  • Réinitialisation de la valeur du quota lors de l'initialisation du limiteur(#33152)
  • Correction d'un problème où la limite etcd était dépassée(#33041)
  • Résolution du dépassement de la limite des transactions etcd dû à un trop grand nombre de champs(#33040)
  • Suppression de la réintroduction de RLock dans GetNumRowsOfPartition(#33045)
  • Démarrage de LeaderCacheObserver avant SyncAll(#33035)
  • Activation de l'équilibrage du canal de secours libéré(#32986)
  • Initialisation de l'enregistreur d'accès avant l'initialisation du serveur(#32976)
  • Rendre le compacteur capable d'effacer les segments vides(#32821)
  • Remplissage du numéro d'entrée du deltalog et de l'intervalle de temps dans les compactions l0(#33004)
  • Correction d'un crash de proxy dû à une course aux données du cache du leader du shard(#32971)
  • Correction de l'unité de temps pour la métrique de l'index de charge(#32935)
  • Correction d'un problème où un segment sur un noeud de requête s'arrêtant ne pouvait pas être libéré avec succès(#32929)
  • Correction de l'estimation des ressources d'index(#32842)
  • Définition du point de contrôle du canal à la position delta(#32878)
  • Fait que syncmgr verrouille la clé avant de retourner le futur(#32865)
  • S'assurer que l'index inversé n'a qu'un seul segment(#32858)
  • Correction du déclenchement du compactage choisissant deux segments identiques(#32800)
  • Correction d'un problème où le nom de la partition ne pouvait pas être spécifié dans l'importation de binlog(#32730, #33027)
  • Rendre la colonne dynamique optionnelle dans l'importation de parquet(#32738)
  • Suppression de la vérification de l'auto ID lors de l'insertion de données(#32775)
  • Validation du nombre de lignes pour les données des champs d'insertion avec le schéma(#32770)
  • Ajout d'un wrapper et d'un keepalive pour les IDs de CTraceContext(#32746)
  • Correction d'un problème où le nom de la base de données n'était pas trouvé dans l'objet méta datacoord(#33412)
  • Synchronisation du segment abandonné pour la partition abandonnée(#33332)
  • Correction de l'échec de la collecte des métriques de quotaCenter en raison de paramètres incorrects(#33399)

v2.4.1

Date de publication : 6 mai 2024

Version de MilvusVersion du SDK PythonVersion du SDK JavaVersion du SDK Node.js
2.4.12.4.12.4.02.4.2

La version 2.4.1 de Milvus apporte de nombreuses améliorations et corrections de bogues qui visent à améliorer les performances, l'observabilité et la stabilité du logiciel. Ces améliorations comprennent une API déclarative pour les groupes de ressources, une fonctionnalité améliorée d'insertion en bloc qui prend en charge les types de données vectorielles Float16/BFloat16, un mécanisme affiné de collecte des ordures (GC) qui réduit les opérations de liste pour le stockage des objets, et d'autres changements liés à l'optimisation des performances. En outre, les corrections de bogues abordent des problèmes tels que les erreurs de compilation, l'échec des correspondances floues sur les caractères de nouvelle ligne, les types de données de paramètres incorrects pour les interfaces RESTful, et les erreurs soulevées par BulkInsert sur les fichiers numpy lorsque les champs dynamiques sont activés.

Changements de rupture

  • Suppression de la prise en charge de la suppression avec une expression de filtre vide.(#32472)

Fonctionnalités

  • Ajout du support des types de données vectorielles Float16/BFloat16 dans l'insertion en bloc(#32157)
  • Amélioration des vecteurs flottants épars pour supporter la recherche brute d'itérateur et la recherche d'intervalle(#32635)

Améliorations

  • Ajout d'une api déclarative pour les groupes de ressources(#31930, #32297, #32536, #32666)
  • Réécriture de l'observateur de collection dans QueryCoord pour le rendre orienté vers les tâches(#32441)
  • Refonte de la structure de données utilisée dans le SyncManager de DataNode pour réduire l'utilisation de la mémoire et prévenir les erreurs(#32673)
  • Révision de l'implémentation du garbage collection pour minimiser les opérations de liste associées au stockage des objets(#31740)
  • Réduction de l'utilisation du processeur lorsque le nombre de collections est élevé(#32245)
  • Amélioration de la gestion de milvus.yaml en générant automatiquement les éléments de configuration pertinents dans le fichier milvus.yaml par le biais du code(#31832, #32357)
  • Amélioration des performances de la requête en récupérant les données après avoir effectué une réduction locale(#32346)
  • Ajout de l'option WithBlock pour la création de clients etcd(#32641)
  • Utilisation de l'identifiant client_request_id spécifié par le client comme TraceID si le client le fournit(#32264)
  • Ajout d'un label db aux métriques pour les opérations de suppression et d'insertion en masse(#32611)
  • Ajout d'une logique permettant d'ignorer la vérification par la configuration pour les colonnes AutoID et PartitionKey(#32592)
  • Amélioration des erreurs liées à l'authentification(#32253)
  • Amélioration des journaux d'erreurs pour AllocSegmentID dans DataCoord(#32351, #32335)
  • Suppression des métriques en double(#32380, #32308) et nettoyage des métriques inutilisées(#32404, #32515)
  • Ajout d'une option de configuration pour contrôler l'activation ou non de la fonctionnalité partitionKey(#32433)
  • Ajout d'une option de configuration pour contrôler la quantité maximale de données qui peuvent être insérées dans une seule requête(#32433)
  • Paralléliser l'opération applyDelete au niveau du segment pour accélérer le traitement des messages Delete par le Delegator(#32291)
  • Utilisation de l'index(#32232, #32505, #32533, #32595) et du cache d'ajout(#32580) pour accélérer les opérations de filtrage fréquentes dans QueryCoord.
  • Réécriture de la structure des données(#32273) et refactorisation du code(#32389) pour accélérer les opérations courantes dans DataCoord.
  • Suppression d'openblas de conan(#32002)

Correction de bogues

  • Correction du build milvus dans rockylinux8(#32619)
  • Correction des erreurs de compilation pour SVE sur ARM(#32463, #32270)
  • Correction du problème de crash sur les images GPU basées sur ARM(#31980)
  • Correction de la requête regex qui ne peut pas gérer le texte avec une nouvelle ligne(#32569)
  • Correction de la recherche obtenant un résultat vide causé par GetShardLeaders retournant une liste de noeuds vide(#32685)
  • Correction de l'erreur soulevée par BulkInsert lors de la rencontre de champs dynamiques dans les fichiers numpy(#32596)
  • Correction de bugs liés à l'interface RESTFulV2, y compris une correction importante qui permet aux paramètres numériques dans les requêtes d'accepter une entrée numérique au lieu d'une chaîne de caractères(#32485, #32355)
  • Correction d'une fuite de mémoire dans le proxy en supprimant l'événement "watching config" dans le limiteur de vitesse(#32313)
  • Correction du problème où le limiteur de taux rapporte incorrectement que la partition ne peut pas être trouvée quand partitionName n'est pas spécifié(#32647)
  • Ajout d'une détection entre les cas où la collection est dans l'état de récupération et où elle n'est pas chargée dans le type d'erreur.(#32447)
  • Correction de la métrique négative du nombre d'entités interrogeables(#32361)

v2.4.0

Date de publication : 17 avril 2024

Version de MilvusVersion du SDK PythonVersion du SDK Node.js
2.4.02.4.02.4.0

Nous sommes heureux d'annoncer le lancement officiel de Milvus 2.4.0. S'appuyant sur les bases solides de la version 2.4.0-rc.1, nous nous sommes concentrés sur la résolution des bogues critiques signalés par nos utilisateurs, tout en préservant les fonctionnalités existantes. En outre, Milvus 2.4.0 introduit une série d'optimisations visant à accroître les performances du système, à améliorer l'observabilité grâce à l'incorporation de diverses mesures et à rationaliser la base de code pour une plus grande simplicité.

Améliorations

  • Support des connexions MinIO TLS(#31396, #31618)
  • Support d'AutoIndex pour les champs scalaires(#31593)
  • Refactorisation de la recherche hybride pour des chemins d'exécution cohérents avec la recherche régulière(#31742, #32178)
  • Filtrage accéléré grâce au refactoring de bitset et bitset_view(#31592, #31754, #32139)
  • Les tâches d'importation prennent désormais en charge l'attente de l'achèvement de l'index des données(#31733)
  • Amélioration de la compatibilité des importations(#32121), de la planification des tâches(#31475), et des limites sur la taille et le nombre de fichiers importés(#31542)
  • Efforts de simplification du code incluant la standardisation de l'interface pour la vérification de type(#31945, #31857), la suppression du code et des métriques obsolètes(#32079, #32134, #31535, #32211, #31935), et la normalisation des noms de constantes(#31515).
  • Nouvelle métrique pour QueryCoord current target channel check point lag latency(#31420)
  • Nouveau label db pour les métriques communes(#32024)
  • Nouvelles métriques concernant le nombre d'entités supprimées, indexées et chargées, avec l'inclusion d'étiquettes telles que collectionName et dbName(#31861)
  • Amélioration de la gestion des erreurs pour les types de vecteurs non concordants(#31766)
  • Prise en charge de l'affichage d'erreurs au lieu d'un plantage lorsque l'index ne peut pas être construit(#31845)
  • Prise en charge de l'invalidation du méta-cache de la base de données lors de l'abandon d'une base de données(#32092)
  • Refonte de l'interface pour la distribution des canaux(#31814) et la gestion de la vue du leader(#32127)
  • Refactorisation de l'interface du gestionnaire de distribution des canaux(#31814) et Refactorisation de l'interface du gestionnaire de vue du leader(#32127)
  • Traitement par lots(#31632), ajout d'informations de mappage(#32234, #32249), et éviter l'utilisation de verrou(#31787) pour accélérer les opérations fréquemment invoquées.

Ruptures

  • Abandon de la recherche de regroupement sur les vecteurs binaires(#31735)
  • Abandon de la recherche par regroupement avec la recherche hybride(#31812)
  • Abandon de l'index HNSW sur les vecteurs binaires(#31883)

Corrections de bugs

  • Amélioration des vérifications des types de données et des valeurs pour les requêtes et les insertions afin d'éviter les plantages(#31478, #31653, #31698, #31842, #32042, #32251, #32204)
  • Correction des bogues de l'API RESTful(#32160)
  • Amélioration de la prédiction de l'utilisation des ressources de l'index inversé(#31641)
  • Résolution des problèmes de connexion avec etcd lorsque l'autorisation est activée(#31668)
  • Mise à jour de sécurité pour le serveur nats(#32023)
  • Stockage des fichiers d'index inversé dans un chemin de stockage local de QueryNode au lieu de /tmp(#32210)
  • Correction des fuites de mémoire du datacoord pour collectionInfo(#32243)
  • Correction de bogues liés à fp16/bf16 pouvant causer une panique du système(#31677, #31841, #32196)
  • Résolution de problèmes avec la recherche de groupement renvoyant des résultats insuffisants(#32151)
  • Ajustement de la recherche avec itérateurs pour gérer plus efficacement les décalages dans l'étape de réduction et garantir des résultats adéquats lorsque "reduceStopForBest" est activé(#32088)

v2.4.0-rc.1

Date de publication : 20 mars 2024

Version de MilvusVersion du SDK Python
2.4.0-rc.12.4.0

Cette version introduit plusieurs fonctionnalités basées sur des scénarios :

  • Nouvel index GPU - CAGRA: Grâce à la contribution de NVIDIA, ce nouvel index GPU offre un gain de performance de 10 fois, en particulier pour les recherches par lots. Pour plus de détails, voir Index GPU.

  • Recherchemulti-vectorielle et hybride: Cette fonctionnalité permet de stocker des embeddings vectoriels provenant de plusieurs modèles et d'effectuer des recherches hybrides. Pour plus d'informations, reportez-vous à la section Recherche hybride.

  • Vecteurs épars: Idéaux pour l'interprétation et l'analyse des mots-clés, les vecteurs épars sont désormais pris en charge pour le traitement dans votre collection. Pour plus d'informations, reportez-vous à la section Vecteurs épars.

  • Recherche par regroupement: L'agrégation catégorielle améliore la mémorisation au niveau des documents pour les applications de génération assistée par récupération (RAG). Pour plus d'informations, reportez-vous à la section Recherche par regroupement.

  • Index inversé et correspondance floue: ces fonctionnalités améliorent la recherche par mot-clé pour les champs scalaires. Pour plus d'informations, reportez-vous à la section Champs scalaires indexés et recherche filtrée.

Nouvelles fonctionnalités

Index GPU - CAGRA

Nous tenons à exprimer notre sincère gratitude à l'équipe de NVIDIA pour sa contribution inestimable à CAGRA, un index de graphes basé sur le GPU à la pointe de la technologie (SoTA) qui peut être utilisé en ligne.

Contrairement aux index GPU précédents, CAGRA démontre une supériorité écrasante même dans les requêtes par petits lots, un domaine où les index CPU excellent traditionnellement. En outre, les performances de CAGRA dans les requêtes par lots importants et la vitesse de construction de l'index, domaines dans lesquels les index GPU brillent déjà, sont réellement inégalées.

Un exemple de code peut être trouvé dans example_gpu_cagra.py.

Vecteur Sparse (Beta)

Dans cette version, nous introduisons un nouveau type de champ vectoriel appelé vecteur clairsemé. Les vecteurs épars sont différents de leurs homologues denses car ils ont tendance à avoir un nombre de dimensions plus élevé de plusieurs magnitudes avec seulement une poignée de dimensions non nulles. Cette caractéristique offre une meilleure interprétabilité en raison de sa nature basée sur les termes et peut être plus efficace dans certains domaines. Les modèles peu denses appris, tels que SPLADEv2/BGE-M3, se sont révélés très utiles pour les tâches courantes de classement de première étape. Le principal cas d'utilisation de cette nouvelle fonctionnalité de Milvus est de permettre une recherche sémantique approximative efficace du plus proche voisin sur des vecteurs épars générés par des modèles neuronaux tels que SPLADEv2/BGE-M3 et des modèles statistiques tels que l'algorithme BM25. Milvus prend désormais en charge le stockage, l'indexation et la recherche efficaces et performants (MIPS, Maximum Inner Product Search) de vecteurs épars.

Un exemple de code se trouve dans hello_sparse.py.

La prise en charge des vecteurs multiples est la pierre angulaire des applications qui nécessitent le traitement de données multi-modèles ou un mélange de vecteurs denses et peu denses. Avec le support multi-vecteur, vous pouvez maintenant :

  • Stocker les encastrements vectoriels générés pour des échantillons de texte, d'image ou de son non structurés à partir de plusieurs modèles.
  • Effectuer des recherches ANN qui incluent plusieurs vecteurs de chaque entité.
  • Personnaliser les stratégies de recherche en attribuant des poids aux différents modèles d'intégration.
  • Expérimenter divers modèles d'intégration pour trouver la combinaison de modèles optimale.

La prise en charge de plusieurs vecteurs permet de stocker, d'indexer et d'appliquer des stratégies de reclassement à plusieurs champs vectoriels de types différents, tels que FLOAT_VECTOR et SPARSE_FLOAT_VECTOR, dans une collection. Actuellement, deux stratégies de reclassement sont disponibles : Reciprocal Rank Fusion (RRF) et Average Weighted Scoring (notation moyenne pondérée). Ces deux stratégies combinent les résultats de recherche de différents champs vectoriels en un ensemble de résultats unifié. La première stratégie donne la priorité aux entités qui apparaissent systématiquement dans les résultats de recherche de différents champs vectoriels, tandis que l'autre stratégie attribue des poids aux résultats de recherche de chaque champ vectoriel afin de déterminer leur importance dans l'ensemble de résultats final.

Un exemple de code se trouve dans hybrid_search.py.

Index inversé et correspondance floue

Dans les versions précédentes de Milvus, les index de recherche binaire basés sur la mémoire et les index Marisa Trie étaient utilisés pour l'indexation des champs scalaires. Toutefois, ces méthodes étaient gourmandes en mémoire. La dernière version de Milvus utilise désormais l'index inversé basé sur Tantivy, qui peut être appliqué à tous les types de données numériques et de chaînes. Ce nouvel index améliore considérablement les performances des requêtes scalaires, en réduisant de dix fois les requêtes de mots-clés dans les chaînes de caractères. En outre, l'index inversé consomme moins de mémoire, grâce à des optimisations supplémentaires dans la compression des données et le mécanisme de stockage en mémoire (MMap) de la structure d'indexation interne.

Cette version prend également en charge les correspondances floues dans le filtrage scalaire en utilisant des préfixes, des infixes et des suffixes.

Des exemples de code peuvent être trouvés dans inverted_index_example.py et fuzzy_match.py.

Vous pouvez maintenant regrouper les résultats de la recherche par les valeurs d'un champ scalaire spécifique. Cela permet aux applications RAG d'implémenter le rappel au niveau du document. Considérons une collection de documents, chaque document est divisé en plusieurs passages. Chaque passage est représenté par un vecteur intégré et appartient à un document. Pour trouver les documents les plus pertinents au lieu de disperser les passages, vous pouvez inclure l'argument group_by_field dans l'opération search() pour regrouper les résultats par l'ID du document.

Un exemple de code se trouve dans example_group_by.py.

Type de données vectorielles Float16 et BFloat

L'apprentissage automatique et les réseaux neuronaux utilisent souvent des types de données de demi-précision, tels que Float16 et BFloat- Bien que ces types de données puissent améliorer l'efficacité des requêtes et réduire l'utilisation de la mémoire, ils s'accompagnent d'une réduction de la précision. Avec cette version, Milvus prend désormais en charge ces types de données pour les champs vectoriels.

Des exemples de code se trouvent dans float16_example.py et bfloat16_example.py.

Architecture mise à jour

Segment L0

Cette version inclut un nouveau segment appelé segment L0, conçu pour enregistrer les données supprimées. Ce segment compacte périodiquement les enregistrements supprimés stockés et les divise en segments scellés, ce qui réduit le nombre de vidanges de données nécessaires pour les petites suppressions et laisse une faible empreinte de stockage. Grâce à ce mécanisme, Milvus sépare complètement les compactions de données des vidanges de données, ce qui améliore les performances des opérations de suppression et d'insertion.

BulkInsert remanié

Cette version introduit également une logique d'insertion en bloc améliorée. Cela vous permet d'importer plusieurs fichiers en une seule demande d'insertion en bloc. Avec la version remaniée, les performances et la stabilité de l'insertion en bloc ont été améliorées de manière significative. L'expérience de l'utilisateur a également été améliorée, notamment grâce à une limitation fine du débit et à des messages d'erreur plus conviviaux. En outre, vous pouvez facilement accéder aux points d'extrémité d'insertion en bloc via l'API RESTful de Milvus.

Stockage en mémoire

Milvus utilise le stockage en mémoire (MMap) pour optimiser son utilisation de la mémoire. Au lieu de charger le contenu du fichier directement dans la mémoire, ce mécanisme mappe le contenu du fichier dans la mémoire. Cette approche s'accompagne d'une dégradation des performances. En activant le MMap pour une collection indexée par HNSW sur un hôte doté de 2 CPU et de 8 Go de RAM, vous pouvez charger 4 fois plus de données avec une dégradation des performances inférieure à 10 %.

En outre, cette version permet également un contrôle dynamique et précis de MMap sans qu'il soit nécessaire de redémarrer Milvus.

Pour plus de détails, voir Stockage MMap.

Autres

Milvus-CDC

Milvus-CDC est un outil compagnon facile à utiliser pour capturer et synchroniser les données incrémentielles entre les instances Milvus, ce qui facilite la sauvegarde incrémentielle et la reprise après sinistre. Dans cette version, la stabilité de Milvus-CDC a été améliorée et sa fonctionnalité Change Data Capture (CDC) est désormais disponible de manière générale.

Pour en savoir plus sur Milvus-CDC, consultez le dépôt GitHub et la présentation de Milvus-CDC.

Interfaces MilvusClient affinées

MilvusClient est une alternative facile à utiliser au module ORM. Il adopte une approche purement fonctionnelle pour simplifier les interactions avec le serveur. Au lieu de maintenir un pool de connexions, chaque MilvusClient établit une connexion gRPC avec le serveur. Le module MilvusClient a implémenté la plupart des fonctionnalités du module ORM. Pour en savoir plus sur le module MilvusClient, visitez pymilvus et les documents de référence.

Traduit parDeepLogo

Feedback

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