暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

使用嵌入式Milvus在Python中立即安装和运行Milvus

原创 eternity 2022-08-22
3868

Milvus是一个面向人工智能应用的开源矢量数据库。它提供了多种安装方法,包括从源代码构建和使用Docker Compose/Helm/APT/YUM/Ansible安装Milvus。用户可以根据其操作系统和首选项选择其中一种安装方法。然而,在Milvus社区中,有许多数据科学家和人工智能工程师使用Python,他们渴望一种比当前可用的安装方法简单得多的安装方法。

因此,我们发布了用户友好的Python版本embedded Milvus,以及Milvus 2.1,以增强社区中更多Python开发人员的能力。本文介绍了什么是嵌入式Milvus,并提供了如何安装和使用它的说明。

嵌入式Milvus概述

嵌入式Milvus使您能够在Python中快速安装和使用Milvus。它可以快速启动Milvus实例,并允许您随时启动和停止Milvus服务。即使您停止嵌入Milvus,所有数据和日志都会持久化。

嵌入式Milvus本身没有任何内部依赖关系,也不需要预先安装和运行任何第三方依赖关系,如etcd、MinIO、Pulsar等。

使用嵌入式Milvus所做的一切以及为其编写的每一段代码都可以安全地迁移到其他Milvus模式-独立、集群、云版本等。这反映了嵌入式Milvus最独特的功能之一:"Write once, run anywhere."

何时使用嵌入式Milvus?

嵌入式MILVU和PyMILVU的构建目的不同。您可以考虑在以下情况下选择嵌入式MILVU:

  • 您希望使用Milvus,而无需以此处提供的任何方式安装Milvus。

  • 您希望使用Milvus而不在计算机中保留长时间运行的Milvus进程。

  • 您希望快速使用Milvus,而无需启动单独的Milvus进程和其他所需组件,如etcd、MinIO、Pulsar等。

建议您不要使用嵌入式MILVU:

  • 在生产环境中。(要将Milvus用于生产,请考虑Milvus群集或Zilliz云,这是一种完全管理的Milvus服务。)

  • 如果您对性能有很高的要求。(相对而言,嵌入式MILVU可能不会提供最佳性能。)

Milvus不同模式的比较

下表比较了Milvus的几种模式:独立、集群、嵌入式Milvus和Zilliz云,这是一种完全管理的Milvus服务。
image.png
image.png
image.png

如何安装嵌入式Milvus?

在安装嵌入式Milvus之前,您需要首先确保已安装Python 3.6或更高版本。嵌入式Milvus支持以下操作系统:

  • Ubuntu 18.04

  • Mac x86_64>=10.4

  • Mac M1>=11.0

如果满足这些要求,您可以运行$python3-m pip install milvus来安装嵌入式milvus。您还可以在命令中添加版本以安装特定版本的嵌入式Milvus。例如,如果您想安装2.1.0版本,请运行$python3-m pip install-milvus==2.1.0。之后,当新版本的嵌入式milvus发布时,您还可以运行$pyth3-m pip install–upgrade milvus将嵌入式milvu升级到最新版本。

如果您是Milvus的老用户,以前已经安装过PyMilvus,并且希望安装嵌入式Milvus,那么可以运行$python3-m pip install–no-deps-Milvus。

运行安装命令后,需要通过运行以下命令在/var/bin/e-Milvus下为嵌入式Milvus创建数据文件夹:

sudo mkdir -p /var/bin/e-milvus
sudo chmod -R 777 /var/bin/e-milvus

启动和停止嵌入式Milvus

安装成功后,您可以启动服务。

如果您是第一次运行嵌入式Milvus,则需要导入Milvus并首先设置嵌入式MILVU。

$ python3
Python 3.9.10 (main, Jan 15 2022, 11:40:53)
[Clang 13.0.0 (clang-1300.0.29.3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import milvus
>>> milvus.before()
please do the following if you have not already done so:
1. install required dependencies: bash /var/bin/e-milvus/lib/install_deps.sh
2. export LD_PRELOAD=/SOME_PATH/embd-milvus.so
3. export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib:/usr/local/lib:/var/bin/e-milvus/lib/
>>>

如果您之前已成功启动嵌入式Milvus,然后回来重新启动,则可以直接运行Milvus。导入Milvus后启动()。如果您之前已成功启动嵌入式Milvus,然后回来重新启动,则可以直接运行Milvus。导入Milvus后启动()。

$ python3Python 3.9.10 (main, Jan 15 2022, 11:40:53)
[Clang 13.0.0 (clang-1300.0.29.3)] on darwinType "help", "copyright", "credits" or "license" for more information.
>>> import milvus
>>> milvus.start()
>>>

如果已成功启动嵌入式Milvus服务,您将看到以下输出。

---Milvus Proxy successfully initialized and ready to serve!---

服务启动后,您可以启动另一个终端窗口,并运行“Hello Milvus”的示例代码来使用嵌入式Milvus!

# Download hello_milvus script
$ wget https://raw.githubusercontent.com/milvus-io/pymilvus/v2.1.0/examples/hello_milvus.py
# Run Hello Milvus 

或者,您可以在运行milvus之后立即导入并运行PyMilvus脚本。在同一终端窗口中启动()。

$ python3
Python 3.9.10 (main, Jan 15 2022, 11:40:53)
[Clang 13.0.0 (clang-1300.0.29.3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import milvus
--- if you are running Milvus for the first time, type milvus.before() for pre-run instructions ---
--- otherwise, type milvus.start() ---
>>>
>>> milvus.start()
---Milvus Proxy successfully initialized and ready to serve!---
>>>
>>>
>>> import random
>>> from pymilvus import (
...     connections,
...     utility,
...     FieldSchema, CollectionSchema, DataType,
...     Collection,
... )
>>> connections.connect("default", host="localhost", port="19530")
>>> has = utility.has_collection("hello_milvus")
>>> fields = [
...     FieldSchema(name="pk", dtype=DataType.INT64, is_primary=True, auto_id=False),
...     FieldSchema(name="embeddings", dtype=DataType.FLOAT_VECTOR, dim=8)
... ]
>>> schema = CollectionSchema(fields, "hello_milvus is the simplest demo to introduce the APIs")
>>> hello_milvus = Collection("hello_milvus", schema, consistency_level="Strong")
>>> num_entities = 3000
>>> entities = [
...     [i for i in range(num_entities)], # provide the pk field because `auto_id` is set to False
...     [[random.random() for _ in range(8)] for _ in range(num_entities)],  # field embeddings
... ]
>>> insert_result = hello_milvus.insert(entities)
>>> index = {
...     "index_type": "IVF_FLAT",
...     "metric_type": "L2",
...     "params": {"nlist": 128},
... }
>>> hello_milvus.create_index("embeddings", index)
>>> hello_milvus.load()
>>> vectors_to_search = entities[-1][-2:]
>>> search_params = {
...     "metric_type": "l2",
...     "params": {"nprobe": 10},
... }
>>> result = hello_milvus.search(vectors_to_search, "embeddings", search_params, limit=3)
>>> for hits in result:
...     for hit in hits:
...         print(f"hit: {hit}")
...
hit: (distance: 0.0, id: 2998)
hit: (distance: 0.1088758111000061, id: 2345)
hit: (distance: 0.12012234330177307, id: 1172)
hit: (distance: 0.0, id: 2999)
hit: (distance: 0.0297045037150383, id: 2000)
hit: (distance: 0.16927233338356018, id: 560)
>>> utility.drop_collection("hello_milvus")
>>> 

当您完成使用嵌入式Milvus时,我们建议您优雅地停止它,并通过运行以下命令或按Ctrl-D清理环境变量。

>>> milvus.stop()
if you need to clean up the environment variables, run:
export LD_PRELOAD=
export LD_LIBRARY_PATH=
>>>
>>> exit()

原文标题:Using Embedded Milvus to Instantly Install and Run Milvus With Python
原文作者:Angela Ni
原文链接:https://dzone.com/articles/using-embedded-milvus-to-instantly-install-and-run

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论