打造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.pswp.cn/pingmian/77081.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/77081.shtml
英文地址,請注明出處:http://en.pswp.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. 為什么需要考慮版本號? 序列化兼容性問題: 當對象的類結構發生變化時,舊版本的序列…