🚀 免费试用 Zilliz Cloud,完全托管的 Milvus,体验 10 倍的性能提升!立即试用>

milvus-logo
LFAI

HomeBlogs如何为 Milvus 做贡献:开发人员快速入门指南

如何为 Milvus 做贡献:开发人员快速入门指南

  • Engineering
December 01, 2024
Shaoting Huang

Milvus是一个开源向量数据库,旨在管理高维向量数据。无论您是要构建智能搜索引擎、推荐系统,还是下一代人工智能解决方案如检索增强生成(RAG)),Milvus 都是您唾手可得的强大工具。

但是,真正推动 Milvus 向前发展的不仅仅是其先进的技术,还有其背后充满活力和激情的开发者社区。作为一个开源项目,Milvus 的蓬勃发展得益于像您这样的开发人员的贡献。来自社区的每一次错误修复、功能添加和性能提升,都让 Milvus 变得更快、更可扩展、更可靠。

无论您是热衷于开源、渴望学习,还是希望在人工智能领域产生持久影响,Milvus 都是您贡献力量的理想场所。本指南将指导您完成从设置开发环境到提交第一个拉取请求的整个过程。我们还将强调您可能面临的常见挑战,并提供克服这些挑战的解决方案。

准备好了吗?让我们一起把 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 芯片的 Mac 用户,可能会在编译过程中遇到一些问题。不过不用担心,我们有一份指南可以帮助你解决最常见的问题。

图操作系统配置

有关完整的设置指南,请查阅官方的《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 代码以集成 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

  • 测试设置:添加testTags ,并将运行测试的超时时间延长至 10 分钟。

添加后,该设置可确保 C++ 和 Go 工作流之间的无缝集成。它是构建和测试 Milvus 的完美工具,无需不断调整环境。

专业提示

设置完成后,运行快速测试构建以确认一切正常。如果感觉不对劲,请仔细检查路径和 VS Code 的 Go 扩展版本。

部署 Milvus

Milvus 支持三种部署模式:MilvusLiteMilvusStandalone和 MilvusDistributed。

  • 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 Distributed(以前称为 Milvus 集群)

对于较大的数据集和较高的流量,分布式模式提供了横向可扩展性。它将多个 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 贡献指南

贡献机会

恭喜--你已经启动并运行 Milvus!您已经探索了它的部署模式,运行了您的测试,也许还深入研究了代码。现在是提升水平的时候了:为Milvus做出贡献,帮助塑造人工智能和非结构化数据的未来。

无论您的技能如何,Milvus 社区都有您的一席之地!无论您是喜欢解决复杂挑战的开发人员,还是喜欢撰写简洁文档或工程博客的技术作家,抑或是希望改善部署的 Kubernetes 爱好者,您都可以在这里大显身手。

看看下面的机会,找到您的完美匹配。每一份贡献都有助于推动 Milvus 的发展,谁知道呢?您的下一个拉取请求可能会推动下一波创新。还等什么?让我们开始吧!🚀

项目适用于指南
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

扩展阅读