向量数据库Milvus源码开发贡献实践

news2024/9/21 9:07:02

5d0f241544a3d141372f96ff6afe3017.png

625fed0d8f9aed26d7d7c8fcceeaebca.png

Milvus 是一款云原生的开源向量数据库,广泛应用于高维向量数据的管理和人工智能驱动的相似性搜索。无论是在构建智能搜索引擎还是开发数据驱动的应用,Milvus 都能提供强大的支持。我们将一起从头开始实践 Milvus 的标准开发流程,包括如何搭建开发环境、构建 Milvus、运行测试以及如何将您的代码贡献给 Milvus。

01

Hello Milvus

想要成为Milvus开发者为开源社区贡献,首先要做的就是为Milvus设置开发环境。由于Milvus有一些特定版本的第三方依赖项,如果你是使用linux系统,那么恭喜你不太会遇到编译问题。如果是mac 系统,尤其是M1可能会遇到一些编译上的问题,没有关系,我们在这里整理了常见几大类问题,方便社区开发者查阅,更多内容可以参考

https://github.com/milvus-io/milvus/blob/master/DEVELOPMENT.md

86b8ea64d5726e19ef535187e58054a7.png

本地构建

如果你想在本地构建Milvus,Milvus已经将所有要求放入install_deps.sh文件中。只需运行以下命令即可安装所有第三方依赖项:

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


# Compile Milvus.
$ make

Docker环境构建

有两种方法,一种是在构建的Docker容器中运行命令,另一种是进入开发容器进行开发。

# method 1: run a command in a built docker container
build/builder.sh make


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

02

常见的坑

  • Brew: Unexpected Disconnect while reading sideband packet

在使用Homebrew时,可能会遇到意外断开连接的问题,解决方法为加大postBuffer容量。

==> 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~ %
git config --global http.postBuffer 1M

如果安装后出现“Brew: command not found”错误,请配置Git用户信息:

git config --global user.email xxxgit config --global user.name xxx
  • Docker: error getting credentials - err: exit status 1, out: ``

处理方法是从~/.docker/config.json中删除“credsStore”字段。

f32d9a8f910f100e41b8e3cd76067bdf.png

  • Python: No module named 'imp'

    Python 3.12已移除imp模块,目前需要降级到Python 3.11。

53c5ac2961d667f4b1eac1e6d6e4dd92.png

  • Conan: Unrecognized arguments: --install-folder conan

    请将Conan版本更改为1.61。

e2c0bd33ebbbddeee850d50bc77f1040.png

  • Conan command not found

    通过在bash中导出Python的bin路径来解决

    export PATH="/path/to/python/bin:$PATH"
  • Llvm: use of undeclared identifier 'kSecFormatOpenSSL'

ec728d4874786a0e3588f17368ab45ab.png

重新安装 llvm@15

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

03

Vscode设置

使用Vscode将C++和Go集成在一起非常方便,只要将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"
}

04

构建Milvus

有两种模式来构建Milvus:Milvus Standalone和Milvus Cluster。两者都包括三个组件:

  • Milvus:核心功能组件。

  • Etcd:元数据引擎,访问和存储Milvus内部组件的元数据。

  • MinIO:存储引擎,负责Milvus的数据持久化。

Milvus Cluster包括额外的组件 — Pulsar,用于通过Pub/Sub机制进行分布式处理。

Milvus Standalone

Milvus Standalone独立运行为单个实例。

sudo docker-compose -f deployments/docker/dev/docker-compose.yml up -d
bash ./scripts/start_standalone.sh

Milvus Cluster

Milvus Cluster跨多个节点运行。所有Milvus实例聚合在一起,形成一个统一的系统,以支持更大的数据量和更高的流量负载。

我们可以使用Milvus Operator来安装Milvus Cluster,它帮助我们将完整的Milvus服务堆栈部署和管理到K8s中,直接参考这篇就可以了。

https://milvus.io/docs/install_cluster-milvusoperator.md

Milvus Standalone

Milvus Standalone以单一instance独立运行。

05

运行E2E测试

无论是构建Milvus Standalone还是Milvus Cluster,我们都可以运行E2E测试。详细步骤如下:

https://github.com/milvus-io/milvus/blob/master/DEVELOPMENT.md#e2e-tests

cd tests/python_client
pip install -r requirements.txt
pytest --tags=L0 -n auto

06

最后一步 - 提交代码

恭喜你如果通过了所有单元测试和E2E测试。如果没有就修复修改并重新编译。通常第一次编译会比较久,但是后面会很快的,所以不要担心!

在通过所有测试后,我们可以最终提交更改。请注意,所有的Milvus Pull Request需要与Milvus Issue相关联,可以先去社区搜索是否存在相关的issue

https://github.com/milvus-io/milvus/issues

如果没有的话,就需要先创建一个与更改相关的新问题。

  • Fork Milvus到你的仓库

  • 克隆到本地并切出新分支

  • 提交你的代码:通过在提交中添加“signed-off-by”信息进行提交

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

更多详细信息,请查看

https://github.com/milvus-io/milvus/blob/master/CONTRIBUTING.md

07

最后的最后

Milvus提供了丰富的SDK(Python、Java、Go、Node.js),用户友好,易于上手。如果能成为Milvus开发者是一件非常酷的事情!期待你一起贡献Milvus代码!也希望这篇文章能够简化你的贡献过程。

作者介绍

fcc6204f669e964e4804b5749e2312cb.png

推荐阅读

1f9bccd6e6cf14d4fd37eaf391b9f3ff.png

ef104dfb5047ca2ab9b89d9d7db4390d.png

1d16f70bd4244109cbf3b4645279fa91.png

068da96b850ca26e493feb711c2b77e3.png

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

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

相关文章

企业画册在线版是怎么制作的?

随着互联网技术的飞速发展,传统的纸质企业画册已经逐渐无法满足现代企业的需求。为了让画册更加环保、便捷,同时提升企业形象和品牌影响力,企业画册在线版应运而生。那么,企业画册在线版究竟是如何制作出来的呢?今天&a…

嵌入式学习(数据库)

数据库的定义: 可以理解为数据库是用来存放数据的一个容器。有了数据库后,我们可以直接查找数据。或者可以对数据库进行读写删除等操作。 Sqlite 小型数据库 . Sqlite特点: 可以实现大数据量的管理 读写速度慢 最常见的数据库类型是关系型数据库管理…

QLU-AI助手初次微调Qwen2-7B-Instruct总结

一、微调代码 from datasets import Dataset import pandas as pd from transformers import (AutoTokenizer,AutoModelForCausalLM,DataCollatorForSeq2Seq,TrainingArguments,Trainer,GenerationConfig) import torch from peft import LoraConfig, TaskType, get_peft_mode…

探索待办事项管理新世界:10款工具带你告别杂乱无章

国内外主流的10款免费待办事项app对比:1.PingCode;2.Worktile;3.Todoist;4.Trello;5.Habitica;6.Forest;7.Teambition;8.Asana;9.嘀嗒清单(TickTick&#xff…

poe供电原理以及应用

1,根据IEEE802.3af标准,一个完整的PoE系统包括供电端设备PSE和受电端设备PD两部分; 供电设备PSE是整个系统的电源提供者,为PD设备提供直流电源,其可分为M

[动态规划]---背包问题

前言 作者:小蜗牛向前冲 专栏:小蜗牛算法之路 专栏介绍:"蜗牛之道,攀登大厂高峰,让我们携手学习算法。在这个专栏中,将涵盖动态规划、贪心算法、回溯等高阶技巧,不定期为你奉上基础数据结构…

如何让ChatGPT说话更像人类

ChatGPT在多个领域展现了卓越的能力,但对话中仍不可避免地带有一定的机械感。幸运的是,OpenAI推出的GPTs功能可以让用户自定义prompt。最近,我发现了其中一个GPTs,它能让ChatGPT的对话更加贴近真人,现在就来与大家分享…

【生日视频制作】农村文化墙广告标语AE模板修改文字软件生成器教程特效素材【AE模板】

生日视频制作教程农村文化墙广告标语AE模板修改文字软件生成器 怎么如何做的【生日视频制作】农村文化墙广告标语AE模板修改文字软件生成器教程特效素材【AE模板】 生日视频制作步骤: 安装AE软件 下载AE模板 把AE模板导入AE软件 修改图片或文字 渲染出视频

复杂网络|节点重要性评价指标

author: xiao黄 time: 2024-08-28 公众号: 复杂网络与网络科学 CSDN: https://blog.csdn.net/Python_Matlab评价节点重要性算法的指标有多种,如基于信息传播方面的动力学模型、单调性、Distinct Metric以及基于网络脆弱性和鲁棒性的方法等。不同的评价指标所考虑的角…

Java Web_00001

目录 Web项目介绍网页的组成部分 HTMLHTML简介HTML示例HTML文件的书写规范HTML标签标签介绍标签的语法:常用标签font特殊字符标题标签超链接列表标签img标签表格标签跨行跨列表格iframe框架标签(内嵌窗口)表单标签表单的显示表单格式化表单提交细节 其他标签 CSSCSS…

羟基“消失术”,化学合成中的巧妙方法

羟基(-OH)是一个很常见的官能团,在有机合成的转化过程中往往起到桥梁作用。在化合物合成过程中由于合成选择的原因通常会先引入一些基团,以降低合成化合物的难度以及提高其产率。而羟基的引入或者生成是比较常见的。羟基化方法有很多,其中包括…

JDBC和Mybatis中的批处理

src目录下创建jdbc.properties mysql驱动5.1.6之后,只需要配置url,username,password mysql 5.1.6之后可以无需Class.forName("com.mysql.jdbc.Driver") * 从jdk1.5之后可以通过配置文件来配置 * 会自动加载mysql驱动jar包下META-INF/services/java.sql.Driver文本中…

Python深度学习股价预测、量化交易策略:LSTM、GRU深度门控循环神经网络|附代码数据

全文链接:https://tecdat.cn/?p37539 原文出处:拓端数据部落公众号 分析师:Shuo Zhang 本文以上证综指近 22 年的日交易数据为样本,构建深度门控循环神经网络模型,从股价预测和制定交易策略两方面入手&#xff0c…

8月29日

思维导图 作业&#xff1a; 仿照string类&#xff0c;实现myString 代码 mystring.h #ifndef MYSTRING_H #define MYSTRING_H#include <iostream> #include<string.h>using namespace std;class myString { private:char *str;int size;public://无参构造myStr…

在自己的数据集上测试coco评价指标——以Mar20为例

参考&#xff1a; 1.在自己的数据集上调用cocoapi计算map 2. COCO Result Format 3.COCO result json 之前的模型都是在COCO数据集上训练&#xff0c;数据集的标注以及结果的生成格式都是按照官方的格式组织的&#xff0c;调用cocoapi和官方下载的instance_val2017.json计算就可…

Win11 操作(七)声音降噪

前言 为了听脚步和不外放声音影响到女朋友休息&#xff0c;于是买了S21头戴式耳机&#xff0c;虽然目的都达到了&#xff0c;但是又有新问题出现 损害队友听力 由于天气炎热&#xff0c;家里都开着风扇&#xff0c;但是耳机没有降噪功能所以我的麦噪音极大&#xff0c;这就导…

OpenLayers3, 设置地图背景

文章目录 一、前言二、代码实现三、总结 一、前言 本文基于OpenLayers3&#xff0c;实现地图加入背景图的功能。 二、代码实现 <!DOCTYPE html> <html xmlns"http://www.w3.org/1999/xhtml"> <head><meta http-equiv"Content-Type"…

封装string

仿照string类&#xff0c;实现mystring #include <iostream> #include<string.h> using namespace std;class MyString {private:char *str; //记录c风格的字符串int size0; //记录字符串实际长度public://无参构造&#xff1a;定义了一个字符串MyStri…

Noise, Dynamic Range and Bit Depth in Digital SLRs --- 数字单反相机中的噪点、动态范围和位深

系列文章目录 文章目录 系列文章目录前言数字单反相机中的噪点、动态范围和位深二、噪声的来源2.1 光子散粒噪声2.2 读出噪声2.3 模式噪声2.4 热噪声2.5 像素响应不均匀性&#xff08;PRNU&#xff09;2.5 量化误差 前言 Noise, Dynamic Range and Bit Depth in Digital SLRs …

golang私有仓库遇到的问题记录

问题1: is this a git repository? 原因&#xff1a;git保存了错误的用户名密码 我是mac系统&#xff0c;在启动台-》其他-》钥匙串&#xff0c;找到git的登录信息&#xff0c;将错误的钥匙串删除即可。 问题2: remote: The project you were looking for could not be found…