十问ByteHouse:如何基于ClickHouse玩转向量检索?

更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群

向量检索被广泛使用于以图搜图、内容推荐以及大模型推理等场景。随着业务升级与 AI 技术的广泛使用,用户期望处理的向量数据规模越来越大,对向量数据库产品的稳定性、易用性与性能需求也越来越高。为此火山引擎 ByteHouse 团队基于社区 ClickHouse 进行技术演进,提出了全新的向量检索功能设计思路,满足业务对向量检索稳定性与性能方面的需求。

在 12 月 28-29 日上海 QCon 全球软件开发大会上,火山引擎 ByteHouse 技术专家田昕晖将分享基于《云原生数仓 ByteHouse 构建高性能向量检索技术实践》话题。以下是 InfoQ 与火山引擎 ByteHouse 的十问十答,将提前为您揭秘一款 OLAP 引擎将如何设计高性能向量检索能力。

1、InfoQ:能否详细介绍一下向量检索在大型语言模型(LLM)中的具体应用?例如,它是如何改进语言理解和数据处理的?

火山引擎 ByteHouse :简单来说,基于向量检索技术以及向量数据库可以为 LLM 提供一个外置的记忆单元,通过提供与问题及历史答案相关联的内容,协助 LLM 返回更准确的答案。

LLM 受限于训练时数据集的时效与规模,面对细分领域知识与最新内容的查询很难给出准确的答案。基于检索增强生成技术(Retrieval-augmented generation, 简称 RAG),即基于问题和历史答案,从外部知识库中检索相似结果作为 prompts 提供给 LLM ,以获取到更准确答案的方式是一种主要的解决方法,而向量检索就是 RAG 常用的技术。

由于向量检索主要是基于语义相似度来检索结果,搜索的对象是向量信息,相比传统的文本检索来说,结果更为准确,速度也更快。另一方面,LLM 的 prompts 会有一定的长度限制,过长的 prompts 也会增加 LLM 的处理时间,通过文本切块 + 向量检索技术,可以在 prompts 受限的情况下得到更为准确的结果,在保证准确度的同时也能确保较低的 LLM 响应延时。

2、InfoQ:在 LLM 的背景下,向量检索技术面临哪些独特的挑战和机遇?

火山引擎 ByteHouse :这里与向量数据库的挑战结合来谈。

一个是易用性与易维护性,当前已经发展出了很多的向量检索算法与向量数据库,是否能快速接入 LLM 调用链路中,以及如何维护,如何与现有的组件协作,如何去做数据传输,都会是用户选择会考虑的因素。

一个是成本,很多 ANN 算法库都需要将结构常驻内存来提升计算性能,这在数据规模较大的场景无疑会提升用户的使用成本,如何在不降低准确度、不增加显著的构建开销的情况下做到更低的资源占用,也是向量检索技术与向量数据库当前面临的一个挑战。

LLM 的出现对于向量检索与向量数据库无疑是一个非常好的发展机会,后续随着 LLM 以及大量其他非结构化数据检索需求的增加,向量检索与向量数据库会得到更多的关注,成为一种常规技术。

3、InfoQ:您如何看待当前向量数据库技术的发展趋势?

火山引擎 ByteHouse :当前向量数据库的发展主要是两种思路,一种是从 0 开始建议一个专用的向量数据库,一种是基于现有数据库系统扩展支持向量检索功能。专用向量数据库大致的方向是以向量数据为中心设计存储结构与相应的读写机制,并且简化查询执行的调用链路,使用比较固定的 pattern 来执行查询,降低查询语句的解析开销。

采用这种方案的一些系统也在逐渐去提供更为复杂的数据管理机制,比如读写分离、WAL、数据分区等等。查询上也在不断去支持更多的数据类型,更为直观的查询 API 等。这些其实都是在补齐和传统数据库使用上的一些差别,在向一个完整数据库系统去演进。

而另一种扩展现有数据库的思路,则是基于现有数据库的数据管理机制以及查询执行链路中去添加向量检索技术的支持,包括向量索引的支持,查询执行的优化等等,是在一个现有框架的基础上,支持了一种新的计算模式。

在我看来,两种思路目前正在互相借鉴向一个中间状态去演化,各自有比较适用的场景。后续可能也会出现一种新的模块化向量检索的路线,即一个封装好基本向量数据存储与向量检索查询执行的模块以一种嵌入式的方式接入到不同系统中,以支持多样化的向量检索使用需求。

4、InfoQ:相比于传统的数据库技术,向量数据库在处理大规模数据方面有哪些明显的优势?

火山引擎 ByteHouse :向量数据库的核心是通过支持一种或多种的向量索引,来加速向量检索相关的计算。此类索引通常会维护一个额外的内部结构来组织所有的向量数据,以降低检索时比较计算的执行次数。

传统数据库通常只能以全行扫描 + 相似度计算的方式来执行向量检索,而基于向量索引,可以通过很少的计算来快速得到近似的结果,因此性能会远好于传统数据库的处理方式,一般会有几十到几百倍的性能提升。

5、InfoQ:您能详细介绍一下 ByteHouse 在设计向量检索功能时的核心创新点吗?在向量检索技术的开发和实施过程中,您遇到了哪些主要的挑战?

火山引擎 ByteHouse :主要的创新点在于:

支持较为常用的 HNSW、IVFPQ、IVFPQFastScan 等多种类型的向量索引,以应对不同的应用使用场景。同时对于这些向量索引的操作是基于 ByteHouse 现有的索引操作命令进行的扩展,对用户来说几乎没有学习成本,易于上手。

基于向量检索的应用特点,我们也对执行链路进行了重建,结合索引缓存、存储层过滤等机制,性能可以达到市场上主流向量数据库的标准。

主要挑战在于:ByteHouse 列存结构存在的读放大问题,这部分我们通过向量检索计算前置以及存储层过滤等方式进行了优化,显著降低了 IO 开销。

新写入数据以及服务重启会存在冷读的问题,导致性能波动。为此我们引入索引的 preload 机制,索引构建后自动载入缓存,同时支持对过期索引自动淘汰,避免多余的资源占用

索引构建会消耗比较多的资源,为了降低构建操作对正常查询的性能影响,我们引入针对构建操作的资源控制策略,允许用户基于使用场景动态控制索引构建使用的资源。

6、InfoQ:ByteHouse 是如何解决向量检索中的性能和稳定性问题的?在开发过程中,有哪些关键的技术创新或策略调整?

火山引擎 ByteHouse :如上面提到的,ByteHouse 中支持向量检索最大的问题是列存带来的读放大问题,这个我们在 query 执行以及数据读取层都做了对应的优化,目标就是减少不必要的数据读取操作。向量检索功能在 ByteHouse 的 HaMergeTree 以及 HaUniqueMergeTree 上都有支持,基于两种引擎的可靠性方案来提供稳定性保障。

在开发过程中,我们发现 ByteHouse 现有的基于索引的执行链路对于向量检索类型负载来说,会有很多额外的读取和计算开销。为此,我们基于此类应用的特性重建了执行链路,移除了不必要的计算操作,结合行粒度的计算层与存储层的过滤下推,极大减少了原有链路的开销,达到了几十倍的性能提升。

7、InfoQ:您能提供一些 ByteHouse 在性能方面相较于其他解决方案的具体数据或案例吗?

火山引擎 ByteHouse :我们最近基于业界最新的 VectorDBBench 测试工具做了测试,在 cohere 1M 标准测试数据集上,recall 95 以上的情况,可以取得 2600+ 的 QPS,p99 时延在 15ms 左右。对比多种专用向量数据库,性能也有明显的优势。

8、InfoQ:在实际应用中,ByteHouse 的向量检索功能有哪些显著的成功案例?

火山引擎 ByteHouse :在最近的一个以图搜图的场景中,6 亿数据有写入的情况下,只使用 ES 1/5 的资源,全量搜索 top1000 可以做到 200ms 左右的延迟,top10 可以做到 30ms 以内的延迟,相比其他竞品有几倍的性能优势。

9、InfoQ:您如何看待向量检索技术在未来的发展前景?了解到有许多在向量数据库创业的企业,您觉得这个方向如何?

火山引擎 ByteHouse :向量检索技术会成为一种数据库领域的常规技术,会有越来越多的传统数据库支持向量检索的技术,也会有更多更易用性能更强的向量检索算法以及算法库出现。这个方向目前还处于较早期的阶段,产品形态也还在探索,有很多的机会和可能性。

10、InfoQ:您认为接下来在这个领域将会出现哪些新的创新点或挑战?

火山引擎 ByteHouse :一个是检索算法与索引方面的创新,包括自适应参数调优,early termination、与 filter 的结合、向量压缩、分布式检索结构等方面

一个是系统方面的创新,包括实时向量检索、嵌入式向量检索模块、索引推荐、数据隐私保护等方面

更多精彩,欢迎关注上海 QCon 全球软件开发大会

点击跳转ByteHouse了解更多

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

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

相关文章

Java智慧工地数字化云平台源码(SaaS模式)

智慧工地是智慧城市理念在建筑工程行业的具体体现,智慧工地解决方案是建立在高度信息化基础上一种支持人事物全面感知、施工技术全面智能、工作互通互联、信息协同共享、决策科学分析、风险智慧预控的新型信息化手段。围绕人、机、料、法、环等关键要素,…

056:vue工具 --- CSS在线格式化

第056个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下,本专栏提供行之有效的源代码示例和信息点介绍,做到灵活运用。 (1)提供vue2的一些基本操作:安装、引用,模板使…

SimpleFOC核心代码,解决Id一直为正 无法控为0

注:(我这个是用simulink仿真做的SimpleFOC,因此代码是m语言的,在stm32可以改成C的,这两种基本差不多,搭建的SimpleFOC仿真下载链接:https://download.csdn.net/download/qq_35239859/88642607?…

虚幻学习笔记18—C++委托(多播)和事件

一、前言 委托分单播和多播,多播就是可以绑定多个回调函数,然后一次性执行。这样也可以理解为啥多播没有返回值,多个回调函数执行后返回哪一个都是问题啊。而事件呢官方官方文档说法是“对于事件而言,只有定义事件的类才能调用 Br…

用python编写一个对列表降序排列的方法。 定义函数des(),该函数接收一个整数列表作为参数。 在函数内部,实现降序排序。

编写一个对列表降序排列的方法。 定义函数des(),该函数接收一个整数列表作为参数。 在函数内部,实现降序排序。 然后,返回排序后的列表。 最后,在函数外部打印排序后的列表。 以下是一个使用Python编写的对列表降序排列的方法的示…

后端笔记之gin框架学习

gin框架学习 1. 使用脚手架搭建gin框架2. 应用框架3. 路由管理4.自定义中间件的使用5. 通过中间件设置路由权限校验1. 自定义校验2. 配置跨域3. 使用jwt进行tokn校验 6. 接口入参获取和绑定2. 参数校验3. protobuf 7. 集成mysql数据库1. gorm使用 1. 使用脚手架搭建gin框架 gi…

MapReduce和Yarn部署+入门

看的黑马视频记的笔记 目录 1.入门知识点 分布式计算: 概念: 两种模式: MapReduce(分布式计算,分散汇总模式) 概念 执行原理 注: Yarn(分布式资源调度) 概述 Y…

VS Code配置Go语言开发环境

提示:首先这是一个新型语言,最好把vscode更新到最新版。 1:去官网下载Go语言编译器,之后配置到系统环境中,能看到版本就行。 2:创建一个文件夹,存放go的工具文件,我的在D:\GoFile\G…

【数据分析之Numpy】Numpy中复制函数numpy.repeat()与numpy.tile()的使用方法及区别

一、简介 numpy.repeat()与numpy.tile()都是Numpy库中的复制函数,用于将数组中的元素重复指定的次数。 numpy.repeat()函数接受三个参数:要重复的数组、重复的次数和重复的轴。 numpy.tile()函数接受两个参数:要重复的数组和重复的次数。 二…

elasticsearch简单相关操作

查看索引 GET _cat/indices //获取所有的index GET account发送post不带id新建数据 POST user/_doc/ {"name":"bobby","compamy":"imooc" }如果post带id就和put一样的操作了, put是不允许不带id的 post _create 没有就…

【前端】vscode 相关插件

一 插件: 01、ESLint 用来识别并检查ECMAScript/JavaScript 代码的工具 02、Prettier 用来格式化代码,如.js、.vue、css等都可以进行格式化 03、Vetur 用来识别并高亮vue语法 04、EditorConfig 用来设置vscode的编程行为 二、安装依赖 01、…

干涉光学测试导论

1.用于光学测试的基本干涉仪 2。相移干涉术 3。专业光学测试 4。长波长干涉术 5。非球面试验 6。表面微观结构的测量 7。绝对测量 8。结束语 第1部分-光学测试用基本干涉仪 (1)双光束干涉 (2)菲佐干涉仪和特维曼-格林干涉仪 (3)测试平面和球面的基本技术 (4)球面的基本…

maui中实现加载更多 RefreshView跟ListView(2)

一个类似商品例表的下拉效果&#xff1a; 代码 新增个类为商品商体类 public class ProductItem{public string ImageSource { get; set; }public string ProductName { get; set; }public string Price { get; set; }}界面代码&#xff1a; <?xml version"1.0&quo…

通过费用流中的贪心来保证计数正确性:P4249剪刀石头布

https://vj.imken.moe/contest/598718#problem/K 三元环数量尽量多&#xff0c;也就是非三元环数量尽可能少。非三元环的充要条件是存在一个点度数为2&#xff0c;而每条边可以给一个点一个度数&#xff0c;然后就变成了经典网络流问题。 但是&#xff0c;对于一个点&#xf…

计算机与自动医疗检查仓:技术革新引领医疗未来

计算机与自动医疗检查仓&#xff1a;技术革新引领医疗未来 一、引言 随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;和机器学习&#xff08;ML&#xff09;已经成为现代社会不可或缺的一部分。它们的应用领域日益扩展&#xff0c;从简单的日常任务到复杂…

数据结构--图

树具有灵活性&#xff0c;并且存在许多不同的树的应用&#xff0c;但是就树本身而言有一定的局限性&#xff0c;树只能表示层次关系&#xff0c;比如父子关系。而其他的比如兄弟关系只能够间接表示。 推广--- 图 图形结构中&#xff0c;数据元素之间的关系是任意的。 一、图…

基于ssm的航班订票管理系统论文

摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对航班订票信息管理混乱&#xff0c;出错率高&#xff0c;信息安全性差…

【PID学习笔记10】PID公式分析

写在前面 前面已经将控制系统的基础知识点过了一遍&#xff0c;从本节开始&#xff0c;将正式学习PID控制的相关知识&#xff0c;将会从基本的PID公式概念解释&#xff0c;再基于matlab仿真介绍十几种数字式PID的基本概念。本文重点讲解PID的经典公式。 一、连续与离散的概念…

基于PaddleOCR一键搭建文字识别和身份证识别web api接口

前言 通过这篇文章【基于PaddleOCR的DBNet神经网络实现全网最快最准的身份证识别模型】开发的身份证识别模型&#xff0c;还无法进行部署应用&#xff0c;这篇文章就已经开发好的代码如何部署&#xff0c;并如何通过api的接口进行访问进行讲解。 项目部署 以windows系统为例&…

Python 爬虫之简单的爬虫(三)

爬取动态网页&#xff08;上&#xff09; 文章目录 爬取动态网页&#xff08;上&#xff09;前言一、大致内容二、基本思路三、代码编写1.引入库2.加载网页数据3.获取指定数据 总结 前言 之前的两篇写的是爬取静态网页的内容&#xff0c;比较简单。接下来呢给大家讲一下如何去…