下载吧 其他软件

分类分类

Milvus(矢量数据库)

Milvus(矢量数据库)

v1.1.0 官方版

大小:6.0 MB 更新:2024/06/07

类别:其他软件系统:WinAll

立即下载

  Milvus是一个绿色安全、免费开源的矢量数据库,支持针对TB级向量的增删改操作和近实时查询,可让用户对数据库内的所有数据进行搜索和浏览编辑,该软件拥有类似于智能的向量搜索引擎,可让用户对相似性数据进行搜索,可让用户更快更便捷的获取非结构化数据;Milvus部署灵活、稳定可靠,且具备操作便捷以及高速查询等特性,在全球范围内已被数百家组织和机构所使用,该软件支持标量数据过滤,可让用户更快速精准地获取指定数据,非常简单实用,有需要的用户可以自行下载。

Milvus(矢量数据库)

软件功能

  异构计算

  优化了基于 GPU 搜索向量和建立索引的性能。

  可以在单台通用服务器上完成对 TB 级数据的毫秒级搜索。

  动态数据管理。

  支持主流索引库、距离计算方式和监控工具

  集成了 Faiss、NMSLIB、Annoy 等向量索引库。

  支持基于量化的索引、基于图的索引和基于树的索引。

  相似度计算方式包括欧氏距离 (L2)、内积 (IP)、汉明距离、杰卡德距离等。

  Prometheus 作为监控和性能指标存储方案,Grafana 作为可视化组件进行数据展示。

  近实时搜索

  插入 Milvus 的数据默认在 1 秒后即可被搜索到。

  标量字段过滤

  支持向量和标量数据。

  可以对标量数据进行过滤,增强搜索的灵活性。

软件特色

  全面的相似度指标

  Milvus 支持各种常用的相似度计算指标,包括欧氏距离、内积、汉明距离和杰卡德距离等。您可以根据应用需求来选择最有效的向量相似度计算方式。

  业界领先的性能

  Milvus 基于高度优化的 Approximate Nearest Neighbor Search (ANNS) 索引库构建,包括 faiss、 annoy、和 hnswlib 等。您可以针对不同使用场景选择不同的索引类型。

  动态数据管理

  您可以随时对数据进行插入、删除、搜索、更新等操作而无需受到静态数据带来的困扰。

  近实时搜索

  在插入或更新数据之后,您可以几乎立刻对插入或更新过的数据进行搜索。Milvus 负责保证搜索结果的准确率和数据一致性。

  高成本效益

  Milvus 充分利用现代处理器的并行计算能力,可以在单台通用服务器上完成对十亿级数据的毫秒级搜索。

  支持多种数据类型和高级搜索

  Milvus 的数据记录中的字段支持多种数据类型。您还可以对一个或多个字段使用高级搜索,例如过滤、排序和聚合。

  高扩展性和可靠性

  您可以在分布式环境中部署 Milvus。如果要对集群扩容或者增加可靠性,您只需增加节点。

  云原生

  您可以轻松在公有云、私有云、或混合云上运行 Milvus。

  简单易用

  Milvus 提供了易用的 Python、Java、Go 和 C++ SDK,另外还提供了 RESTful API。

官方教程

  确认Docker状态确认Docker守护程序在后台运行:

  $ sudo docker info

  Copy

  如果看不到列出的服务器,请启动Docker守护程序。

  在Linux上,Docker需要sudo特权。要在没有sudo特权的情况下运行Docker命令,请创建一个docker组并添加您的用户(有关详细信息,请参阅Linux的安装后步骤)。

  拉Docker镜像拉出仅CPU的映像:

  $ sudo docker pull milvusdb/milvus:1.1.0-cpu-d050721-5e559c

  如果由于网络限制而无法使用主机在线获取Docker映像和配置文件,请从另一台可用主机在线获取它们,将它们另存为TAR文件,将其传递到本地计算机上,然后将TAR文件加载为Docker映像:

  单击此处查看示例代码。

  如果拉docker镜像的速度太慢或失败,请参阅操作常见问题解答以获取解决方案。

  下载配置文件

Milvus(矢量数据库)

  如果无法通过wget命令下载配置文件,则可以在/ home / $ USER / milvus / conf下创建server_config.yaml文件,然后将内容从服务器配置复制到该文件。

  启动Docker容器启动Docker容器并将映射到本地文件的路径映射到该容器:

Milvus(矢量数据库)

  docker run上面命令中使用的选项定义如下:

  -d:在后台运行容器并打印容器ID。

  --name:为容器分配一个名称。

  -p:将容器的端口发布到主机。

  -v:将目录安装到容器中。

  确认Milvus的运行状态:

  $ sudo docker ps

  如果Milvus服务器无法正常启动,请检查错误日志:

  $ sudo docker logs milvus_cpu_1.1.0成功启动Milvus服务器后,可以使用此示例程序创建表,插入10个向量,然后运行向量相似度搜索。确保已安装Python 3.6和兼容的pip。安装Milvus Python SDK。# Install Milvus Python SDK

  $ pip3 install pymilvus==1.1.0

  Copy要了解有关Milvus Python SDK的更多信息,请访问Milvus Python SDK自述文件。下载Python示例代码。# Download Python example

  $ wget https://raw.githubusercontent.com/milvus-io/pymilvus/v1.1.0/examples/example.py

  Copy如果您不能wget用来下载示例代码,则还可以创建example.py并复制示例代码。运行示例代码。# Run Milvus Python example

  $ python3 example.py

  Copy确认程序运行正常。Query result is correct.

  Copy恭喜你!您已成功完成与Milvus的首次矢量相似度搜索。连接到服务器本文介绍如何从Python客户端连接到Milvus服务器。有关API的详细信息,请参见Python API文档。我们建议使用Milvus大小调整工具来估计数据所需的硬件资源。导入pymilvus:# Import pymilvus.

  >>> from milvus import Milvus, IndexType, MetricType, Status

  Copy使用以下任何一种方法连接到Milvus服务器:# Connect to the Milvus server.

  >>> milvus = Milvus(host='localhost', port='19530')

  Copy在上面的代码,host并且port都使用的默认值。您可以将它们更改为您的IP地址和端口。>>> milvus = Milvus(uri='tcp://localhost:19530')创建一个集合准备创建集合所需的参数:# Prepare collection parameters.

  >>> param = {'collection_name':'test01', 'dimension':256, 'index_file_size':1024, 'metric_type':MetricType.L2}

  Copy创建一个名为的集合test01,其大小为256,索引文件大小为1024 MB。它使用欧几里德距离(L2)作为距离测量方法。# Create a collection.

  >>> milvus.create_collection(param)

  Copy删除收藏集# Drop a collection.

  >>> milvus.drop_collection(collection_name='test01')创建分区为了提高搜索效率,您可以按标签将集合划分为几个分区。实际上,每个分区都是一个集合。# Create a partition.

  >>> milvus.create_partition('test01', 'tag01')

  Copy删除分区>>> milvus.drop_partition(collection_name='test01', partition_tag='tag01')将向量插入集合随机生成20个256维向量:>>> import random

  # Generate 20 vectors of 256 dimensions.

  >>> vectors = [[random.random() for _ in range(256)] for _ in range(20)]

  Copy插入向量列表。如果您未指定矢量ID,则Milvus会自动将ID分配给矢量。# Insert vectors.

  >>> milvus.insert(collection_name='test01', records=vectors)

  Copy您还可以指定矢量ID:>>> vector_ids = [id for id in range(20)]

  >>> milvus.insert(collection_name='test01', records=vectors, ids=vector_ids)

  Copy将向量插入分区>>> milvus.insert('test01', vectors, partition_tag="tag01")

  Copy通过ID删除载体假设您的集合包含以下向量ID:>>> ids = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

  Copy您可以使用以下命令删除向量:>>> milvus.delete_entity_by_id(collection_name='test01', id_array=ids)

  Copy调用之后delete,您可以flush再次调用以确保新插入的数据可见,并且删除的数据不再可恢复。创建一个索引当前,集合仅支持一种索引类型。当您更改集合的索引类型时,Milvus会自动删除旧的索引文件。在创建其他索引之前,集合使用FLAT作为默认索引类型。create_index()指定集合的索引类型,并为先前插入的数据同步创建索引。当随后插入的数据的大小达到时index_file_size,Milvus会在后台自动创建索引。对于流数据,建议在插入向量之前创建索引,以便系统可以自动为下一个数据建立索引。对于静态数据,建议先导入所有数据,然后创建索引。有关使用索引的详细信息,请参见“索引示例程序”。准备创建索引所需的参数(以IVF_FLAT为例)。索引参数存储在JSON字符串中,该字符串由Python SDK中的字典表示。# Prepare index param.

  >>> ivf_param = {'nlist': 16384}

  Copy不同的索引类型需要不同的索引参数。他们必须都有一个值。为集合创建索引:# Create an index.

  >>> milvus.create_index('test01', IndexType.IVF_FLAT, ivf_param)

  Copy删除索引删除索引后,集合将再次使用默认索引类型FLAT。>>> milvus.drop_index('test01')进行矢量搜索Milvus支持在集合或分区中搜索向量。在集合中搜索向量创建搜索参数。搜索参数存储在JSON字符串中,该字符串由Python SDK中的字典表示。>>> search_param = {'nprobe': 16}

  Copy不同的索引类型需要不同的搜索参数。您必须为所有搜索参数分配值。有关更多信息,请参见向量索引。创建随机向量以query_records进行搜索:# Create 5 vectors of 256 dimensions.

  >>> q_records = [[random.random() for _ in range(256)] for _ in range(5)]

  >>> milvus.search(collection_name='test01', query_records=q_records, top_k=2, params=search_param)

  Copytop_k表示搜索与目标向量最相似的k个向量。它是在搜索过程中定义的。的范围top_k是[1,16384]。在分区中搜索向量# Create 5 vectors of 256 dimensions.

  >>> q_records = [[random.random() for _ in range(256)] for _ in range(5)]

  >>> milvus.search(collection_name='test01', query_records=q_records, top_k=1, partition_tags=['tag01'], params=search_param)

  Copy如果未指定partition_tags,Milvus将在整个集合中搜索相似的向量。

常见问题

  为什么Milvus重新启动后第一次搜索要花很长时间?

  这是因为重新启动后,Milvus需要将磁盘中的数据加载到内存中以进行第一个矢量搜索。您可以preload_collection在server_config.yaml中进行设置,并在内存允许的情况下加载尽可能多的集合。Milvus每次重新启动时都会将集合加载到内存中。否则,您可以调用load_collection()将集合加载到内存中。

  为什么搜索速度很慢?

  检查的值cache.cache_size在server_config.yaml比集合的大小。

  如何改善Milvus的表现?

  确保值cache.cache_size在server_config.yaml比集合的大小。

  确保所有段均已建立索引。

  检查服务器上是否还有其他消耗CPU资源的进程。

  调整的数值index_file_size和nlist。

  如果搜索性能不稳定,则可以-e OMP_NUM_THREADS=NUM在启动Milvus时添加NUM,该数量是CPU内核数的2/3。

  如何设置nlist和nprobe试管婴儿索引?

  一般而言,的推荐值nlist是4 × sqrt(n),其中n是段中实体的总数。

  确定nprobe是在搜索性能和准确性之间进行权衡的依据,它取决于您的数据集和方案。建议运行几轮测试以确定的值nprobe。

  以下图表来自在sift50m数据集和IVF_SQ8索引上运行的测试。测试比较了搜索性能与不同之间的召回率nlist/nprobe对。

更新日志

  新的功能#4564支持在get_entity_by_id()方法调用中指定分区。

  #4806支持在delete_entity_by_id()方法调用中指定分区。

  #4905添加release_collection()方法,该方法从缓存中卸载特定的集合。

  改进之处#4756提高get_entity_by_id()方法调用的性能。

  #4856将hnswlib升级到v0.5.0。

  #4958提高IVF指数训练的性能。

  已解决的问题#4778无法访问Mishards中的向量索引。

  #4797在合并具有不同topK参数的搜索请求后,系统返回错误结果。

  #4838服务器没有立即对空集合上的索引建立请求做出响应。

  #4858对于启用GPU的Milvus,系统在搜索请求数量较大topK(> 2048)时崩溃。

  #4862只读节点在启动过程中会合并段。

  #4894布隆过滤器的容量不等于其所属网段的行数。

  #4908删除集合后,无法清理GPU缓存。

  #4933系统花很长时间才能为一小段建立索引。

  #4952无法将时区设置为“ UTC + 5:30”。

  #5008在连续,并发删除,插入和搜索操作期间,系统随机崩溃。

  #5010对于启用GPU的Milvus,如果nbits≠8 ,查询将无法在IVF_PQ上执行。

  #5050 get_collection_stats()为仍在建立索引过程中的段返回错误的索引类型。

  #5063清空空段时,系统崩溃。

  #5078对于启用GPU的Milvus,在2048、4096或8192维的向量上创建IVF索引时,系统崩溃。

相关文章
  • 最新排行
  • 最热排行
  • 评分最高
其他软件排行榜

点击查看更多

点击查看更多

点击查看更多