打造AI应用基础设施:Milvus向量数据库部署与运维

目录

  • 打造AI应用基础设施:Milvus向量数据库部署与运维
    • 1. Milvus介绍
      • 1.1 什么是向量数据库?
      • 1.2 Milvus主要特点
    • 2. Milvus部署方案对比
      • 2.1 Milvus Lite
      • 2.2 Milvus Standalone
      • 2.3 Milvus Distributed
      • 2.4 部署方案对比表
    • 3. Milvus部署操作命令实战
      • 3.1 Milvus Lite部署
      • 3.2 Milvus Standalone Docker部署
      • 3.3 Milvus Distributed Kubernetes部署
        • 3.3.1 使用Helm安装Milvus Operator
        • 3.3.2 使用kubectl安装Milvus Operator
        • 3.3.3 部署Milvus集群
        • 3.3.4 检查Milvus集群状态
        • 3.3.5 端口转发以便本地访问
        • 3.3.6 卸载Milvus集群
    • 4. Milvus部署后的使用
      • 4.1 基本概念
        • 4.1.1 集合(Collection)
        • 4.1.2 模式(Schema)和字段(Fields)
        • 4.1.3 主键(Primary Key)和自动ID(AutoId)
      • 4.2 Python代码示例
      • 4.3 基本操作流程
      • 4.4 高级功能
    • 5. Milvus运维方案
      • 5.1 Prometheus监控
        • 5.1.1 部署Prometheus监控服务
        • 5.1.2 为Milvus启用ServiceMonitor
      • 5.2 可视化和管理工具
      • 5.3 备份和恢复
      • 5.4 集群扩容
      • 5.5 升级Milvus版本
    • 6. 总结
    • 参考资料

打造AI应用基础设施:Milvus向量数据库部署与运维

1. Milvus介绍

Milvus是一款高性能、可扩展的开源向量数据库,专为管理和检索向量数据而设计。它支持从Jupyter Notebook本地演示到处理数十亿向量的大规模Kubernetes集群的各种规模用例。

1.1 什么是向量数据库?

向量数据库是专门设计用于存储、管理和检索向量嵌入(embeddings)的数据库系统。在AI和机器学习领域,向量嵌入是将文本、图像、音频等转换为数值向量的过程,这些向量可以用于相似性搜索。Milvus可以高效地执行相似性搜索操作,是AI应用(如语义搜索、推荐系统、图像识别等)的理想选择。

1.2 Milvus主要特点

  • 高性能:支持数十亿规模的向量管理和高效的相似性搜索
  • 可扩展:提供从轻量级到分布式集群的多种部署方案
  • 多模态支持:支持多种数据类型,包括稠密向量、稀疏向量、二进制向量等
  • 高级搜索能力:支持ANN搜索、元数据过滤、范围搜索、混合搜索等
  • 灵活部署:提供多种部署模式,适应不同规模和场景的需求
  • 开源生态:拥有丰富的工具和集成选项,如WebUI、备份工具等

2. Milvus部署方案对比

目前,Milvus提供了三种主要的部署选项:Milvus Lite、Milvus Standalone和Milvus Distributed。

2.1 Milvus Lite

Milvus Lite是一个Python库,可以直接导入到应用程序中。作为Milvus的轻量级版本,它非常适合在Jupyter Notebook中快速原型设计或在资源有限的智能设备上运行。

特点:

  • 轻量级,仅需通过pip安装
  • 适用于小型数据集(建议不超过几百万向量)
  • 简单易用,适合快速原型设计和学习
  • 与其他Milvus部署模式共享相同的API

适用场景:

  • 快速原型开发(RAG演示、AI聊天机器人、多模态搜索等)
  • Jupyter Notebook或Google Colab环境
  • 边缘设备上的本地搜索
  • 处理私密或敏感数据

2.2 Milvus Standalone

Milvus Standalone是单机服务器部署。所有组件都打包到一个Docker镜像中,便于部署。

特点:

  • 单一Docker镜像,部署简便
  • 适合中等规模数据集(可扩展至1亿向量)
  • 通过主从复制支持高可用性
  • 比集群部署需要更少的DevOps工作

适用场景:

  • 早期生产环境
  • 产品市场适应性测试阶段
  • 灵活性比可扩展性更重要的场景
  • 中等规模的生产部署

2.3 Milvus Distributed

Milvus Distributed可以部署在Kubernetes集群上,具有云原生架构,摄取负载和搜索查询由独立节点单独处理,允许关键组件冗余。

特点:

  • 高可扩展性和高可用性
  • 灵活定制每个组件的资源分配
  • 适合大规模数据集(从1亿到数百亿向量)
  • 企业级生产环境的首选

适用场景:

  • 大规模生产部署
  • 数据规模超出单台服务器容量的业务
  • 需要定制化负载处理的环境(如高读取、低写入或高写入、低读取)

2.4 部署方案对比表

特性Milvus LiteMilvus StandaloneMilvus Distributed
部署方式Python库Docker容器Kubernetes集群
适用数据规模数百万向量高达1亿向量1亿至数百亿向量
SDK支持Python、gRPCPython、Go、Java、Node.js、C#、RESTfulPython、Java、Go、Node.js、C#、RESTful
资源要求最低中等
运维复杂度简单中等复杂
一致性级别强一致性强一致性、有界陈旧、会话一致性、最终一致性强一致性、有界陈旧、会话一致性、最终一致性
高级数据管理不支持访问控制、分区、分区键访问控制、分区、分区键、物理资源分组

Select deployment option for your use case

3. Milvus部署操作命令实战

3.1 Milvus Lite部署

Milvus Lite作为Python库,部署非常简单:

# 安装pymilvus(包含Milvus Lite)
pip install -U pymilvus# 在Python代码中使用
from pymilvus import MilvusClient# 使用本地文件初始化Milvus Lite实例
client = MilvusClient("./milvus_demo.db")

3.2 Milvus Standalone Docker部署

Milvus提供了一个安装脚本,可以轻松地将其作为Docker容器安装:

# 下载安装脚本
curl -sfL https://raw.githubusercontent.com/milvus-io/milvus/master/scripts/standalone_embed.sh -o standalone_embed.sh# 启动Docker容器
bash standalone_embed.sh start

安装后:

  • Milvus容器在端口19530上启动
  • 一个嵌入式etcd与Milvus一起安装在同一容器中,端口为2379
  • 可通过修改当前文件夹中的user.yaml文件来更改默认Milvus配置
  • Milvus数据卷映射到当前文件夹中的volumes/milvus目录

停止和删除Milvus:

# 停止Milvus
bash standalone_embed.sh stop# 删除Milvus数据
bash standalone_embed.sh delete

升级Milvus版本:

# 升级Milvus
bash standalone_embed.sh upgrade

3.3 Milvus Distributed Kubernetes部署

使用Milvus Operator在Kubernetes上部署Milvus集群:

3.3.1 使用Helm安装Milvus Operator
helm install milvus-operator \-n milvus-operator --create-namespace \--wait --wait-for-jobs \https://github.com/zilliztech/milvus-operator/releases/download/v1.2.0/milvus-operator-1.2.0.tgz
3.3.2 使用kubectl安装Milvus Operator
kubectl apply -f https://raw.githubusercontent.com/zilliztech/milvus-operator/main/deploy/manifests/deployment.yaml
3.3.3 部署Milvus集群
kubectl apply -f https://raw.githubusercontent.com/zilliztech/milvus-operator/main/config/samples/milvus_cluster_default.yaml
3.3.4 检查Milvus集群状态
kubectl get milvus my-release -o yaml
3.3.5 端口转发以便本地访问
# 转发Milvus服务端口
kubectl port-forward service/my-release-milvus 27017:19530# 转发WebUI端口
kubectl port-forward service/my-release-milvus 27018:9091
3.3.6 卸载Milvus集群
kubectl delete milvus my-release

4. Milvus部署后的使用

4.1 基本概念

4.1.1 集合(Collection)

集合是Milvus中的基本数据组织单位,类似于关系数据库中的表。集合是具有固定列和可变行的二维表。每列代表一个字段,每行代表一个实体。

4.1.2 模式(Schema)和字段(Fields)

模式定义了集合中字段的属性(如数据类型、向量维度等)。每个字段都有各种约束属性,如数据类型和向量字段的维度。

4.1.3 主键(Primary Key)和自动ID(AutoId)

主键字段用于区分实体,每个值在全局范围内是唯一的。主键字段只接受整数或字符串。如果启用了AutoId,Milvus将在数据插入时自动生成这些值。

4.2 Python代码示例

以下是使用Milvus进行文本搜索的简单演示:

from pymilvus import MilvusClient
import numpy as np# 连接到Milvus
client = MilvusClient("./milvus_demo.db")  # Milvus Lite本地文件
# 或者连接到Milvus服务器
# client = MilvusClient(uri="http://localhost:19530", token="username:password")# 创建集合
client.create_collection(collection_name="demo_collection",dimension=384  # 本例中向量维度为384
)# 示例文本
docs = ["Artificial intelligence was founded as an academic discipline in 1956.","Alan Turing was the first person to conduct substantial research in AI.","Born in Maida Vale, London, Turing was raised in southern England.",
]# 生成示例向量(实际应用中应使用真实的嵌入模型)
vectors = [[ np.random.uniform(-1, 1) for _ in range(384) ] for _ in range(len(docs)) ]
data = [ {"id": i, "vector": vectors[i], "text": docs[i], "subject": "history"} for i in range(len(vectors)) ]# 插入数据
res = client.insert(collection_name="demo_collection",data=data
)# 执行带过滤条件的搜索
res = client.search(collection_name="demo_collection",data=[vectors[0]],filter="subject == 'history'",limit=2,output_fields=["text", "subject"],
)
print(res)# 查询匹配过滤表达式的所有实体
res = client.query(collection_name="demo_collection",filter="subject == 'history'",output_fields=["text", "subject"],
)
print(res)# 删除数据
res = client.delete(collection_name="demo_collection",filter="subject == 'history'",
)
print(res)

4.3 基本操作流程

  1. 创建集合:定义向量和标量字段的集合模式
  2. 插入数据:将向量和元数据插入集合
  3. 创建索引:为向量字段创建索引以加速搜索
  4. 加载集合:将集合加载到内存中以准备搜索
  5. 执行搜索/查询:执行相似度搜索或基于标量条件的查询
  6. 释放集合:不使用时释放内存资源

4.4 高级功能

  • 分区(Partition):集合的子集,共享相同的字段集,每个分区包含实体的子集
  • 分片(Shard):集合的水平切片,每个分片对应一个数据输入通道
  • 别名(Alias):为集合创建别名,便于管理
  • 一致性级别:定义跨数据节点和副本的数据一致性级别

5. Milvus运维方案

5.1 Prometheus监控

Milvus支持使用Prometheus进行监控,提供了各组件的指标,可通过http://<component-host>:9091/metrics端点导出。

5.1.1 部署Prometheus监控服务

使用kube-prometheus部署监控服务:

# 克隆kube-prometheus仓库
git clone https://github.com/prometheus-operator/kube-prometheus.git
cd kube-prometheus# 创建监控栈
kubectl apply --server-side -f manifests/setup
kubectl wait \--for condition=Established \--all CustomResourceDefinition \--namespace=monitoring
kubectl apply -f manifests/# 修补prometheus-k8s clusterrole以获取Milvus指标
kubectl patch clusterrole prometheus-k8s --type=json -p='[{"op": "add", "path": "/rules/-", "value": {"apiGroups": [""], "resources": ["pods", "services", "endpoints"], "verbs": ["get", "watch", "list"]}}]'# 端口转发Prometheus和Grafana服务
kubectl --namespace monitoring --address 0.0.0.0 port-forward svc/prometheus-k8s 9090
kubectl --namespace monitoring --address 0.0.0.0 port-forward svc/grafana 3000
5.1.2 为Milvus启用ServiceMonitor

通过Helm参数启用ServiceMonitor:

helm upgrade my-release milvus/milvus --set metrics.serviceMonitor.enabled=true --reuse-values

检查ServiceMonitor资源:

kubectl get servicemonitor

5.2 可视化和管理工具

Milvus提供了多种工具来帮助可视化和管理:

  1. Milvus WebUI:通过浏览器访问的内置GUI工具,提供系统可观察性和简单的界面。可通过http://127.0.0.1:9091/webui/访问。

  2. Milvus Backup:开源工具,用于Milvus数据备份。

  3. Birdwatcher:开源工具,用于调试Milvus和动态配置更新。

  4. Attu:开源GUI工具,用于直观的Milvus管理。

5.3 备份和恢复

Milvus Lite提供了命令行工具,可以将数据导出到JSON文件中:

# 安装带bulk_writer的pymilvus
pip install -U "pymilvus[bulk_writer]"# 导出数据
milvus-lite dump -d ./milvus_demo.db -c demo_collection -p ./data_dir

使用导出的文件,可以通过以下方式上传数据:

  • 通过数据导入功能上传到Zilliz Cloud
  • 通过批量插入功能上传到Milvus服务器

5.4 集群扩容

对于Milvus Distributed,可以通过修改Kubernetes配置来扩展集群:

  1. 调整资源请求和限制
  2. 增加副本数量
  3. 添加更多节点到Kubernetes集群

5.5 升级Milvus版本

  • Milvus Standalone:使用bash standalone_embed.sh upgrade命令
  • Milvus Distributed:使用Helm或Milvus Operator进行升级

6. 总结

Milvus是一款功能强大的向量数据库,提供了从轻量级到分布式集群的多种部署选项,适应不同规模和场景的需求。通过本博客,我们介绍了Milvus的基本概念、部署方案对比、部署操作实战、使用方法和运维方案。

无论您是在进行快速原型设计、构建小型生产应用还是需要大规模向量搜索系统,Milvus都能提供灵活而强大的解决方案。根据您的项目阶段和规模选择合适的Milvus部署模式,可以获得最佳的性能和资源利用效率。

参考资料

  • Milvus官方文档
  • Milvus安装概述
  • Milvus Lite文档
  • Milvus集合管理
  • Milvus监控指南

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/77081.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI Agent 在医疗健康领域的深度应用剖析

引言 随着人工智能技术的迅猛发展&#xff0c;AI Agent 在医疗健康领域展现出了巨大的应用潜力。它犹如一位智能助手&#xff0c;凭借其强大的数据处理和分析能力&#xff0c;渗透到医疗健康的各个环节&#xff0c;从疾病诊断、治疗方案制定到患者康复监控&#xff0c;都发挥着…

树莓派超全系列教程文档--(28)boot文件夹内容

boot文件夹内容 boot 文件夹内容bootcode.binstart*.elffixup*.datcmdline.txtconfig.txtissue.txtinitramfs*ssh 或 ssh.txt设备树blob文件 ( *.dtb )内核文件 ( *.img )overlays 文件夹 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 boot 文件…

SvelteKit 最新中文文档教程(20)—— 最佳实践之性能

前言 Svelte&#xff0c;一个语法简洁、入门容易&#xff0c;面向未来的前端框架。 从 Svelte 诞生之初&#xff0c;就备受开发者的喜爱&#xff0c;根据统计&#xff0c;从 2019 年到 2024 年&#xff0c;连续 6 年一直是开发者最感兴趣的前端框架 No.1&#xff1a; Svelte …

【LangChain核心组件】Memory:让大语言模型拥有持续对话记忆的工程实践

目录 一、Memory架构设计解析 1. 核心组件关系图 2. 代码中的关键实现 二、对话记忆的工程实现 1. 消息结构化存储 2. 动态提示组装机制 三、Memory类型选型指南 四、生产环境优化实践 1. 记忆容量控制 2. 记忆分片策略 3. 记忆检索增强 五、典型问题调试技巧 1. …

适应 AI 时代的软件开发流程:用 AI + TDD 构建可维护项目

🧠 适应 AI 时代的软件开发流程:用 AI + TDD 构建可维护项目 本文面向有系统开发经验的工程师,分享如何结合 Git 管理、AI 协作、YAML 驱动与 TDD 开发方式,高效构建一个可维护、可协作、可交付的嵌入式或通用工程项目。适合 BLE 模块、协议栈组件、物联网控制系统等项目落…

使用 chromedriver 实现网络爬虫【手抄】

1、引用 selenium 包 <dependency><groupId>org.seleniumhq.selenium</groupId><artifactId>selenium-java</artifactId><version>4.29.0</version> </dependency> <dependency><groupId>org.seleniumhq.seleniu…

Python项目--基于Python的自然语言处理文本摘要系统

1. 项目概述 自然语言处理(NLP)是人工智能领域中一个重要的研究方向&#xff0c;而文本摘要作为NLP的一个重要应用&#xff0c;在信息爆炸的时代具有重要意义。本项目旨在开发一个基于Python的文本摘要系统&#xff0c;能够自动从长文本中提取关键信息&#xff0c;生成简洁而全…

【Vue #3】指令补充样式绑定

一、指令修饰符 Vue 的指令修饰符&#xff08;Directive Modifiers&#xff09;是 Vue 模板语法中的重要特性&#xff0c;它们以半角句号 . 开头&#xff0c;用于对指令的绑定行为进行特殊处理 修饰符作用如下&#xff1a; 简化事件处理&#xff08;如阻止默认行为、停止冒泡…

Reinforcement Learning强化学习--李宏毅机器学习笔记

个人学习笔记&#xff0c;如有错误欢迎指正&#xff0c;也欢迎交流&#xff0c;其他笔记见个人空间 强化学习 vs 监督学习 监督学习&#xff08;Supervised Learning&#xff09;&#xff1a;你有输入和明确的输出标签&#xff0c;例如图像分类。 强化学习&#xff08;Rein…

Windows VsCode Terminal窗口使用Linux命令

背景描述&#xff1a; 平时开发环境以Linux系统为主&#xff0c;有时又需要使用Windows系统下开发环境&#xff0c;为了能像Linux系统那样用Windows VsCode&#xff0c;Terminal命令行是必不可少内容。 注&#xff1a;Windows11 VsCode 1.99.2 下面介绍&#xff0c;如何在V…

软件测试之测试数据生成(Excel版)

这是Excel生成测试数据的函数使用 1.时间 1.1.时间 例生成2022-05-01之前一年内任意时间点: =TEXT("2022-05-01"-RAND()-RANDBETWEEN(1,365),"yyyy-mm-dd hh:mm:ss")1.2.年月日 yyyy-mm-dd 以当前时间生成10年的日期 =TEXT(NOW()-RAND()-RANDBETWE…

libwebsocket建立服务器需要编写LWS_CALLBACK_ADD_HEADERS事件处理

最近在使用libwebsocket&#xff0c;感觉它搭建Http与websocket服务器比较简单&#xff0c;不像poco库那么庞大&#xff0c;但当我使用它建立websocket服务器后&#xff0c;发现websocket客户端连接一直没有连接成功&#xff0c;不知道什么原因&#xff0c;经过一天的调试&…

从 PyTorch 到 ONNX:深度学习模型导出全解析

在模型训练完毕后&#xff0c;我们通常希望将其部署到推理平台中&#xff0c;比如 TensorRT、ONNX Runtime 或移动端框架。而 ONNX&#xff08;Open Neural Network Exchange&#xff09;正是 PyTorch 与这些平台之间的桥梁。 本文将以一个图像去噪模型 SimpleDenoiser 为例&a…

Hadoop集群部署教程-P6

Hadoop集群部署教程-P6 Hadoop集群部署教程&#xff08;续&#xff09; 第二十一章&#xff1a;监控与告警系统集成 21.1 Prometheus监控体系搭建 Exporter部署&#xff1a; # 部署HDFS Exporter wget https://github.com/prometheus/hdfs_exporter/releases/download/v1.1.…

【Altium】AD-生成PDF文件图纸包含太多的空白怎么解决

1、 文档目标 AD设计文件导出PDF时&#xff0c;图纸模板方向设置问题 2、 问题场景 AD使用Smart PDF导出PDF时&#xff0c;不管你怎么设置页面尺寸&#xff0c;只要从横向转为纵向输出&#xff0c;输出的始终是横向纸张&#xff08;中间保留纵向图纸&#xff0c;两边大量留白…

大厂面试:六大排序

前言 本篇博客集中了冒泡&#xff0c;选择&#xff0c;二分插入&#xff0c;快排&#xff0c;归并&#xff0c;堆排&#xff0c;六大排序算法 如果觉得对你有帮助&#xff0c;可以点点关注&#xff0c;点点赞&#xff0c;谢谢你&#xff01; 1.冒泡排序 //冒泡排序&#xff…

大模型开发:源码分析 Qwen 2.5-VL 视频抽帧模块(附加FFmpeg 性能对比测试)

目录 qwen 视频理解能力 messages 构建 demo qwen 抽帧代码分析 验证两个实际 case 官网介绍图 性能对比&#xff1a;ffmpeg 抽帧、decord 库抽帧 介绍 联系 对比 测试结果 测试明细 ffmpeg 100 qps 测试&#xff08;CPU&#xff09; decord 100 qps 测试&#x…

git的上传流程

好久没使用git 命令上传远程仓库了。。。。。温习了一遍&#xff1b; 几个注意点--单个文件大小不能超过100M~~~ 一步步运行下面的命令&#xff1a; 进入要上传的文件夹内&#xff0c;点击git bash 最终 hbu的小伙伴~有需要nndl实验的可以自形下载哦

驱动学习专栏--字符设备驱动篇--2_字符设备注册与注销

对于字符设备驱动而言&#xff0c;当驱动模块加载成功以后需要注册字符设备&#xff0c;同样&#xff0c;卸载驱动模 块的时候也需要注销掉字符设备。字符设备的注册和注销函数原型如下所示 : static inline int register_chrdev(unsigned int major, const char *name, const…

redis 放置序列化的对象,如果修改对象,需要修改版本号吗?

在 Redis 中存储序列化对象时,如果修改了对象的类结构(例如增删字段、修改字段类型或顺序),是否需要修改版本号取决于序列化协议的兼容性策略和业务场景的容错需求。以下是详细分析: 1. 为什么需要考虑版本号? 序列化兼容性问题: 当对象的类结构发生变化时,旧版本的序列…