🚀 免費嘗試 Zilliz Cloud,完全托管的 Milvus,體驗速度提升 10 倍!立即嘗試

milvus-logo
LFAI
  • Home
  • Blog
  • 如何貢獻給 Milvus:開發者快速入門

如何貢獻給 Milvus:開發者快速入門

  • Engineering
December 01, 2024
Shaoting Huang

Milvus是專為管理高維向量資料而設計的開放源碼向量資料。無論您是要建立智慧型搜尋引擎、推薦系統,或是下一世代的 AI 解決方案,例如檢索擴增世代(RAG),Milvus 都是您唾手可得的強大工具。

但真正推動 Milvus 向前邁進的不僅是其先進的技術,還有其背後充滿活力與熱情的開發者社群。作為一個開放源碼專案,Milvus 的茁壯成長和不斷進化都要歸功於像您這樣的開發者的貢獻。來自社群的每一個錯誤修正、功能新增和效能提升,都讓 Milvus 更快速、更可擴充、更可靠。

無論您是熱衷於開放原始碼、渴望學習,或是想要在人工智慧領域發揮持久的影響力,Milvus 都是您貢獻心力的最佳場所。本指南將引導您完成整個流程 - 從設定您的開發環境到提交您的第一個 pull request。我們也會強調您可能面臨的常見挑戰,並提供克服這些挑戰的解決方案。

準備好投入了嗎?讓我們一起把 Milvus 做得更好!

設定您的 Milvus 開發環境

第一件事:設定您的開發環境。您可以在本機安裝 Milvus 或使用 Docker,這兩種方法都很簡單,但您也需要安裝一些協力廠商的相依性,才能讓一切正常運作。

在本機建立 Milvus

如果您喜歡從頭開始建置,在本機上建置 Milvus 是一件輕而易舉的事。Milvus 在install_deps.sh 腳本中捆綁了所有的相依性,讓它變得更容易。以下是快速設定:

# Install third-party dependencies.
$ cd milvus/
$ ./scripts/install_deps.sh

# Compile Milvus.
$ make

使用 Docker 建置 Milvus

如果您偏好 Docker,有兩種方法:您可以在預先建置的容器中執行指令,或是啟動一個開發容器,進行更多實作。

# Option 1: Run commands in a pre-built Docker container  
build/builder.sh make  

# Option 2: Spin up a dev container  
./scripts/devcontainer.sh up  
docker-compose -f docker-compose-devcontainer.yml ps  
docker exec -ti milvus-builder-1 bash  
make milvus  

平台注意事項:如果您使用的是 Linux,您就可以使用了,編譯問題非常罕見。不過,Mac 使用者,尤其是使用 M1 晶片的使用者,可能會在過程中遇到一些問題。不過不用擔心,我們有一份指南可以幫助您解決最常見的問題。

圖:作業系統配置

如需完整的設定指南,請參閱官方的Milvus 開發指南

常見問題與修正方法

有時候,設置您的 Milvus 開發環境並不如計劃的那麼順利。別擔心,以下是您可能會遇到的常見問題,以及如何快速解決。

自製遊戲:讀取側頻封包時意外中斷

如果您正在使用 Homebrew 並看到類似這樣的錯誤:

==> Tapping homebrew/core
remote: Enumerating objects: 1107077, done.
remote: Counting objects: 100% (228/228), done.
remote: Compressing objects: 100% (157/157), done.
error: 545 bytes of body are still expected.44 MiB | 341.00 KiB/s
fetch-pack: unexpected disconnect while reading sideband packet
fatal: early EOF
fatal: index-pack failed
Failed during: git fetch --force origin refs/heads/master:refs/remotes/origin/master
myuser~ %

修復方法:增加http.postBuffer 的大小:

git config --global http.postBuffer 1M

如果您在安裝 Homebrew 之後也遇到Brew: command not found ,您可能需要設定您的 Git 使用者設定:

git config --global user.email xxxgit config --global user.name xxx

Docker: 錯誤獲取憑證

使用 Docker 時,您可能會看到這樣的錯誤:

error getting credentials - err: exit status 1, out: ``  

修復:開啟~/.docker/config.json 並移除credsStore 欄位。

Python:沒有名為 'imp' 的模組

如果 Python 產生這個錯誤,那是因為 Python 3.12 移除了imp 模組,而一些舊的相依性仍在使用這個模組。

修復:降級到 Python 3.11:

brew install python@3.11  

柯南:未識別參數或未找到命令

問題:如果您看到Unrecognized arguments: --install-folder conan ,您很可能使用的是不相容的 Conan 版本。

修復:降級到 Conan 1.61:

pip install conan==1.61  

問題:如果您看到Conan command not found ,這表示您的 Python 環境沒有正確設定。

修正:將 Python 的 bin 目錄加入您的PATH

export PATH="/path/to/python/bin:$PATH"

LLVM:使用未宣告的識別碼 'kSecFormatOpenSSL'

此錯誤通常表示您的 LLVM 相依性過時。

修復方法:重新安裝 LLVM 15 並更新您的環境變數:

brew reinstall llvm@15
export LDFLAGS="-L/opt/homebrew/opt/llvm@15/lib"
export CPPFLAGS="-I/opt/homebrew/opt/llvm@15/include"

專業提示

  • 務必仔細檢查您的工具版本和相依性。

  • 如果仍然無法運作, Milvus GitHub Issues 頁面是尋找答案或尋求協助的好地方。

設定 VS Code 以整合 C++ 與 Go

讓 C++ 和 Go 在 VS Code 中一起運作比聽起來容易。透過正確的設定,您可以簡化 Milvus 的開發流程。只需使用以下配置調整您的user.settings 檔案:

{
   "go.toolsEnvVars": {
       "PKG_CONFIG_PATH": "/Users/zilliz/milvus/internal/core/output/lib/pkgconfig:/Users/zilliz/workspace/milvus/internal/core/output/lib64/pkgconfig",
       "LD_LIBRARY_PATH": "/Users/zilliz/workspace/milvus/internal/core/output/lib:/Users/zilliz/workspace/milvus/internal/core/output/lib64",
       "RPATH": "/Users/zilliz/workspace/milvus/internal/core/output/lib:/Users/zilliz/workspace/milvus/internal/core/output/lib64"
   },
   "go.testEnvVars": {
       "PKG_CONFIG_PATH": "/Users/zilliz/workspace/milvus/internal/core/output/lib/pkgconfig:/Users/zilliz/workspace/milvus/internal/core/output/lib64/pkgconfig",
       "LD_LIBRARY_PATH": "/Users/zilliz/workspace/milvus/internal/core/output/lib:/Users/zilliz/workspace/milvus/internal/core/output/lib64",
       "RPATH": "/Users/zilliz/workspace/milvus/internal/core/output/lib:/Users/zilliz/workspace/milvus/internal/core/output/lib64"
   },
   "go.buildFlags": [
       "-ldflags=-r /Users/zilliz/workspace/milvus/internal/core/output/lib"
   ],
   "terminal.integrated.env.linux": {
       "PKG_CONFIG_PATH": "/Users/zilliz/workspace/milvus/internal/core/output/lib/pkgconfig:/Users/zilliz/workspace/milvus/internal/core/output/lib64/pkgconfig",
       "LD_LIBRARY_PATH": "/Users/zilliz/workspace/milvus/internal/core/output/lib:/Users/zilliz/workspace/milvus/internal/core/output/lib64",
       "RPATH": "/Users/zilliz/workspace/milvus/internal/core/output/lib:/Users/zilliz/workspace/milvus/internal/core/output/lib64"
   },
   "go.useLanguageServer": true,
   "gopls": {
       "formatting.gofumpt": true
   },
   "go.formatTool": "gofumpt",
   "go.lintTool": "golangci-lint",
   "go.testTags": "dynamic",
   "go.testTimeout": "10m"
}

以下是此設定的作用:

  • 環境變數:PKG_CONFIG_PATHLD_LIBRARY_PATHRPATH 設定路徑,這些路徑對於在建立及測試過程中定位函式庫非常重要。

  • Go 工具整合:啟用 Go 的語言伺服器 (gopls) 並設定工具,例如gofumpt 用於格式化,golangci-lint 用於 linting。

  • 測試設定:新增testTags ,並將執行測試的逾時時間增加至 10 分鐘。

一旦加入,此設定可確保 C++ 與 Go 工作流程之間的無縫整合。它非常適合建立和測試 Milvus,而無需不斷調整環境。

專業提示

設定完成後,執行快速測試建立,確認一切運作正常。如果感覺不對勁,請仔細檢查路徑和 VS Code 的 Go 延伸版本。

部署 Milvus

Milvus 支援三種部署模式-Lite、StandaloneDistributed。

  • Milvus Lite是一個 Python 函式庫,也是 Milvus 的超輕量版本。它非常適合在 Python 或筆記型電腦環境中進行快速原型開發,以及小規模的本地實驗。

  • Milvus Standalone是 Milvus 的單節點部署選項,使用客戶端伺服器模式。它相當於 Milvus 的 MySQL,而 Milvus Lite 則像 SQLite。

  • Milvus Distributed是 Milvus 的分散式模式,非常適合企業用戶建立大型向量資料庫系統或向量資料平台。

所有這些部署都依賴於三個核心元件:

  • Milvus: 驅動所有作業的向量資料庫引擎。

  • Etcd:管理 Milvus 內部元資料的元資料引擎。

  • MinIO:確保資料持久性的儲存引擎。

當以分散式模式執行時,Milvus 也結合了Pulsar,使用 Pub/Sub 機制進行分散式訊息處理,使其可擴充至高吞吐量環境。

Milvus 單機版

單機模式專為單一實體設定量身打造,非常適合測試和小規模應用程式。以下是如何開始使用:

# Deploy Milvus Standalone  
sudo docker-compose -f deployments/docker/dev/docker-compose.yml up -d
# Start the standalone service  
bash ./scripts/start_standalone.sh

Milvus 分散式 (之前稱為 Milvus Cluster)

對於較大的資料集和較高的流量,分散式模式提供了水平擴展性。它將多個 Milvus 實體結合為單一內聚系統。Milvus Operator 可在 Kubernetes 上執行,並為您管理整個 Milvus 堆疊,讓部署變得更輕鬆。

需要逐步指導嗎?查看Milvus 安裝指南

執行端對端 (E2E) 測試

一旦您的 Milvus 部署開始運行,使用 E2E 測試來測試其功能就變得輕而易舉。這些測試涵蓋您設定的每個部分,以確保一切運作符合預期。以下是如何執行這些測試:

# Navigate to the test directory  
cd tests/python_client  

# Install dependencies  
pip install -r requirements.txt  

# Run E2E tests  
pytest --tags=L0 -n auto  

如需深入說明和故障排除技巧,請參閱Milvus 開發指南

專業提示

如果您是 Milvus 的新使用者,請先從 Milvus Lite 或 Standalone 模式開始,瞭解其功能,然後再擴充至 Distributed 模式,以應付生產級工作負載。

提交您的程式碼

恭喜您!您已通過所有的單元測試和 E2E 測試 (或在需要時進行除錯並重新編譯)。雖然第一次編譯可能需要一些時間,但以後的編譯會快很多,所以不必擔心。一切都通過後,您就可以提交您的變更,為 Milvus 做出貢獻!

提交給 Milvus 的每個 PR 都需要與相關的問題連結。以下是處理的方法:

  • 檢查現有的問題:查看 Milvus 問題追蹤器,看看是否已有與您的變更相關的問題。

  • 建立新問題:如果沒有相關的問題,請開啟一個新問題,並解釋您要解決的問題或新增的功能。

提交您的程式碼

  1. 分叉儲存庫:先將 Milvus 倉庫分叉到您的 GitHub 帳戶。

  2. 建立分支:在本地克隆您的分支,並為您的變更建立一個新的分支。

  3. 使用簽名提交:確保您的提交包含Signed-off-by 簽署,以符合開源授權:

git commit -m "Commit of your change" -s

此步驟證明您的貢獻符合開發者原產地證書 (DCO)。

有用資源

如需詳細步驟和最佳實踐,請查看 Milvus Contribution Guide

貢獻機會

恭喜-你已經開始運行 Milvus!您已經探索了它的部署模式、執行了測試,甚至可能還深入研究了程式碼。現在是提升等級的時候了:為Milvus做出貢獻,並協助塑造 AI 和非結構化資料的未來。

無論您的技能如何,Milvus 社群都有您的一席之地!無論您是喜歡解決複雜挑戰的開發人員、喜歡撰寫簡潔文件或工程部落格的技術作家,或是希望改善部署的 Kubernetes 愛好者,您都有機會發揮影響力。

看看下面的機會,找到您的完美搭配。每一項貢獻都有助於推動 Milvus 向前邁進,誰知道呢?您的下一個 pull request 也許就會帶動下一波的創新。還在等什麼?讓我們開始吧!🚀

專案適用於指南
milvus,milvus-sdk-goGo 開發人員/
milvusknowhereCPP 開發人員/
pymilvus,milvus-sdk-node,milvus-sdk-java對其他語言有興趣的開發者貢獻 PyMilvus
milvus-helmKubernetes 發燒友/
Milvus-docs,milvus-io/community/blog技術作家為 milvus 文件貢獻
milvus-insight網頁開發人員/

最後的話

Milvus 提供各種 SDK-Python(PyMilvus)、JavaGoNode.js,讓您可以輕鬆開始建置。對 Milvus 的貢獻不只是程式碼,而是加入一個充滿活力與創新的社群。

歡迎加入 Milvus 開發者社群,祝您編碼愉快!我們迫不及待想看到您的創作。

進一步閱讀

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started

Like the article? Spread the word

繼續閱讀