面向生成式 AI 的向量数据库:架构,性能与未来趋势

导读 向量数据库是高效处理和准确检索高维数据的基石,对于生成式 AI 技术而言至关重要。本文将分享向量数据库的架构设计和实现中的关键点。

主要分为五个方面:

  1. 向量数据库背景介绍

  2. Milvus 整体架构设计

  3. 性能的关键-索引

  4. 面向 AI 持续进化

01

向量数据库背景介绍

1. 什么是向量数据

我们经常会遇到一些非结构化数据,比如图片、视频、语音、文本等,它们通过模型被向量化,进而有助于模型的理解、训练和推理。向量,与数学中向量的概念相同,代表高维空间里面的一个点。

2. 什么是向量检索

向量检索,即给定场景向量,找出离场景向量最近的 k 条向量,也就是 KN 查询。常见的计算 metric 有 L2、IP、Cosine 等,这与产生向量的模型定义是有关系的。

3. 什么是向量数据库

向量数据库是一种专门为存储和查询等高维度向量数据而优化的数据库系统,类似于图数据库、时空数据库这种 specialized 数据库,针对特殊的数据进行特别的管理和优化。

4. 为什么需要向量数据库

在当前的大模型浪潮之前,向量数据库已经被很广泛地应用于推荐系统、风控、安防等系统中。现在仍然是一个重要的使用场景。

大模型浪潮以后,给数据库带来了机遇,向量数据库作为 RAG 中一个存储的记忆体可以帮助用户构建领域内相关的知识库,当向大模型提问时,可在向量数据库中找出相似的提问,来增强提示词,从而获得一个更加为用户量身定制的答案,增强了结果的相关性。

5. 什么是好的向量数据库

一个向量数据库优劣,主要从性能、扩展性、易用性、功能、可观测可运维、生态集成、故障恢复以及安全等方面进行衡量。

02

Milvus 整体架构设计

1. 云原生的分布式向量数据库

Milvus 有四个关键角色,以数据的流入作为参考,首先会经过 proxy 即接入层,主要负责请求检查和路由的功能;当插入请求经过 proxy 时进入到消息队列,被 data node 消费,把流式数据转化为持久化数据,放到对象存储上;批次的数据累积了一段时间以后交给 index node 支持索引的构建。

查询链路走向如下:经过 proxy 的路由后,交给 query node 做实际数据的检索,然后把 index node 构建好的索引加载上来,同时消费流里的数据来支持实时检索。

四个角色的设计可以带来很好的隔离性,首先建索引的过程非常吃 CPU 和内存资源,我们不希望该过程影响到查询的资源,因此要做读写分离。其次,基于这样的设计可以具备很好的扩展能力,比如扩展 query node,有效地去提升查询的性能,当 index 构建可能跟不上时候也可以去扩容 index。最后,可以做更灵活的流式数据处理,同时具备了流批数据的写入和查询的能力。

2. 实时性和性能的 trade off

Segment 是 Milvus 查询的一个最小单位,growing segment 保证数据的实时可见,但性能相对差;sealed segment 负责持久化数据的查询,性能较好。在后台通过 indexNode 构建索引替换 queryNode 上的数据,逐渐把 growing segment 替换成 sealed segment,从而达到实时性和性能比较好的 trade off。

3. 异步 compaction

我们会把小的 segment 合成大 segment 来加速查询。因为向量索引大小和性能不是完全呈线性变化的,比如数据是原来的四倍但性能没有任何变化,如果用 4 个小 segment 去查,对性能有比较大损害,所以会通过 compaction 操作把一些小的数据合并成大的,然后替换掉 query node 上一些小 segment 的数据。Compaction 同时合并 delete 数据做物理删除,这样对向量检索会更加友好。

4. 批量写入

用户对于数据的实时性要求不是非常高,或者更新删除不是很频繁的情况下,更加推荐采用批量写入,这样可以跳过消息队列的限制直接把数据插入到对象存储当中。我们还支持 Spark connector,外部数据源可以通过 Spark ETL 导入到 Milvus。

5. 全局索引

在查询的过程中默认会访问所有的 segment,然后把结果做 reduce,得到最终的结果。假如预先知道了数据的分布,就能够减少 segment 的访问,对于性能提升会有很大的帮助。常见的数据分布方式包括:

(1)根据不同的租户划分数据,租户 1 ~ 10 的数据落在这一部分上,租户 11 ~ 20 落在另外一部分上,查询时可跳过一些数据的查询。

(2)根据标量过滤条件划分数据,即定义标亮的 key,它的 ID 遵从某种分布,可以对分布做数据重组,当知道标量落在的范围时,可以做有效的剪枝。

(3)根据向量空间分布划分数据,把相似向量放在同一个 segment 上,从而有效地减少 segment 的访问。

针对所有自学遇到困难的同学们,我帮大家系统梳理大模型学习脉络,将这份 LLM大模型资料 分享出来:包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程等, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓

👉[CSDN大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)]()👈

6. Zilliz cloud :向量数据库

Zilliz cloud 是基于 Milvus 打造的一个全托管云服务。做好一款数据库产品有很多要求,除了 Milvus 数据库内核,还要实现监控报警、备份恢复、生态工具、网络控制、负载均衡等云平台的工作,这样才能打造一个完善的数据库服务。我们也对 Milvus 内核做了进一步的优化和升级。云上商业版的搜索引擎具备更好的索引性能。最近发布的 serverless 版本,能够帮助用户更低成本地使用向量数据库的服务。

03

性能的关键-索引

接下来介绍影响向量数据库性能的一个关键因素——向量索引。

1. 主流向量索引介绍

主流的向量索引包括四种,首先是传统的基于空间划分的树索引,在高维空间下会受到维度灾难的限制,性能比较差;哈希和量化是对于向量的压缩编码的不同方式,主流以量化居多,因为其精度比哈希更优;图索引通过近邻的连接关系达成迅速导航的效果,缺点是对资源的占用比较高,但精度和性能优异。

Knowhere 是 Milvus 的核心向量引擎,集成了多种向量检索算法,供用户自由选择。通过对外统一接口,可以很方便地集成第三方索引。

(1)FLAT

FLAT,即暴力搜索,其效率很低,但可以提供 100% 的准确率,在数据量较少时可能优于索引的性能。

(2)IVF

对数据做聚类的操作,分成若干个 bucket,在查询向量时查找若干个最近的 bucket,可有效避免搜索全量数据。

(3)Product quantization

乘积量化是一个非常常用的一种量化手段。下图右侧,常用的向量表示的 128 维数组,内存占用会达到 512 字节,内存占用是较大的,我们可以通过一些压缩手段,缩小内存占用。通过向量可将其分成若干个段,每 8 维分成一个段,总共 16 个段,每段通过聚类操作,分成 256 个聚类中心,这样通过一个字节的 ID 就可以表示原来的向量,从而有效压缩了向量的内存占用。查询时预计算 query 向量和每一段聚类中心的距离,这样就把距离计算转化成了查表操作,可有效地提升性能。

(4)HNSW

HNSW 是目前使用最为广泛的图索引。通过去找近邻的方式去对库里面的点进行连边,同时会引入一些长边,从而防止陷入局部最优。通过层次化结构快速定位,贪心式搜索逼近查询向量,找到最终结果。其缺点是内存占用比较高,且由于整个过程是一个流式的过程,没有 refine 的过程,因此可能出现图的连通性问题,这一问题可以通过补边操作进行弥补。

(5)DiskANN

DiskANN 是针对磁盘进行优化的索引,其本质也是一种图索引,不过是把图索引结构保存在磁盘上,在查询中按需读取,而不是持久化在内存中。在内存中保存的是 PQ 量化后的向量表示,内存占用非常少。在搜索过程中,内存中的 PQ 可以用作磁盘上保存的图索引的导航,从 PQ 队列中找出 PQ 距离最近的点,进而即可到磁盘对应位置找到向量和邻居。每次 IO 得到原始向量计算精确距离,同时得到邻居 id,用到内存中的 PQ 编码计算近似距离用于导航。

DiskANN 可以实现较低的内存占用,达到不错的性能和高精度。

(6)GPU cagra

Milvus 与 NVIDIA 团队合作,将 GPU cagra 索引集成到了 knowhere,充分利用 GPU 的并行计算能力加速索引构建和查询。在 HNSW 基础上,性能可进一步提升一至两个数量级。

2. 如何选择最合适的索引

通常,单一索引并不能解决全部问题,因此需要根据实际场景进行选择。选择主要基于三方面的考虑,第一个是 cost,即 CPU、GPU、内存等资源的情况;第二个是 accuracy,即精度,向量索引在大部分情况下都会有精度上的损失,因此要考虑对精度的需求;第三个是 performance,即性能。没有一个索引可以同时在三个方面都做到最优,因此需要做出取舍。

3. Zilliz cloud 商业版索引引擎-cardinal

Cardinal 对外展示的接口和 knowhere 基本一致,作为我们云上的一个索引引擎去提供服务。其优势主要包括:

  • 更加工程化的代码:比如用一些 C++ 模板去代替虚函数,或者用更高效的数据结构替换掉原来比较低效的数据结构。

  • 更加智能的参数学习:向量索引是近似的,因此参数设置上会有一些调整细化的空间,智能调整参数可以使得性能得到更好发挥。

  • 更加优异的数据存储布局:包括内存上的布局,磁盘上的布局,达到局部性更好,更有益于 CPU 的计算和内存访问,磁盘 IO。

  • 更加极致的 SIMD 优化:充分利用新硬件 SIMD 的指令,实现更好的效果。

04

面向 AI 持续优化

向量数据库作为一个单纯的向量检索工具已无法满足不断产生的新的需求,因此需要面向 AI 持续优化。

1. Filter search

带标量过滤条件的向量检索已经成为一个基本需求,比如在查询相似图片时可能会加上一些约束条件,如品牌是什么。

Milvus 支持多种 scalar index 加速标量过滤的效率。同时支持向量侧通过标量分布构建融合索引加速过滤。

2. Sparse vector

传统的基于向量的检索在很多场景上效果欠佳,这时 sparse vector 可能更具优势,其通过关键词匹配查找相关结果,具有更强的可解释性。另外,dense vector 往往是通过模型训练产生的向量,因此在 out of domain 数据上泛化能力可能并不理想,而 sparse vector 是通过关键词来查询,因此效果更优。

3. Hybrid search

Milvus 也支持了多向量多模态的存储和检索,可以从更多信息的维度召回和 rerank,相比于单纯使用 dense vector 或 sparse vector 会有更好的结果。

4. Grouping search

在向量维度的召回不一定能够满足用户需求,如下图,同一个 doc 可能分成了不同的 chunk,每一个 chunk 会被 embedding 成一个向量。做检索时如果只是向量视角可能不一定满足用户需求,用户可能希望能够在 doc 维度而不是 chunk 维度去做聚合的搜索,我们就可以找到用户最希望得到的这些 doc 的结果。

5. 更加易用

向量本身不是 source of the truth,真正的数据是其背后的非结构化数据,比如文本、图片。用户在使用向量数据库的过程中希望能有更加易用的模式,即直接去导入图片或者文本就可以直接在线下数据库上去做存储和检索。我们会在后续版本中提供调用第三方模型转向量的能力,使用户可以更加方便地使用非结构化数据。

读者福利:如果大家对大模型感兴趣,这套大模型学习资料一定对你有用

对于0基础小白入门:

如果你是零基础小白,想快速入门大模型是可以考虑的。

一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以根据这些资料规划好学习计划和方向。

包括:大模型学习线路汇总、学习阶段,大模型实战案例,大模型学习视频,人工智能、机器学习、大模型书籍PDF。带你从零基础系统性的学好大模型!

😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓
在这里插入图片描述

👉AI大模型学习路线汇总👈

大模型学习路线图,整体分为7个大的阶段:(全套教程文末领取哈)

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

👉大模型实战案例👈

光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉大模型视频和PDF合集👈

观看零基础学习书籍和视频,看书籍和视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
在这里插入图片描述
在这里插入图片描述

👉学会后的收获:👈

• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

👉获取方式:

😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓
在这里插入图片描述

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

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

相关文章

vulhub之zabbix

zabbix是一款服务器监控软件,其由server、agent、web等模块组成,其中web模块由PHP编写,用来显示数据库中的结果。能够监控各种网络参数以及服务器健康性和完整性。 zabbix的详细介绍: https://blog.csdn.net/wt334502157/article/details/117994107 zabbix latest.php S…

介绍一下如何生成随机数(c基础)

适合对象 c语言初学者 总结语言用色&#xff0c;个人强调用红色&#xff0c;注意为易错点&#xff0c;若有问题请告诉我谢谢。(建议通过目录观看)。一定要自己动手打代码。 rand函数 是生成随机数的函数&#xff0c;但实则是伪随机数。(即是同一个值) 格式 #include<st…

java案例6-1库存管理系统

【案例介绍】 1.任务描述 像商城和超市这样的地方&#xff0c;都需要有自己的库房&#xff0c;并且库房商品的库存变化有专人记录&#xff0c;这样才能保证商城和超市正常运转。 本例要求编写一个程序&#xff0c;模拟库存管理系统。该系统主要包括系统首页、商品入库、商品显示…

【嵌入式Linux】Linux设备树详解

设备树是是Linux中一种用于描述硬件配置的数据结构&#xff0c;它在系统启动时提供给内核&#xff0c;以便内核能够识别和配置硬件资源。设备树在嵌入式Linux系统中尤其重要&#xff0c;因为这些系统通常不具备标准的硬件配置&#xff0c;需要根据实际的硬件配置来动态配置内核…

逻辑卷建立

逻辑卷 lvm逻辑卷即为&#xff1a;logical volume manager逻辑管理卷&#xff0c;是linux系统下管理硬盘分区的一种机制&#xff0c;lvm适合于管理大型存储文件&#xff0c;用户可以动态的对磁盘进行扩容 作用 lvm&#xff1a;linux系统的一个重要的存储技术 不同的硬盘的不…

【持续更新】【NLP项目】【自然语言处理】智能聊天机器人——“有问必答”【Chatbot】第2章、《模式一:问候模式》

智能聊天机器人——“有问必答” 【注】该项目已开源&#xff0c;开源地址为&#xff1a;链接&#xff0c;代码更新可能不及时。 第2章、《模式一&#xff1a;问候模式》 主窗体的布局如下图所示&#xff1a; 共九种功能模式&#xff0c;最下方为关闭窗口按钮。 点击问候模…

时序预测 | Matlab基于TSA-LSTM-Attention被囊群优化算法优化长短期记忆网络融合注意力机制多变量多步时间序列预测

时序预测 | Matlab基于TSA-LSTM-Attention多变量多步预测 目录 时序预测 | Matlab基于TSA-LSTM-Attention多变量多步预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 时序预测 | Matlab基于TSA-LSTM-Attention被囊群优化算法优化长短期记忆网络融合注意力机制多变量多…

attributeerror: ‘FreeTypeFont‘ object has no attribute ‘getsize‘问题

我在训练yolov9的时候报错&#xff1a;attributeerror: ‘FreeTypeFont‘ object has no attribute ‘getsize‘。看过很多博客分析&#xff0c;都是说FreeTypeFont 字体的原因&#xff0c;其实真实问题出现yolo版本安装的Pillow库更新后&#xff0c;getsize&#xff08;&#…

三维天地:数字技术推动汽车产业实验室管理变革创新

近日,2024汽车技术与装备发展论坛在苏州成功召开。论坛以“共筑汽车产业新质生产力”为主题,聚焦新技术、新装备、新生态展开深入研讨,探索装备制造与汽车产业的融合发展路径。北京三维天地科技股份有限公司受邀参会。 在同期举办的检测认证高质量发展论坛上,三维天地咨询总监宫…

产品人必读书籍丨这本书告诉了我在AI时代如何成为一名顶级PM!!

《人工智能产品经理》——AI时代的PM修炼手册&#xff0c;这是一本不太工具的工具书。 很多人不了解产品经理需要具备的能力和素质。那么产品经理人工智能呢&#xff1f;这就更懵了&#xff0c;全是新词汇组成的新职业&#xff0c;到底怎样才算合格的人工智能产品经理&#x…

免费文件夹加密工具

1、去掉了miniExcel引用包&#xff0c;删除掉了excel配置文件 2、增加了密码登录功能&#xff0c;可以修改密码 3、使用sqlite3数据库来保存文件夹列表和用户密码&#xff0c;用户密码采用md5加盐 4、使用了 antdui来美化下界面 5、未解锁文件平不能被移除 其他还是保持老样…

第四届计算机图形学、人工智能与数据处理国际学术会议

在线投稿&#xff1a;学术会议-学术交流征稿-学术会议在线-艾思科蓝 第四届计算机图形学、人工智能与数据处理国际学术会议&#xff08;ICCAID 2024&#xff09;将于 2024年12月13日-15日在中国南昌举行。本次会议主要围绕“计算机图形学、人工智能与数据处理”的最新研究…

辐射发射测试新境界:深入解析TS-RadiMation套件多种操作方法(一)

TS-RadiMation套件作为辐射发射测试的得力助手&#xff0c;支持多种测试方法。 多频段手动模式电波暗室固定高度测试GTEM小室测试手动模式&#xff08;单频段&#xff09; 本文将详细介绍如何操作手动模式及手动模式&#xff08;单频段&#xff09;这两种模式&#xff0c;助您…

基于matlab的基于Tent混沌映射改进的麻雀搜索算法SSA优化BP神经网络预测

基于Tent混沌映射改进的麻雀搜索算法SSA优化BP神经网络预测 1 普通BP网络 代码如有需要&#xff0c;联系 596520206 %构建网络netnewff(inputn,outputn,hiddennum);% 网络参数net.trainParam.epochs100; % 训练次数net.trainParam.lr0.01; % 学习速…

[前端][基础]JavaScript

1&#xff0c;JavaScript简介 JavaScript 是一门跨平台、面向对象的脚本语言&#xff0c;而Java语言也是跨平台的、面向对象的语言&#xff0c;只不过Java是编译语言&#xff0c;是需要编译成字节码文件才能运行的&#xff1b;JavaScript是脚本语言&#xff0c;不需要编译&…

10:00面试,10:08就出来了,问的问题有点变态。。。

从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到8月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40%…

Java三大特性之一——多态(详细版)

文章目录 一、什么是多态二、重写2.1、重写的规则 三、多态的实现条件四、向上转型五、向下转型六、动态绑定七、使用多态的优缺点7.1、优点7.2、缺点 八、避免在构造方法中调用重写的方法 一、什么是多态 Java多态是面向对象编程的一个重要特性&#xff0c;它允许不同的对象对…

连锁餐饮企业-凡塔斯,用千里聆RPA搭建用户评价管理系统,提升门店服务满意度

凡塔斯是大型连锁餐饮企业昊澜餐饮集团旗下餐饮品牌&#xff0c;是牛排自助餐头部品牌&#xff0c;旗下拥有凡塔斯、百分好、食物链KING自助烤肉及餐饮人才商学院等多个行业知名品牌。 创立至今&#xff0c;集团管理门店已发展到福建、广东、江西、浙江等十多个省市&#xff0c…

设备状态监控一定要直观,可视化大屏最适合这个工作

一、引言 在现代工业生产和各类设施运行中&#xff0c;设备的稳定运行至关重要。为了确保设备能够高效、可靠地工作&#xff0c;及时了解设备的状态是关键。而设备状态监控一定要直观&#xff0c;只有这样才能让操作人员和管理人员迅速掌握设备的运行情况&#xff0c;及时发现…

xxe靶机实战

靶机地址&#xff1a;https://www.vulnhub.com/entry/xxe-lab-1,254/ 下载好后解压 直接拖拽.ovf格式的文件到虚拟机里 打开kali扫描主机,靶机开着或者后台运行就行 arp-scan -I eth0 -l 扫描出来目标靶机ip地址192.168.142.145 nmap扫描端口 nmap -A -sS -T4 -P- --min-rat…