使用 Milvus 构建图片搜索引擎

前戏 在当今数字化时代,图片数据呈爆炸式增长,如何从海量图片中快速准确地找到相似图片成为了一个重要问题。Milvus 作为一个高性能的向量数据库,为解决这一问题提供了强大的支持。本文将详细介绍如何使用 Milvus 构建一个图片搜索引擎,让你能够轻松地在图片海洋中找到“知音”。 Milvus 简介 Milvus 是专为处理海量向量数据而设计的数据库,它构建在 Faiss、HNSW、DiskANN、SCANN 等流行的向量搜索库之上,能够高效地在包含数百万、数十亿甚至数万亿向量的数据集上进行相似性搜索。Milvus 支持数据分片、流式数据摄取、动态 Schema、结合向量和标量数据的搜索等多种高级功能,采用共享存储架构,计算节点具有存储和计算分解及横向扩展能力,非常适合用于构建图片搜索引擎。 图片搜索引擎架构 https://github.com/milvus-io/bootcamp/blob/master/applications/image/reverse_image_search/README.md 上面的例子使用 towhee 通过 ResNet50 提取图像特征,并使用 Milvus 构建了一个可以执行反向图像搜索的系统。 Towhee 由四大模块构成:算子、流水线、数据处理 API 和执行引擎。 算子是基础组件,可为神经网络模型、数据处理方法或 Python 函数。流水线由多个算子组成,形成有向无环图,实现复杂功能如特征提取等。数据处理 API 提供多种数据转换接口,用于构建数据处理管道,处理非结构化数据。执行引擎负责流水线实例化、任务调度、资源管理及性能优化,有轻量级本地引擎和高性能的 Nvidia Triton 引擎。 系统架构如下: 数据源 https://drive.google.com/file/d/1n_370-5Stk4t0uDV1QqvYkcvyV8rbw0O/view?usp=sharing 环境准备 安装 Milvus 你可以选择在本地安装 Milvus Lite,也可以在 Docker 或 Kubernetes 上部署高性能的 Milvus 服务器。可以参考这篇文章。 服务部署 https://github.com/milvus-io/bootcamp/blob/master/applications/image/reverse_image_search/docker-compose.yaml 这个 docker-compose.yaml 文件是一个用于部署Milvus 和相关组件的配置文件。主要包括: etcd minio milvus-standalone mysql webserver webclient 我们可以把它缩减成这样: mysql webserver webclient 详见: https://github.com/zhu733756/cloud-database-tools/blob/master/milvus/img-search/docker/docker-compose.yaml 需要修改这几个参数: environment: MILVUS_HOST: '172.18.0.4' MILVUS_PORT: '30774' MYSQL_HOST: '172.16.238.11' 配置 Milvus 这个 CR 为 NodePort: ...

一月 13, 2025 · 2 分钟 · 394 字 · zhu733756

快速尝鲜! k8s部署向量数据库milvus实用指南

前戏 过去两年 AI 大火, 向量数据库 milvus 赋能 RAG 向量搜索加速, 这玩意怎么在 k8s 上部署? milvus Milvus 构建在 Faiss、HNSW、DiskANN、SCANN 等流行的向量搜索库之上, 专为在包含数百万、数十亿甚至数万亿向量的密集向量数据集上进行相似性搜索而设计。 支持数据分片、流式数据摄取、动态Schema、结合向量和标量数据的搜索、多向量和混合搜索、稀疏向量和其他许多高级功能。 采用共享存储架构, 其计算节点具有存储和计算分解及横向扩展能力。 官方建议使用 Kubernetes 部署 Milvus。 创建集群 本文使用 kind 来部署 k8s 集群。 下载 kind 和 helm 此处省略细节, 具体可参考前文。 一行命令, 创建一个集群 准备配置文件: kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 nodes: - role: control-plane extraPortMappings: - containerPort: 31000 # 将主机 31000 端口映射到容器的 31000 端口 hostPort: 31000 listenAddress: '0.0.0.0' # Optional, defaults to "0.0.0.0" protocol: tcp # Optional, defaults to tcp - role: worker - role: worker - role: worker kubeadmConfigPatches: - | apiVersion: kubeadm.k8s.io/v1beta3 kind: ClusterConfiguration metadata: name: config networking: serviceSubnet: 10.0.0.0/16 imageRepository: registry.aliyuncs.com/google_containers nodeRegistration: kubeletExtraArgs: pod-infra-container-image: registry.aliyuncs.com/google_containers/pause:3.1 - | apiVersion: kubeadm.k8s.io/v1beta3 kind: InitConfiguration metadata: name: config networking: serviceSubnet: 10.0.0.0/16 imageRepository: registry.aliyuncs.com/google_containers 用以上配置文件, 执行集群创建命令, 可以得到一个 4 节点的集群: ...

一月 6, 2025 · 6 分钟 · 1206 字 · zhu733756