【Milvus的安装和使用】

Milvus是一个用于处理非结构化数据,如图像和音频,的向量数据库,特别适合进行向量相似性搜索。本文介绍了Milvus的安装、工作流程和Python接口的使用。通过DockerCompose安装Milvus,创建和管理集合,提取图像特征并存储为embeddingvectors,然后进行向量搜索。此外,还展示了如何使用PyMilvus进行数据插入、索引创建和搜索操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

0. 介绍

milvus是一个用于存储、index索引和管理巨量由深度学习网络或者其他模型生成embedding vectors的工具。不同于常见的关系型数据库用来处理结构化数据,Milvus被设计用来处理由非结构化数据,如图像、音频等,生成的embedding vectors信息。embedding vector本质指的是float类型的数组,常通过深度学习网络提取非结构化数据的特征得到。其中Milvus最主要的功能是vector similarity search,即向量相似性搜索,常见的评价指标有欧式距离等,平台采用ANN搜索算法来加速搜索过程。

使用Miluvs的常见场景如下:

  • 以图搜图
  • 人脸检索
  • 视频去重

即大部分非结构化数据的一对多搜索,都可以使用Milvus来完成。

1. Milvus安装

Milvus的官方文档中提供了详细的安装过程,具体可以参考官方文档链接。这里主要简述一下安装流程,主要参考如下页面内容。

 Milvus使用Docker Compose工具来启动和停止服务,过程如下:

  • 新建一个工作目录,下载YAML文件
wget https://github.com/milvus-io/milvus/releases/download/v2.1.4/milvus-standalone-docker-compose.yml -O docker-compose.yml
  • 启动Milvus容器
sudo docker-compose up -d

这个命令开始执行之后会自动下载Milvus对应的镜像文件,需要等待一段时间。 当镜像下载完成后,相应的容器也会启动,可以通过如下命令查看

sudo docker-compose ps

 可以看到除了milvus standalone服务之外还有两个依赖容器。

  • 停止Milvus容器
sudo docker-compose down

2. Milvus的工作流程

下面将以常见的以图搜图例子介绍Milvus的具体工作流程, 如下图(图像来自Milvus官方的examples)所示:

 整个流程分为两个阶段:

  • 构建图像向量库

 首先需要准备一个图像数据集(库),这个就是我们待检索数据库内容,将非结构化图像数据,通过深度学习算法,常见的就是图像分类算法,Resnet之类的,在图中官方使用towhee深度学习库来提取图像特征,然后会得到每张图像的特征向量,这个特征向量的维度是固定的,可能是1000、2048维之类的,最后将这个特征向量存储到Milvus数据库中。

  • 在以构建的向量库中执行搜索

当将所有的图像数据的特征向量都插入到Milvus中之后,此时就可以进行图像检索。检索具体就是输入一张待检索的图像,经过towhee得到图像对应的特征向量,然后将这个目标特征向量与Milvus中所有图像的特征向量进行相似度对比,然后TopK个距离最近的图像结果。

3. Milvus的初步使用

milvus支持不同变成语言接口来访问、操作数据库,具体支持如下图所示:

 3.1 安装PyMilvus库

在本文中,主要讲解如何使用PyMilvus来操作Milvus,首先需要安装该库,命令如下:

pip3 install protobuf==3.20.0
pip3 install grpcio-tools
pip install pymilvus

可以通过下面的命令判断是否安装成功

python3 -c "from pymilvus import Collection"

3.2 下载hello_milvus文件

下面将以官方文档的python例子进行讲解如何使用Milvus,详情可以参考链接

  • 在上述YAML文件的同级目录下,使用docker-compose ps -a命令,确保milvus容器处在开启状态
  • 下载hello_milvus.py文件
wget https://raw.githubusercontent.com/milvus-io/pymilvus/v2.1.3/examples/hello_milvus.py

3.3 解析hello_milvus文件内容

导入相关python库

from pymilvus import (
    connections,
    utility,
    FieldSchema,
    CollectionSchema,
    DataType,
    Collection,
)

连接Milvus服务

connections.connect("default", host="localhost", port="19530")

创建collection

Milvus的collection类似MySQL中的tabel,因此以MySQL中的表来类比Milvus的Collectio含义。

fields = [
    FieldSchema(name="pk", dtype=DataType.INT64, is_primary=True, auto_id=False),
    FieldSchema(name="random", dtype=DataType.DOUBLE),
    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)

上面代码是创建一个collection的过程,其中包含3个属性:pk、random和embedding,下图为MySQL的表与Milvus的collection的对比。 

 其中fields指的是包含哪些属性,属性需要指定数据类型,是否为主键之类的,不同之处在于embedding属性,该属性数据结构是数组,数组元素个数为8,在Milvus中用来保存vector embedding内容。

构建数据并插入到collection中

import random
entities = [
    [i for i in range(3000)],  # field pk
    [float(random.randrange(-20, -10)) for _ in range(3000)],  # field random
    [[random.random() for _ in range(8)] for _ in range(3000)],  # 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)
  • 向量之间相似度的评价公式

 索引的类型

 使用多少维数据来描述索引

将collection中的数据加载到内存中执行向量相似度检索

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, output_fields=["random"])

 普通搜索

result = hello_milvus.query(expr="random > -14", output_fields=["random", "embeddings"])

复合搜索 

result = hello_milvus.search(vectors_to_search, "embeddings", search_params, limit=3, expr="random > -12", output_fields=["random"])

 删除collection

utility.drop_collection("hello_milvus")

4. 总结

这篇文章主要介绍了Milvus是什么,有什么用,以及使用Milvus来进行非结构化数据检索的工作流程等等,后续将介绍如何运行Milvus提供的以图搜图例子。 

### Milvus 向量数据库的安装使用方法 #### 安装 Milvus Milvus 提供了多种安装方式,其中一种常见的方式是通过 Helm 在 Kubernetes 集群上部署 Milvus Operator 来完成安装[^2]。以下是具体的实现细节: 1. **设置 Kubernetes 环境** 确保已有一个可用的 Kubernetes 集群环境,并配置好 `kubectl` 工具。 2. **安装 Helm Milvus Operator** 使用 Helm Chart 安装 Milvus Operator,这可以极大地简化 Milvus 的管理扩展操作。运行以下命令来添加 Helm 仓库并安装 Milvus Operator: ```bash helm repo add milvus https://milvus.io/charts helm install my-release milvus/milvus-operator ``` 3. **验证安装状态** 执行以下命令以确认 Milvus 实例是否成功启动: ```bash kubectl get pods ``` #### 使用 Milvus 数据库 在掌握基本安装流程之后,可以通过 Python SDK 或其他支持的语言接口连接到 Milvus 并执行各种操作。具体步骤如下所示: 1. **创建集合 (Collection)** 创建一个新的集合用于存储向量数据。集合定义包括维度大小其他元信息。 ```python from pymilvus import CollectionSchema, FieldSchema, DataType, Collection fields = [ FieldSchema(name="id", dtype=DataType.INT64, is_primary=True), FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=128) ] schema = CollectionSchema(fields, "Example collection") collection = Collection("example_collection", schema) ``` 2. **插入数据** 将向量化后的数据批量插入到指定的集合中。 ```python data = [ [i for i in range(10)], # 主键字段 [[float(j) for j in range(128)] for _ in range(10)] # 嵌入向量字段 ] mr = collection.insert(data) ``` 3. **构建索引** 构建高效查询所需的索引来加速相似度计算。 ```python index_params = { "index_type": "IVF_FLAT", "params": {"nlist": 128}, "metric_type": "L2" } collection.create_index(field_name="embedding", index_params=index_params) ``` 4. **执行相似性搜索** 查询最接近给定嵌入向量的数据条目。 ```python search_params = { "data": [[random.random() for _ in range(128)]], "param": {"nprobe": 10}, "limit": 5, "expr": None } results = collection.search(**search_params) ``` 以上介绍了如何利用 Helm 进行 Milvus 的快速部署以及其核心 API 的实际运用案例[^1]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值