如何貢獻給 Milvus:開發者快速入門
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_PATH
、LD_LIBRARY_PATH
及RPATH
設定路徑,這些路徑對於在建立及測試過程中定位函式庫非常重要。Go 工具整合:啟用 Go 的語言伺服器 (
gopls
) 並設定工具,例如gofumpt
用於格式化,golangci-lint
用於 linting。測試設定:新增
testTags
,並將執行測試的逾時時間增加至 10 分鐘。
一旦加入,此設定可確保 C++ 與 Go 工作流程之間的無縫整合。它非常適合建立和測試 Milvus,而無需不斷調整環境。
專業提示
設定完成後,執行快速測試建立,確認一切運作正常。如果感覺不對勁,請仔細檢查路徑和 VS Code 的 Go 延伸版本。
部署 Milvus
Milvus 支援三種部署模式-Lite、Standalone及Distributed。
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 做出貢獻!
將您的 Pull Request (PR) 連接到問題
提交給 Milvus 的每個 PR 都需要與相關的問題連結。以下是處理的方法:
檢查現有的問題:查看 Milvus 問題追蹤器,看看是否已有與您的變更相關的問題。
建立新問題:如果沒有相關的問題,請開啟一個新問題,並解釋您要解決的問題或新增的功能。
提交您的程式碼
分叉儲存庫:先將 Milvus 倉庫分叉到您的 GitHub 帳戶。
建立分支:在本地克隆您的分支,並為您的變更建立一個新的分支。
使用簽名提交:確保您的提交包含
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-go | Go 開發人員 | / |
milvus、knowhere | CPP 開發人員 | / |
pymilvus,milvus-sdk-node,milvus-sdk-java | 對其他語言有興趣的開發者 | 貢獻 PyMilvus |
milvus-helm | Kubernetes 發燒友 | / |
Milvus-docs,milvus-io/community/blog | 技術作家 | 為 milvus 文件貢獻 |
milvus-insight | 網頁開發人員 | / |
最後的話
Milvus 提供各種 SDK-Python(PyMilvus)、Java、Go 和Node.js,讓您可以輕鬆開始建置。對 Milvus 的貢獻不只是程式碼,而是加入一個充滿活力與創新的社群。
歡迎加入 Milvus 開發者社群,祝您編碼愉快!我們迫不及待想看到您的創作。
進一步閱讀
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word