Milvus mit Amazon FSX ONTAP für NetApp ONTAP - Datei und Objekt Dualität
In diesem Abschnitt wird die Einrichtung des milvus-Clusters mit Amazon FSX ONTAP für die Vektordatenbanklösung für NetApp erläutert.
Milvus mit Amazon FSX ONTAP für NetApp ONTAP – Datei- und Objektdualität
In diesem Abschnitt, Warum wir Vektordatenbank in der Cloud bereitstellen müssen, sowie Schritte zur Bereitstellung von Vektordatenbank ( milvus Standalone) in Amazon FSX ONTAP für NetApp ONTAP in Docker Containern.
Die Bereitstellung einer Vektordatenbank in der Cloud bietet einige signifikante Vorteile, insbesondere für Anwendungen, die die Verarbeitung von hochdimensionalen Daten und die Ausführung von Ähnlichkeitssuchen erfordern. Erstens bietet die Cloud-basierte Implementierung Skalierbarkeit, die eine einfache Anpassung der Ressourcen an die wachsenden Datenmengen und die Abfragelasten ermöglicht. Auf diese Weise wird sichergestellt, dass die Datenbank den gestiegenen Bedarf effizient bewältigen kann und gleichzeitig eine hohe Performance erhält. Zweitens bietet Cloud-Bereitstellung Hochverfügbarkeit und Disaster Recovery, da Daten an verschiedenen geografischen Standorten repliziert werden können, um das Risiko von Datenverlusten zu minimieren und einen kontinuierlichen Service auch bei unerwarteten Ereignissen sicherzustellen. Drittens bietet sie Kosteneffizienz, da Sie nur für die tatsächlich genutzten Ressourcen zahlen und je nach Bedarf vertikal skalieren können. Dadurch vermeiden Sie erhebliche Vorabinvestitionen in Hardware. Schließlich kann die Bereitstellung einer Vektordatenbank in der Cloud die Zusammenarbeit verbessern, da Daten von überall aus abgerufen und freigegeben werden können. Dies erleichtert Team-basiertes Arbeiten und datengestützte Entscheidungsfindung. Bitte überprüfen Sie die Architektur der milvus Standalone mit Amazon FSX ONTAP für NetApp ONTAP, die in dieser Validierung verwendet wird.
-
Erstellen Sie eine Amazon FSX ONTAP for NetApp ONTAP Instanz und notieren Sie sich die Details der VPC, der VPC-Sicherheitsgruppen und des Subnetzes. Diese Informationen sind erforderlich, wenn eine EC2-Instanz erstellt wird. Weitere Details finden Sie hier - https://us-east-1.console.aws.amazon.com/fsx/home?region=us-east-1#file-system-create
-
EC2-Instanz erstellen und sicherstellen, dass VPC, Sicherheitsgruppen und Subnetz mit den Amazon FSX ONTAP für NetApp ONTAP-Instanzen übereinstimmen.
-
Installieren Sie nfs-common mit dem Befehl 'apt-get install nfs-common' und aktualisieren Sie die Paketinformationen mit 'udo apt-get Update'.
-
Erstellen Sie einen Mount-Ordner und mounten Sie den Amazon FSX ONTAP für NetApp ONTAP darauf.
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:~$
-
Installieren Sie Docker und Docker Compose mit apt-get install.
-
Richten Sie einen Milvus-Cluster basierend auf der Datei Docker-compose.yaml ein, die von der Milvus-Website heruntergeladen werden kann.
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>
-
Ordnen Sie im Abschnitt „Volumes“ der Datei Docker-compose.yml den NetApp-NFS-Bereitstellungspunkt dem entsprechenden Milvus-Containerpfad zu, insbesondere in etcd, minio und Standalone.Check "Anhang D: docker-compose.yml" Für Details über Änderungen in yml
-
Überprüfen Sie die gemounteten Ordner und Dateien.
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:~$
-
Führen Sie 'docker-compose up -d' aus dem Verzeichnis aus, das die Datei docker-compose.yml enthält.
-
Überprüfen Sie den Status des Milvus Containers.
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:~$
-
Um die Lese- und Schreibfunktionalität der Vektordatenbank und ihrer Daten in Amazon FSX ONTAP for NetApp ONTAP zu validieren, haben wir das Python Milvus SDK und ein Beispielprogramm von PyMilvus verwendet. Installieren Sie die benötigten Pakete mit 'apt-get install python3-numpy python3-Pip' und installieren Sie PyMilvus mit 'pip3 install pymilvus'.
-
Validieren der Schreib- und Lesevorgänge von Amazon FSX ONTAP für NetApp ONTAP in der Vektordatenbank
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
-
Überprüfen Sie den Lesevorgang mit dem Skript 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}
-
Wenn der Kunde auf NFS-Daten zugreifen möchte, die in der Vektordatenbank über das S3-Protokoll für KI-Workloads getestet wurden (lesen), kann dies mit einem einfachen Python-Programm validiert werden. Ein Beispiel hierfür könnte eine Ähnlichkeitssuche von Bildern aus einer anderen Anwendung sein, wie im Bild zu Beginn dieses Abschnitts erwähnt.
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#
Dieser Abschnitt zeigt effektiv, wie Kunden mithilfe von Amazon NetApp FSX ONTAP für NetApp ONTAP Storage eine eigenständige Milvus-Einrichtung in Docker Containern implementieren und betreiben können. Mit dieser Einrichtung können Kunden die Leistungsfähigkeit von Vektordatenbanken für die Verarbeitung von hochdimensionalen Daten und die Ausführung komplexer Abfragen nutzen – all dies in der skalierbaren und effizienten Umgebung von Docker Containern. Durch Erstellung einer Amazon FSX ONTAP for NetApp ONTAP Instanz und Anpassung der EC2-Instanz können Kunden für optimale Ressourcenauslastung und Datenmanagement sorgen. Die erfolgreiche Validierung von Datenschreibungs- und Lesevorgängen von FSX ONTAP in der Vektordatenbank bietet Kunden die Sicherheit zuverlässiger und konsistenter Datenoperationen. Darüber hinaus bietet die Möglichkeit, Daten aus KI-Workloads über das S3-Protokoll aufzulisten (zu lesen), eine verbesserte Datenverfügbarkeit. Dieser umfassende Prozess bietet Kunden daher eine robuste und effiziente Lösung für das Management ihrer umfangreichen Datenabläufe und nutzt dabei die Funktionen von Amazon FSX ONTAP for NetApp ONTAP.