点击查看 Milvus 社区十大关键词(上)

公孝
• 阅读 207

GitHub Star 突破 25,000、集众多特性于一体的 2.3.0 版本重磅发布、Docker Hub Milvus 镜像下载量突破 1000 万……过去一年,Milvus 社区取得了很多激动人心的进展,而 Milvus 技术交流群作为众多开发者交流分享的重要阵地,今年的规模也突破了 5000 人。

我们将 2023 年所有 Milvus 技术交流群的聊天历史做了整理分析,得到了如下的一张词云图:

按照热度,排名前十的关键词依次为:版本、查询、内存、插入、配置、日志、集群、文档、 部署、删除。今天,我们先来扒一扒前五大关键词!

01.「版本」:AIGC 需求的快速变化,催生了向量数据库的超高速迭代

对于“版本”成为热度排名第一的关键词,我开始是有点意外的,仔细一想似乎也在情理之中。2023年,是 AIGC 大爆发的一年,LLM 展现出了强大的分析、推理、归纳、总结能力。但是,由于缺乏最新的和特定领域的训练数据,大模型“幻觉”成为困扰 AIGC 开发者的一大难题。随着 RAG 技术的发展,LLM 和向量数据库这对黄金搭档开始走到一起,成为幻觉问题的通用处理范式。

Milvus 作为全球最流行的开源向量数据库,大量 AIGC 开发者涌入 Milvus 社区,给 Milvus 提出了诸多新的需求。在无数开发者的期盼下,Milvus 去年一共发布了 20 个版本,支持了 partition key、Dynamic Schema、Array Data Type 等大量 AIGC开发者需要的功能,关于版本的讨论几乎一整年没有停过。搜索“版本”这个关键词,常见的讨论有:

  • “Milvus后面有版本可以无限创建 collection 么”
  • “新版本的 Milvus 里的一个 collection 支持多个 vector 嘛?”
  • “新版本我记得好像可以单独 load partion 到内存里,不需要 load collection”

大家对于版本的讨论,主要集中在 Milvus 各个版本的 feature 和 bugfix 情况。Milvus 的小版本平均 2 周发布一个,大版本平均半年发布一个。单 2.2.x 系列的版本,目前已经有 16 个了,所以完全记下每个版本的 feature 和 bugfix 几乎不太可能。但是,所有版本的发布信息都会在 Milvus 官网的 Releases 页面(https://milvus.io/docs/release_notes.md)非常清晰地展示,包括大家最关心的 feature、bugfix,同时还有一些 improvement 以及 breaking change。如果你关心这些 feature 或者 bugfix 的实现,还可以去看背后的 pr。强烈建议,大家有任何关于版本的疑问,都可以去 Releases 页面寻找所需信息。

除了常见的 feature 和 bugfix 讨论外,针对“版本”这个关键词,我们也经常遇到如下提问:

  • “请问现在哪个版本最好用?”
  • “这个版本大概什么时候发布呢?”

关于版本选择,Milvus 目前仍处于快速迭代的阶段,建议大家尽量使用最新的版本。因为新版本不仅包含了之前所有已知问题的 bugfix,还拥有最全的功能、最好的性能。很多问题,尤其是 Milvus 早期的 bug,都可以通过升级到最新版本解决。

至于新版本的发布时间,则取决于 Milvus 的功能研发和测试进度,比较难给出准确时间,可以参考 Milvus 官网的 Roadmap 页面

02.「查询」:始于向量,不止于向量

Milvus 作为一个向量数据库,查询是用户使用频率最高的操作。最早的时候,Milvus 只支持纯向量的 Top-K 近似查询,随着社区的壮大,用户对于查询能力的需求也逐渐增多。

目前,Milvus 最新版本(v2.3.4)已经支持了非常丰富的查询能力,Top-K 近似查询、表达式过滤近似查询、RANGE 近似查询。在火热的 RAG 应用浪潮中,不少开发者还提出让 Milvus 支持关键词检索的需求,在这里也给大家剧透一下,这个功能将在 Milvus 的下一个大版本(v2.4.0)上线。

对于“查询”这一关键词,大家讨论的话题比较多样化,例如:

  • “200 万特征用的是 FLAT,查询 Top100 大概每次耗时 500 多毫秒,这个性能正常么?”
  • “Milvus 在查询之前怎么实现属性过滤呢?”
  • “请问查询的索引能设置为阈值吗?例如,返回相似度大于等于 0.85 的结果。”
  • “Milvus 支持使用类似传统 Elasticsearch的BM25 查询算法吗?目前在 rag,单纯向量检索片段效果不好,想着增加传统的关键字检索。如果 Milvus 支持 bm25 的话,就不需要再单独建 es 了,也不需要数据写 2 份了.”

这些多样化的讨论,实际上可以总结为 3 类:查询性能、查询功能、查询原理。

性能问题,社区之前有一篇文章《浅谈如何优化 Milvus 性能》,已经讲了比较详尽的分析方法,八成的性能问题,都可以通过文章里的方法去优化。

功能方面,想要了解某项查询能力是否具备,最简单的方法就是打开 Milvus 官网的 User Guide —> Search and Query 页面寻找,上面有十分详尽的接口说明和代码示例。如果在官网上面没有搜到的查询功能,建议先去 Milvus 的 GiHub issue 里面搜索相应关键词,看一下社区里面有没有类似的需求,以及这类需求是否有其他解决方案。如果在 issue 里面也没有找到,不妨创建一个类别为 feature request 的 issue,把你想要的查询功能详细描述出来,并说明其对应的使用场景,说不定下个版本里面就有你要的功能了。

最后,一些小伙伴如果想更深入地了解 Milvus 里面某些查询功能的实现原理,以下三处一般会有你需要的内容:

  • Milvus Enhancement Proposals (MEPs)
  • Zilliz B 站视频
  • Zilliz 公众号 Milvus Tech Zone 专栏

03.「内存」:省一点,再省一点

“partition key 也是很多人在一个集合里吗?可不可以一个人一个人的释放占用的内存”

“因为我在插入数据到时候报错内存不足,所以我想算一下需要多少。”

“标量是不是不建议 load 内存中,感觉几十 G 的内存几下就用完了。”

“数据如果一直都有写入,那 load 后的集合会越来越占内存,不知道其他人有没有什么好的方案能在内存和查询速度上做出平衡?”

以上是关于“内存”关键词的相关讨论。向量作为一种新的数据类型,天然具有维度高的属性。为了获取优异性能,向量被读取到内存做计算也成了通用的做法。但是,随着数据规模的增加,内存余量逐渐见底,在全行业都在降本增效的时代,如何省更多内存成为了所有开发者的心声。当然,直至今日,Milvus 对于内存的优化也从未停止,社区的目标永远都是“省一点,再省一点”。

但是,作为一个数据库系统,不可能同时满足内存低、性能好、精度高的条件。一般都需要牺牲性能或者精度,来换取内存开销的降低。可以用下面这张图来表示目前常见降低内存使用的方法:

前文也提到,2023 是 AIGC 应用爆发的一年,在做 LLM 应用开发的过程中,大家能直观感受到大模型的响应时间是比较慢的,一般是几百毫秒到几秒。在这样的背景下,开发者对 Milvus 的性能要求一般不会特别苛刻,在几百毫秒内返回便能满足大多数场景。所以,MMap 和 DiskANN 是大多数 AIGC 开发者节省内存的更优选。

04.「插入」:丝滑入库是影响开发体验的第一步

除了查询之外,“插入”应该是使用最多的一个数据库操作,所有后续的工作也是建立在数据成功插入的基础上。丝滑的入库体验,是影响开发体验的第一步,也是至关重要的一步。

Milvus 社区对于“插入”的讨论,主要集中在数据插入的实践经验上:

  • “插入的速度怎么优化啊?”
  • “分批插入数据,是每一批 collection.flush(),还是最后再 collection.flush()?”
  • “这个设置成主键之后,为什么还可以继续重复插入相同的值?”

关于这一关键词,和大家分享 3 点关于数据插入的心得:

  1. 批量插入快于单条插入,文件导入(bulk_insert)快于批量插入(insert)。普通 insert 接口,数据入库需要经过 Proxy—>MQ—>DataNode—Object Storage 这样较长的一套流程。但是文件导入 bulk_insert 的入库流程仅为:Proxy—>DataNode—Object Storage,可以减少耗时较长的 MQ 环节。对于大批量(千万以上)的数据导入,强烈建议使用 bulk_insert 接口。
  1. 插入数据时,不要每一批都调用 flush()接口,Milvus 内部会定期调 flush() 接口,所有数据都插入完成之后,再调用一次 flush 即可。插入数据后,频繁调用 flush,会产生大量碎的 segment 文件,为系统带来较大的 compaction 压力。
  1. Milvus 用 insert 接口做数据插入时,不会做主键去重,如果希望主键去重,可以使用 upsert 接口。但是,由于 upsert 内部多做了一次 query 操作,插入性能会比 insert 更差。

05.「配置」:半数使用问题是配置问题

  • “Milvus 配置用户名密码进行校验,需要怎么开启呢?”
  • “这个服务通过 k8s 已经起来的,我在不想关闭他的情况下应该怎么修改配置文件呢?”
  • “ etcd 如果独立部署的话,这块儿的配置有推荐的参考值吗?”

Milvus 作为一个分布式向量数据库,除了自身有较多的功能模块,同时还依赖对象存储、消息队列、etcd 等第三方组件。为了保证 Milvus 集群在不同应用场景中均能发挥出最佳性能,Milvus 暴露了大量的配置参数。但是面对这些配置参数,“调哪个”“怎么调”“调多大” 成了很多用户所遇到的难题。可以说,如果把 Milvus 的配置参数调明白了,Milvus 一半的使用问题都解决了。

关于“调哪个”的问题,我认为是配置这三个问题中最难的,不同的使用场景下,要调的参数都是不同的。就拿性能优化这件事情来说,搜索性能优化的参数和插入性能优化的参数肯定是不一样的,这就比较依赖于实际使用的经验。Zilliz(Milvus 原厂)的官方公众号上,有很多 Milvus 的资深研发同学和 Milvus 深度用户写的技术文章,里面提到了很多配置调优经验,大家可以将这块的资源充分利用起来。

此外,Milvus 社区里会经常举办一些线上线下的交流活动,每次活动都会邀请一些社区大牛来做分享,这种当面直接的交流机会,大家也可以去把握一下。总之,社区的交流通道还是非常开放的,只要你主动一点,总是能找到解决方案的。

当我们知道“调哪个”以后,后面的问题就好办很多。关于“怎么调”,《稍作修改便能更丝滑?Milvus 的秘密藏不住了》里详细讲了对于不同的部署方式,如何去修改配置参数。同时补充一点,Milvus 从 2.3.0 版本开始,就开始支持动态调整参数,具体操作方法参考:https://milvus.io/docs/dynamic_config.md,以后再也不用担心改完配置需要重启才生效了。

最后,对于“调多大”,一般在解决“调哪个”问题的时候就会顺带知道“调多大”的答案。假使不知道也没关系,Milvus 官网的“Configure Milvus”章节花了大量篇幅介绍每个配置参数的含义,配合动态更新的能力,可以快速进行测试做一些验证,然后找出最佳的参数值。

未完待续……

本文由mdnice多平台发布

点赞
收藏
评论区
推荐文章
当前中国网络视频广告联盟之现状
随着互联网在中国的迅速发展,不仅在软件方面取得了突破,在网络环境方面也取得了巨大进步。网上流媒体的优势也逐渐显现。自06年中国视频技术取得突破性进展以来,网络事业在国外得到了高度重视。在经历了06年的互联网发展之后,中国视频广告逐渐进入人们的视野。CHINAV(2007中国网络视频广告年度盛会)于4月26日在北京嘉里中心饭店隆重召开,来自中国网络和视频行业的
Stella981 Stella981
3年前
BeetlSQL 3.0.10 发布,多数据源分布式sega事务支持
本次发布主要增加了分布式Sega事务支持,适合多数据源按照社区建议,修改了了springboot的yml配置方式修改了@Jackson和@UpdateTime,本来是用来作为例子,但社区开发者提供了较好的完整实现增加Sega支持<dependency<groupIdcom.ibeetl</gr
Wesley13 Wesley13
3年前
2017 PHP 全球开发者大会 本周末即将启幕
PHP全球开发者大会是DevLink开发者社区主办的,一年一度的PHP开发者节日。今年,我们首站活动依然选择在北京开始,具体时间计划为6月上旬,仍然是与去年一样的规模与质量。
Stella981 Stella981
3年前
Milvus新版本v0.11.0重磅发布!
!(https://oscimg.oschina.net/oscnet/e79ad7dfa1f7459eae3b72bea63a7da2.jpg)发布时间:20201016版本兼容!(https://oscimg.oschina.net/os
Wesley13 Wesley13
3年前
0304 直播报名|向量索引算法介绍与优化
想做向量搜索确又不知道该选择什么索引吗?怎么样可以又快又准又最不占内存?相信这个问题很多Milvus用户都非常想知道。然而,在不同的应用场景下该如何选择一种合适的索引并非显而易见,需要在资源使用量、查询效率、查询召回率等多个指标中做权衡。!(https://oscimg.oschina.net/
Stella981 Stella981
3年前
Jenkins中文社区技术交流
Jenkins中文社区技术交流20191204展开function\_typeof(e){returne&&"undefined"!typeofSymbol&&e.constructorSymbol?"symbol":typeofe;}!function(e){if(
Wesley13 Wesley13
3年前
14天1000+大集群滚动升级,银行柜台竟然毫无感觉
摘要:中国工商银行联合华为完成了金融行业首家规模超千台的Hadoop集群大版本滚动升级,为期两周的升级过程突破了传统的离线升级模式,真正实现了业务无感的平滑滚动升级。2020年8月27日,中国工商银行联合华为完成了金融行业首家规模超千台的Hadoop集群大版本滚动升级,为期两周的升级过程突破了传统的离线升级模式,真正实现了业务无感的平滑滚动升
司马炎 司马炎
2年前
【MindStudio训练营第一季】MindStudio 可视化AI应用开发体验随笔
MindStudioMindStudio提供一站式AI开发环境,依靠工具与性能调优,采用插件化扩展机制,打造高效、便捷的全流程开发工具链。目前最新版本是5.0.RC3,发布于2022年20月,对应的昇腾社区版本:6.0.RC1。新增众多特性,
助力618-Y的混沌实践之路 | 京东云技术团队
近三年,京东混沌工程作为大促三道防线之一,在促前扮演了非常重要的角色,而Y的混沌实践,也在不断地进行升级,主要从应用覆盖率和场景覆盖率两个方向明确提升方向,并在集团混沌大赛上取得了一系列突破和成绩。
数据堂 数据堂
1年前
大模型数据集:突破边界,探索未来
一、引言随着人工智能技术的快速发展,大型预训练模型如GPT4、BERT等在自然语言处理领域取得了显著的成功。这些大模型背后的关键之一是庞大的数据集,为模型提供了丰富的知识和信息。本文将探讨大模型数据集的突破边界以及未来发展趋势。二、大模型数据集的突破边界数
京东云开发者 京东云开发者
5个月前
何必舍近求远 计算工厂帮你一键部署DeepSeek云主机
DeepSeek作为人工智能领域的新星,正以其惊人的性能和广泛的应用场景迅速走红。其火爆的现状得益于多项关键技术的突破,如强化学习框架的采用、高效的显存占用优化以及极低的训练成本。这些技术优势使得DeepSeek在性能上超越了众多同类模型,同时保持了极高的
公孝
公孝
Lv1
靠到我身边,我的拥抱很适合你。
文章
3
粉丝
0
获赞
0