Skip to main content
NetApp Solutions
La version française est une traduction automatique. La version anglaise prévaut sur la française en cas de divergence.

Milvus avec Amazon FSxN pour NetApp ONTAP : la dualité fichier/objet

Contributeurs

Cette section traite de la configuration de cluster milvus avec Amazon FSxN pour la solution de base de données vectorielle pour NetApp.

Milvus avec Amazon FSxN pour NetApp ONTAP : dualité fichier/objet

Dans cette section, pourquoi nous devons déployer une base de données vectorielle dans le cloud ainsi que des étapes pour déployer une base de données vectorielle (milvus autonome) dans Amazon FSxN pour NetApp ONTAP dans des conteneurs docker.

Le déploiement d'une base de données vectorielle dans le cloud offre plusieurs avantages significatifs, notamment pour les applications nécessitant le traitement de données de grande dimension et l'exécution de recherches de similarité. Tout d'abord, le déploiement basé sur le cloud offre une évolutivité qui facilite l'ajustement des ressources pour répondre aux volumes croissants de données et aux charges de requêtes. Ainsi, la base de données peut gérer efficacement l'augmentation de la demande tout en maintenant des performances élevées. Deuxièmement, le déploiement cloud assure la haute disponibilité et la reprise après incident, car les données peuvent être répliquées sur plusieurs sites géographiques, ce qui réduit le risque de perte de données et garantit la continuité du service même en cas d'événements imprévus. Troisièmement, il offre une rentabilité puisque vous ne payez que les ressources que vous utilisez et peut évoluer à la hausse ou à la baisse en fonction de la demande, évitant ainsi un investissement initial substantiel pour le matériel. Enfin, le déploiement d'une base de données vectorielle dans le cloud permet d'améliorer la collaboration, car les données sont accessibles et partagées depuis n'importe où, ce qui facilite le travail en équipe et la prise de décision basée sur les données.
Veuillez vérifier l'architecture du milvus autonome avec Amazon FSxN pour NetApp ONTAP utilisé dans cette validation.

Erreur : image graphique manquante

  1. Créez une instance Amazon FSxN pour NetApp ONTAP et notez les détails du VPC, des groupes de sécurité VPC et du sous-réseau. Ces informations seront requises lors de la création d'une instance EC2. Vous trouverez plus de détails ici - https://us-east-1.console.aws.amazon.com/fsx/home?region=us-east-1#file-system-create

  2. Créez une instance EC2, en vous assurant que le VPC, les groupes de sécurité et le sous-réseau correspondent à ceux de l'instance Amazon FSxN pour NetApp ONTAP.

  3. Installez nfs-common à l'aide de la commande 'apt-get install nfs-common' et mettez à jour les informations sur le paquet à l'aide de 'udo apt-get update'.

  4. Créez un dossier de montage et montez-le sur Amazon FSxN pour NetApp ONTAP.

    ubuntu@ip-172-31-29-98:~$ mkdir /home/ubuntu/milvusvectordb
    ubuntu@ip-172-31-29-98:~$ sudo mount 172.31.255.228:/vol1 /home/ubuntu/milvusvectordb
    ubuntu@ip-172-31-29-98:~$ df -h /home/ubuntu/milvusvectordb
    Filesystem            Size  Used Avail Use% Mounted on
    172.31.255.228:/vol1  973G  126G  848G  13% /home/ubuntu/milvusvectordb
    ubuntu@ip-172-31-29-98:~$
  5. Installez Docker et Docker compose à l'aide de 'apt-get install'.

  6. Configurez un cluster Milvus à partir du fichier docker-compose.yaml, qui peut être téléchargé à partir du site Web Milvus.

    root@ip-172-31-22-245:~# wget https://github.com/milvus-io/milvus/releases/download/v2.0.2/milvus-standalone-docker-compose.yml -O docker-compose.yml
    --2024-04-01 14:52:23--  https://github.com/milvus-io/milvus/releases/download/v2.0.2/milvus-standalone-docker-compose.yml
    <removed some output to save page space>
  7. Dans la section « volumes » du fichier docker-compose.yml, mappez le point de montage NFS NetApp sur le chemin du conteneur Milvus correspondant, en particulier dans etcd, minio et standalone.Check "Annexe D : docker-compose.yml" pour plus de détails sur les modifications de yml

  8. Vérifiez les dossiers et fichiers montés.

    ubuntu@ip-172-31-29-98:~/milvusvectordb$ ls -ltrh /home/ubuntu/milvusvectordb
    total 8.0K
    -rw-r--r-- 1 root root 1.8K Apr  2 16:35 s3_access.py
    drwxrwxrwx 2 root root 4.0K Apr  4 20:19 volumes
    ubuntu@ip-172-31-29-98:~/milvusvectordb$ ls -ltrh /home/ubuntu/milvusvectordb/volumes/
    total 0
    ubuntu@ip-172-31-29-98:~/milvusvectordb$ cd
    ubuntu@ip-172-31-29-98:~$ ls
    docker-compose.yml  docker-compose.yml~  milvus.yaml  milvusvectordb  vectordbvol1
    ubuntu@ip-172-31-29-98:~$
  9. Exécutez 'docker-compose up -d' à partir du répertoire contenant le fichier docker-compose.yml.

  10. Vérifier l'état du conteneur Milvus.

    ubuntu@ip-172-31-29-98:~$ sudo docker-compose ps
          Name                     Command                  State                                               Ports
    ----------------------------------------------------------------------------------------------------------------------------------------------------------
    milvus-etcd         etcd -advertise-client-url ...   Up (healthy)   2379/tcp, 2380/tcp
    milvus-minio        /usr/bin/docker-entrypoint ...   Up (healthy)   0.0.0.0:9000->9000/tcp,:::9000->9000/tcp, 0.0.0.0:9001->9001/tcp,:::9001->9001/tcp
    milvus-standalone   /tini -- milvus run standalone   Up (healthy)   0.0.0.0:19530->19530/tcp,:::19530->19530/tcp, 0.0.0.0:9091->9091/tcp,:::9091->9091/tcp
    ubuntu@ip-172-31-29-98:~$
    ubuntu@ip-172-31-29-98:~$ ls -ltrh /home/ubuntu/milvusvectordb/volumes/
    total 12K
    drwxr-xr-x 3 root root 4.0K Apr  4 20:21 etcd
    drwxr-xr-x 4 root root 4.0K Apr  4 20:21 minio
    drwxr-xr-x 5 root root 4.0K Apr  4 20:21 milvus
    ubuntu@ip-172-31-29-98:~$
  11. Pour valider la fonctionnalité de lecture et d'écriture de la base de données vectorielle et de ses données dans Amazon FSxN pour NetApp ONTAP, nous avons utilisé le kit de développement logiciel Python Milvus et un exemple de programme PyMilvus. Installez les paquets nécessaires à l'aide de 'apt-get install python3-numpy python3-pip' et installez PyMilvus à l'aide de 'pic3 install pymilvus'.

  12. Valider les opérations d'écriture et de lecture des données à partir d'Amazon FSxN pour NetApp ONTAP dans la base de données vectorielle.

    root@ip-172-31-29-98:~/pymilvus/examples# python3 prepare_data_netapp_new.py
    === start connecting to Milvus     ===
    === Milvus host: localhost         ===
    Does collection hello_milvus_ntapnew_sc exist in Milvus: True
    === Drop collection - hello_milvus_ntapnew_sc ===
    === Drop collection - hello_milvus_ntapnew_sc2 ===
    === Create collection `hello_milvus_ntapnew_sc` ===
    === Start inserting entities       ===
    Number of entities in hello_milvus_ntapnew_sc: 9000
    root@ip-172-31-29-98:~/pymilvus/examples# find /home/ubuntu/milvusvectordb/
    …
    <removed content to save page space >
    …
    /home/ubuntu/milvusvectordb/volumes/minio/a-bucket/files/insert_log/448789845791611912/448789845791611913/448789845791611939/103/448789845791411923/b3def25f-c117-4fba-8256-96cb7557cd6c
    /home/ubuntu/milvusvectordb/volumes/minio/a-bucket/files/insert_log/448789845791611912/448789845791611913/448789845791611939/103/448789845791411923/b3def25f-c117-4fba-8256-96cb7557cd6c/part.1
    /home/ubuntu/milvusvectordb/volumes/minio/a-bucket/files/insert_log/448789845791611912/448789845791611913/448789845791611939/103/448789845791411923/xl.meta
    /home/ubuntu/milvusvectordb/volumes/minio/a-bucket/files/insert_log/448789845791611912/448789845791611913/448789845791611939/0
    /home/ubuntu/milvusvectordb/volumes/minio/a-bucket/files/insert_log/448789845791611912/448789845791611913/448789845791611939/0/448789845791411924
    /home/ubuntu/milvusvectordb/volumes/minio/a-bucket/files/insert_log/448789845791611912/448789845791611913/448789845791611939/0/448789845791411924/xl.meta
    /home/ubuntu/milvusvectordb/volumes/minio/a-bucket/files/insert_log/448789845791611912/448789845791611913/448789845791611939/1
    /home/ubuntu/milvusvectordb/volumes/minio/a-bucket/files/insert_log/448789845791611912/448789845791611913/448789845791611939/1/448789845791411925
    /home/ubuntu/milvusvectordb/volumes/minio/a-bucket/files/insert_log/448789845791611912/448789845791611913/448789845791611939/1/448789845791411925/xl.meta
    /home/ubuntu/milvusvectordb/volumes/minio/a-bucket/files/insert_log/448789845791611912/448789845791611913/448789845791611939/100
    /home/ubuntu/milvusvectordb/volumes/minio/a-bucket/files/insert_log/448789845791611912/448789845791611913/448789845791611939/100/448789845791411920
    /home/ubuntu/milvusvectordb/volumes/minio/a-bucket/files/insert_log/448789845791611912/448789845791611913/448789845791611939/100/448789845791411920/xl.meta
  13. Vérifiez l'opération de lecture à l'aide du script verify_data_netapp.py.

    root@ip-172-31-29-98:~/pymilvus/examples# python3 verify_data_netapp.py
    === start connecting to Milvus     ===
    
    === Milvus host: localhost         ===
    
    Does collection hello_milvus_ntapnew_sc exist in Milvus: True
    {'auto_id': False, 'description': 'hello_milvus_ntapnew_sc', 'fields': [{'name': 'pk', 'description': '', 'type': <DataType.INT64: 5>, 'is_primary': True, 'auto_id': False}, {'name': 'random', 'description': '', 'type': <DataType.DOUBLE: 11>}, {'name': 'var', 'description': '', 'type': <DataType.VARCHAR: 21>, 'params': {'max_length': 65535}}, {'name': 'embeddings', 'description': '', 'type': <DataType.FLOAT_VECTOR: 101>, 'params': {'dim': 8}}], 'enable_dynamic_field': False}
    Number of entities in Milvus: hello_milvus_ntapnew_sc : 9000
    
    === Start Creating index IVF_FLAT  ===
    
    
    === Start loading                  ===
    
    
    === Start searching based on vector similarity ===
    
    hit: id: 2248, distance: 0.0, entity: {'random': 0.2777646777746381}, random field: 0.2777646777746381
    hit: id: 4837, distance: 0.07805602252483368, entity: {'random': 0.6451650959930306}, random field: 0.6451650959930306
    hit: id: 7172, distance: 0.07954417169094086, entity: {'random': 0.6141351712303128}, random field: 0.6141351712303128
    hit: id: 2249, distance: 0.0, entity: {'random': 0.7434908973629817}, random field: 0.7434908973629817
    hit: id: 830, distance: 0.05628090724349022, entity: {'random': 0.8544487225667627}, random field: 0.8544487225667627
    hit: id: 8562, distance: 0.07971227169036865, entity: {'random': 0.4464554280115878}, random field: 0.4464554280115878
    search latency = 0.1266s
    
    === Start querying with `random > 0.5` ===
    
    query result:
    -{'random': 0.6378742006852851, 'embeddings': [0.3017092, 0.74452263, 0.8009826, 0.4927033, 0.12762444, 0.29869467, 0.52859956, 0.23734547], 'pk': 0}
    search latency = 0.3294s
    
    === Start hybrid searching with `random > 0.5` ===
    
    hit: id: 4837, distance: 0.07805602252483368, entity: {'random': 0.6451650959930306}, random field: 0.6451650959930306
    hit: id: 7172, distance: 0.07954417169094086, entity: {'random': 0.6141351712303128}, random field: 0.6141351712303128
    hit: id: 515, distance: 0.09590047597885132, entity: {'random': 0.8013175797590888}, random field: 0.8013175797590888
    hit: id: 2249, distance: 0.0, entity: {'random': 0.7434908973629817}, random field: 0.7434908973629817
    hit: id: 830, distance: 0.05628090724349022, entity: {'random': 0.8544487225667627}, random field: 0.8544487225667627
    hit: id: 1627, distance: 0.08096684515476227, entity: {'random': 0.9302397069516164}, random field: 0.9302397069516164
    search latency = 0.2674s
    Does collection hello_milvus_ntapnew_sc2 exist in Milvus: True
    {'auto_id': True, 'description': 'hello_milvus_ntapnew_sc2', 'fields': [{'name': 'pk', 'description': '', 'type': <DataType.INT64: 5>, 'is_primary': True, 'auto_id': True}, {'name': 'random', 'description': '', 'type': <DataType.DOUBLE: 11>}, {'name': 'var', 'description': '', 'type': <DataType.VARCHAR: 21>, 'params': {'max_length': 65535}}, {'name': 'embeddings', 'description': '', 'type': <DataType.FLOAT_VECTOR: 101>, 'params': {'dim': 8}}], 'enable_dynamic_field': False}
  14. Si le client souhaite accéder (en lecture) aux données NFS testées dans la base de données vectorielle via le protocole S3 pour les workloads d'IA, cela peut être validé à l'aide d'un programme Python simple. Un exemple de ceci pourrait être une recherche de similarité d'images d'une autre application comme mentionné dans l'image qui se trouve au début de cette section.

    root@ip-172-31-29-98:~/pymilvus/examples# sudo python3 /home/ubuntu/milvusvectordb/s3_access.py -i 172.31.255.228 --bucket milvusnasvol --access-key PY6UF318996I86NBYNDD --secret-key hoPctr9aD88c1j0SkIYZ2uPa03vlbqKA0c5feK6F
    OBJECTS in the bucket milvusnasvol are :
    ***************************************
    …
    <output content removed to save page space>
    …
    bucket/files/insert_log/448789845791611912/448789845791611913/448789845791611920/0/448789845791411917/xl.meta
    volumes/minio/a-bucket/files/insert_log/448789845791611912/448789845791611913/448789845791611920/1/448789845791411918/xl.meta
    volumes/minio/a-bucket/files/insert_log/448789845791611912/448789845791611913/448789845791611920/100/448789845791411913/xl.meta
    volumes/minio/a-bucket/files/insert_log/448789845791611912/448789845791611913/448789845791611920/101/448789845791411914/xl.meta
    volumes/minio/a-bucket/files/insert_log/448789845791611912/448789845791611913/448789845791611920/102/448789845791411915/xl.meta
    volumes/minio/a-bucket/files/insert_log/448789845791611912/448789845791611913/448789845791611920/103/448789845791411916/1c48ab6e-1546-4503-9084-28c629216c33/part.1
    volumes/minio/a-bucket/files/insert_log/448789845791611912/448789845791611913/448789845791611920/103/448789845791411916/xl.meta
    volumes/minio/a-bucket/files/insert_log/448789845791611912/448789845791611913/448789845791611939/0/448789845791411924/xl.meta
    volumes/minio/a-bucket/files/insert_log/448789845791611912/448789845791611913/448789845791611939/1/448789845791411925/xl.meta
    volumes/minio/a-bucket/files/insert_log/448789845791611912/448789845791611913/448789845791611939/100/448789845791411920/xl.meta
    volumes/minio/a-bucket/files/insert_log/448789845791611912/448789845791611913/448789845791611939/101/448789845791411921/xl.meta
    volumes/minio/a-bucket/files/insert_log/448789845791611912/448789845791611913/448789845791611939/102/448789845791411922/xl.meta
    volumes/minio/a-bucket/files/insert_log/448789845791611912/448789845791611913/448789845791611939/103/448789845791411923/b3def25f-c117-4fba-8256-96cb7557cd6c/part.1
    volumes/minio/a-bucket/files/insert_log/448789845791611912/448789845791611913/448789845791611939/103/448789845791411923/xl.meta
    volumes/minio/a-bucket/files/stats_log/448789845791211880/448789845791211881/448789845791411889/100/1/xl.meta
    volumes/minio/a-bucket/files/stats_log/448789845791211880/448789845791211881/448789845791411889/100/448789845791411912/xl.meta
    volumes/minio/a-bucket/files/stats_log/448789845791611912/448789845791611913/448789845791611920/100/1/xl.meta
    volumes/minio/a-bucket/files/stats_log/448789845791611912/448789845791611913/448789845791611920/100/448789845791411919/xl.meta
    volumes/minio/a-bucket/files/stats_log/448789845791611912/448789845791611913/448789845791611939/100/1/xl.meta
    volumes/minio/a-bucket/files/stats_log/448789845791611912/448789845791611913/448789845791611939/100/448789845791411926/xl.meta
    ***************************************
    root@ip-172-31-29-98:~/pymilvus/examples#

    Cette section explique de manière efficace comment les clients peuvent déployer et exploiter une configuration Milvus autonome dans des conteneurs Docker en utilisant NetApp FSxN pour le stockage de données NetApp ONTAP d'Amazon. Cette configuration permet aux clients d'exploiter la puissance des bases de données vectorielles pour gérer les données de grande envergure et exécuter des requêtes complexes, le tout dans l'environnement évolutif et efficace de conteneurs Docker. En créant une instance Amazon FSxN pour NetApp ONTAP et en faisant correspondre l'instance EC2, les clients peuvent assurer une utilisation optimale des ressources et une gestion optimale des données. La validation réussie des opérations d'écriture et de lecture de données de FSxN dans la base de données vectorielle offre aux clients la garantie d'opérations de données fiables et cohérentes. En outre, la possibilité de lister (lire) des données de workloads d'IA via le protocole S3 permet d'améliorer l'accessibilité des données. Ce processus complet offre donc aux clients une solution robuste et efficace pour la gestion de leurs opérations de données à grande échelle, exploitant les fonctionnalités de FSxN pour NetApp ONTAP d'Amazon.