您当前的位置:首页 > 电脑百科 > 数据库 > 百科

抖音云原生向量数据库从“非主流”到“新常态”的演变

时间:2023-10-31 11:58:04  来源:微信公众号  作者:DataFunTalk

抖音云原生向量数据库从“非主流”到“新常态”的演变

一、向量数据库产生的背景

1、非结构化数据检索问题

结构化数据是指可以表示成二维表格的数据,它有明确固定的字段和类型。而非结构化数据是指不能表示成二维表格的数据,例如:文本、图片、视频。抖音集团的产品矩阵每天都会产生海量的数据,其中结构化数据只占一小部分,大部分数据都是非结构化数据,业界通常认为非结构化数据会占全部数据的80%,但是对于抖音集团的业务形态,非结构化数据的占比只会更高。如何利用好这些非结构化数据对我们产品功能的完善,业务效果的提升都至关重要。

抖音云原生向量数据库从“非主流”到“新常态”的演变

对非结构化数据的检索,以文本检索为例,传统上使用倒排索引,结合BM25,TF-IDF算法进行。这种方法有一些问题:

  • 文本泛化能力、语义检索能力不足。
  • 基于切词结果,难以推广到图片视频等多模态场景。
  • 数据持续增长时性能不足。

但是,现在有了深度学习,这产生了向量表示法,通过语言模型(如doc2vec、bert、LLM等),将文本转换为向量,从而将非结构化数据检索问题转化为向量近似检索问题。

抖音云原生向量数据库从“非主流”到“新常态”的演变

2、向量检索的核心概念

向量检索是从一堆向量里找到和某个给定向量相似的一批向量,这里有三个问题需要明确:

  • 如何衡量向量间的相似性?通常使用的度量方式有欧氏距离、内积和余弦距离。
  • 需要检索出多少个结果?通常指定一个整数topK。
  • 如何评估检索效果?需要平衡检索精度和检索效率两个指标

通常受限于算力和响应时间,向量检索得到的是近似最优结果。常见的做法可以分为三类(三类也可结合进行):

  • 近似最近邻算法(ANN)。借助辅助结构进行剪枝,以加快检索速度,常见的有:HNSW,IVF。
  • 量化算法。通过降低相关性计算开销来加速检索过程,如PQ算法,标量量化。
  • 实现上的优化。SIMD硬件指令集加速方案;内存编排:提高cache命中率。

抖音集团实践:

  • 在ANN算法方面,我们对开源HNSW进行了优化,并自主研发了IVF算法,在保持检索精度的同时提高了性能;
  • 在量化方面,除了PQ量化外,我们还自主研发了一套标量量化算法,支持int16、int8和int4量化,实现了单张T4显卡(2亿候选向量)的检索;
  • 在SIMD和内存编排等实现层面的优化上也做了大量的工作。

抖音云原生向量数据库从“非主流”到“新常态”的演变

3、从检索算法到向量数据库

把向量检索的这些功能整合起来,就形成了向量数据库。

向量数据库的接口包括存储和检索向量。在功能划分上,包含存储、检索和分析。同时,作为在线服务,高可用、高性能和易用性都要具备。

完成这些后,一个具备核心向量检索功能的向量数据库就诞生了。这是一个存算一体的向量数据库。

抖音云原生向量数据库从“非主流”到“新常态”的演变

二、向量数据库的技术演进

1、向量标量混合检索

当向量数据库推向业务场景时,我们发现,向量数据通常与结构化数据配合使用。例如,在将文档表示为向量的同时,还需要存储文档所属的部门,以方便在检索时进行权限过滤。这类需求可以抽象为使用与向量相关的结构化数据进行过滤。

业界对于这种过滤需求通常有两种解决方案:

  • 后过滤。将topK的结果扩大一定倍数,检索出更多的向量,然后用结构化数据做过滤,留下topK个。对于向量检索和DSL过滤结果的重合较少的情况,可能会出现召回结果不足topK的情况。因此,这种方法适用于结构化过滤掉的比例较低,向量召回结果比例较高的场景。
  • 先过滤。先使用DSL过滤数据集,然后在结果中进行向量检索。这种方案适用于DSL过滤结果较少的场景;如果结果较大的话,性能会有明显的下降。

业界通常结合两种方案,对检索任务进行编排,通过分析数据分布,来决定使用哪种方案。但是,随着数据量的增加,仍然可能会出现两种检索链路性能都不好的情况。

抖音集团实践:为解决这一问题,技术团队研发了DSL定向引擎,支持在检索过程中同时进行向量检索和DSL过滤(结构化过滤)。该引擎具有以下特点:

  • 高性能:因为在进行DSL过滤时,只需提取部分向量进行相似度计算,这会打断内存连续性,从而降低向量检索的性能。因此,DSL过滤判断的开销必须足够低,要求它远低于向量检索的开销,以确保在线检索性能。
  • 逻辑完备:DSL语法可以支持根据场景和用户的不同定制相应的检索过滤条件,以支持业务在线检索。
  • 按需终止:如果在向量检索和过滤过程中遍历了足够多的节点,可以保证检索效果,则应尽快退出该检索过程。
  • 执行计划优化:根据DSL过滤结果预估结合向量分布情况,综合决策要执行的检索链路。

除了DSL定向引擎之外,我们还实现了子索引拆分、自适应精度调节和在线多路索引归并等多种定制化能力,打造了一整套向量检索工具库。

抖音云原生向量数据库从“非主流”到“新常态”的演变

2、存算一体升级为存算分离

尽管功能逐渐完备,但我们向量数据库在初期是基于存算一体(存储和计算都在同一台机器上)的架构实现的,但在推广过程中,这种架构在使用上的一些问题也逐渐显现出来。比如在文档检索的场景中,一部分文档质量较高,需要高精度的召回,全局的文档作为补充,我们还需要区分部门内和部门外的文档列表来分开展示。这就要求在同一份向量数据上产生不同的可检索集、不同精度的索引以及不同的候选集。

在存算一体框架下,为了避免影响线上检索流程,我们使用少量线程异步地完成索引的重建流程。为适配数据分布的变化,这个索引还要定期重建。另外,在有些业务场景中,需要使用不同候选、不同精度的检索策略。如果为每种策略都建立一套索引,这会进一步放大索引构建的资源消耗,导致索引构建效率低、还会影响在线服务稳定性。

为此,我们逐步开展了存算分离的架构升级工作。

我们的存算分离架构,主要分成三个部分:

  • 向量存储。用户将他们的向量存储在向量存储中。
  • 批式构建。批式构建集群自动调度向量索引的构建流程。在此过程中,会筛选候选集,根据不同的精度要求适配不同的参数,构建相应的索引,然后通过P2P管道分发给在线的多副本检索服务。
  • 在线检索服务。负责实时在线检索。

这种设计除了解决一份向量多个索引、支持多个场景的问题,还带来以下优势:

  • 节省了索引构建资源,一次构建,多处分发。
  • 加快索引构建,因为存算一体中,为了不影响实时检索性能,构建过程只能使用少量线程(不能使CPU满负荷运行),而存算分离后,就没有这个限制,可以将CPU满负荷运行。
  • 在线检索服务稳定性得到明显提升,因为构建过程不再影响在线检索服务。
  • 对自动调参特别友好。基于这套存算分离的框架,我们搭建了一套自动调参的工具库,支持用户在写入向量数据后、在索引构建前以及上线后,持续对索引的构建参数和检索参数进行调优。

抖音云原生向量数据库从“非主流”到“新常态”的演变

3、流式更新

随着对时效性要求较高的业务接入,如何有效的提升新内容的检索效率,成为业务关注的重点。例如,在文档检索场景中,如果一篇文档刚写完,或者新授权了一个文档,用户需要等待半个小时才能检索到,这在业务上是无法接受的。为了解决这个问题,我们开发了流式更新能力。

加入了流式更新能力的索引构建过程分为两个部分。

  • 优化批式加流式的更新事件产生过程。在新版本的索引上线之前,有一个批式构建过程,这个过程需要一些时间。在构建过程中,仍有新的数据更新事件出现,这需要在批式版本更新完成时,将流式更新事件订阅回拨到批式更新开始时的事件时间。等到追平这个延迟后,再继续流式更新事件。
  • 对索引更新的改造。为了实时更新索引,我们对向量索引进行了并发安全的改造,包括HNSW和IVF索引。在提供在线检索服务的同时,我们基本可以实现向量的增删改查。这里单独把DSL索引提出来,是因为DSL索引对数据一致性的要求比较高,一条DSL更新操作写入的字段较多,数据一致性安全和更新并发性安全会明显影响在线检索性能。因此,我们采用了双buf的方案,写入操作只发生在更新buf上,检索Buf支持无锁的检索流程,整体的双buf方案也能做到秒级的更新延迟。

4、云原生转变

随着抖音集团产品矩阵中的产品越来越多接入向量数据库,为每个业务都搭建一套存算分离的框架的成本较高,包括部署成本、运维成本和硬件成本。为解决这一问题,我们对存算分离的框架进行了进一步迭代。

  • 多租户编排改造

①向量存储部分改造为向量存储集群。

②索引构建部分改造为索引构建集群。

③在线检索服务改造成支持多租户形式。

我们的资源调度模块可以自动化的去拉取数据开始索引构建任务,然后分发给在线多租户检索服务。改造后的在线检索服务支持多路索引,这能进一步降低在线服务的开销。在初期,为了保证服务稳定性,我们的在线检索服务编排是手动进行的。

抖音云原生向量数据库从“非主流”到“新常态”的演变

  • 自动化调度

随着业务增长,索引体积越来越大,为了保证多租户服务的稳定性。优化手动编排,人工选择集群不合理等问题。我们开发了自动化调度框架。

对在线检索服务编排的改造,主要采用slot化的方式。一个slot是索引的一个最小调度单元。通过索引元信息管理调度服务会根据在线检索服务配额和实时调用流量,自动调入调出slot。

为了配合自动化调度方案的上线,我们开发了很多辅助模块。例如,索引的流量感知模块,用于为调度服务提供信息,以尽快响应整个索引的流量变化。再比如索引配额管理系统,避免有的索引流量突增,影响整个在线检索集群的稳定性。

其中一个关键的模块是索引的精确计价系统。为了降低整体在线服务的计算成本,我们会将一些小内存的、低请求量的索引调度到同一个实例上。此时,如何统计和分摊成本就很关键了。我们实现了一个精确到时钟周期的开销监控,以进行服务的成本统计和分摊。

抖音云原生向量数据库从“非主流”到“新常态”的演变

5、火山引擎向量数据库VikingDB技术全景

随着大语言模型的浪潮兴起,向量数据库的商业价值也慢慢凸显出来。我们决定在火山引擎上线我们的云原生向量数据库,提供和抖音集团内部向量数据库完全一致的服务,也会把内部探索和优化的成果同步到这个产品上。

它整体的产品结构如下图所示。整个产品基于火山引擎的云基础设施,提供经过我们深度打磨和优化的各个引擎,提供从多模态数据写入,到向量生成,再到在线检索,以及上线后的弹性调度和监控的一整套全链路解决方案。

抖音云原生向量数据库从“非主流”到“新常态”的演变

用户接入时,通过我们的多语言SDK或http API写入自己的非结构化数据。然后,使用查询分析工具对数据进行管理和分析。进行简单配置后,即可自动化调度。从非结构化数据到向量生产的pipeline,都通过平台自动化调度实现。数据写入完成后,还支持在索引上线前进行自动调参,上线后进行流式更新,以及持续的自动调参以优化整体在线检索效果和资源成本。在在线检索阶段,支持整体服务的按需自适应弹性调度。从数据写入到在线检索的各个阶段,有全链路的监控和告警,以保证在线服务的稳定性。基于这套产品,我们预期会在大语言模型的智能问答、智能搜索、智能推荐广告、版权去重等场景下展开广泛应用。

这套云原生向量数据库有以下几个关键优势。

  • 极致性能:内置多种火山引擎内部自研索引算法,支持内部多个百亿库,百亿级向量检索规模,检索性能在10ms内。
  • 实时性:支持向量数据实时写入、实时更新,支持实时索引、自动索引。
  • 稳定高效:存算分离架构,单数据多场景,节约计算资源,提高在线稳定性,保证高可用性。
  • 多场景最佳实践:20+内部业务,多个百亿级别库检索实践,内部多个大模型场景的落地实践,例如:飞书问答,飞书文档,搜索中台、电商搜索等。

抖音云原生向量数据库从“非主流”到“新常态”的演变

三、向量数据库的应用展望

介绍完我们在云原生向量数据库上的技术和优势后,这一节对向量数据库做一些展望。

1、对大语言模型(LLM)的能力补充

在大语言模型中,prompt是给大语言模型的输入。prompt的信息含量会影响最终回答的质量。然而,由于算法原理和计算能力的限制,prompt的长度是有限制的。无论是多轮调校,还是个性化问答的感知,还是特定领域的知识灌入,都需要更长的prompt。其次,由于训练样本的限制,大语言模型的时效性存在缺陷,只能知道训练数据截止时输入的信息,对于需要时效性回答的场景需要支持手段。对于这个问题,向量数据库可以在一定程度上解决。

抖音云原生向量数据库从“非主流”到“新常态”的演变

  • 补充大模型长期记忆。对于多轮调校和个性化回答,把调校过程和用户的问答结果都通过文本编码写入向量数据库中,然后在用户提问的过程中,把问题转化为向量,在向量数据库中查找长期记忆去回顾历史,找到和当前问题最相近的历史调校结果和用户自己的问答,灌入大语言模型的context中优化整个回答的质量。
  • 补充特定领域知识。可以在向量数据库中灌入领域知识。在用户提问的时候,提前把相关的文本信息检索出来,灌入大模型的context中,去优化大语言模型在专业领域的回答效果。
  • 优化大模型的时效性问题。比如实时热点新闻,可以通过流式更新能力,把实时信息写入向量数据库中。在用户提问实时热点问题时,通过向量数据库把热点信息检索出来,放到大语言模型的上下文中去优化回答效果。

抖音云原生向量数据库从“非主流”到“新常态”的演变

2、大语言模型(LLM)潜在的安全解决方案

大语言模型除了prompt长度限制外,另一个突出问题是数据安全问题。例如,支付行业建议大家在支付场景谨慎使用ChatGPT。而在互联网行业,很多公司也禁用了chatGPT,这都是出于安全角度考虑。

目前,在安全方面有两个关注点:

第一,用户的提问会被记录下来,这可能导致问题被泄露。

第二,A用户的提问可能被作为训练数据训练模型,导致其他用户B在使用时获得A用户提问时提供的隐私信息。这些问题预期可以通过控制问答数据的使用方式来解决。

但是,另一类问题从大语言模型的机制上就难以解决。大语言模型中包含的信息越多,回答质量就越好。理论上,我们在训练大语言模型的时候,或者优化它的时候,希望它具有全局所有的信息。然而,回归到业务场景,企业内部可能会有密级比较高的文档,或者说不同人对信息的权限是不一样的。如果大语言模型拥有了全局的信息,也就包含了高密级的信息,那么没有权限的用户就可能通过大语言模型的问答来获取自己权限以外的信息。使用向量数据库后,这一问题就可以大大缓解。我们可以通过向量数据库的管理机制,制定分层权限的知识库体系。这样,每个用户在提问时,只能从自己有权限的知识库中检索信息,并将检索到的信息作为context来优化当前这轮回答。

抖音云原生向量数据库从“非主流”到“新常态”的演变

最后,基于向量数据库在非结构化数据检索方面的能力,我们甚至整个行业都认为,向量数据库将成为整个大模型生态的基础设施,支撑大模型在业界的推广和应用。



Tags:向量数据库   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
向量数据库落地实践
本文基于京东内部向量数据库vearch进行实践。Vearch 是对大规模深度学习向量进行高性能相似搜索的弹性分布式系统。详见: https://github.com/vearch/zh_docs/blob/v3.3.X/do...【详细内容】
2024-04-03  Search: 向量数据库  点击:(4)  评论:(0)  加入收藏
简易百科之什么是向量数据库
随着大数据时代的到来,数据存储和处理成为了一个重要的问题。传统的关系型数据库已经无法满足一些场景的需求,例如大规模高维数据的处理和分析。在这样的背景下,向量数据库应运...【详细内容】
2024-01-15  Search: 向量数据库  点击:(166)  评论:(0)  加入收藏
腾讯云把向量数据库“卷”到哪一步了?
“不是我不明白,这世界变化快”,崔健在20世纪写下的这句歌词,放在刚刚过去的2023年,也同样适用。技术风向的变化之快,让不少人感到惊讶,向量数据库这一年的潮起潮落,就是一个典型的...【详细内容】
2024-01-14  Search: 向量数据库  点击:(65)  评论:(0)  加入收藏
纯向量数据库和向量插件都有局限,那未来发展有其他方向吗?
作者 | 张颖峰导读:向量数据库的争议差不多一年了,但我们一直缺少一篇能透彻讲解向量数据库相关问题的文章,这导致在这个领域的讨论一直没有得到充分的澄清。在这篇文章中,我们将...【详细内容】
2024-01-11  Search: 向量数据库  点击:(13)  评论:(0)  加入收藏
探秘向量数据库:从原理到商业应用的旅程
当我们谈及数据库技术,大部分人的第一反应可能是传统的关系型数据库,如MySQL、Oracle或SQL Server。这些数据库技术凭借其成熟稳定的关系型数据模型,已经在企业级应用中占据了...【详细内容】
2023-12-28  Search: 向量数据库  点击:(111)  评论:(0)  加入收藏
一文了解托管在亚马逊云科技的向量数据库MyScale
MyScale是一款完全托管于亚马逊云科技,支持SQL的高效向量数据库。MyScale的优势在于,它在提供与专用向量数据库相匹敌甚至优于的性能的同时,还支持完整的SQL语法。以下内容,将阐...【详细内容】
2023-12-28  Search: 向量数据库  点击:(97)  评论:(0)  加入收藏
如何评估向量数据库
导语:没有通用的“最 佳”向量数据库——选择取决于您的需求。评估可扩展性、功能性、性能以及与用例的兼容性至关重要。在当今数据驱动的世界里,非结构化数据的指...【详细内容】
2023-12-26  Search: 向量数据库  点击:(109)  评论:(0)  加入收藏
解读向量数据库
不论是RAG,还是Agent,几乎每个LLM 驱动的应用程序都可能会用到向量数据库。那么,向量数据库是什么?与传统数据库有何不同? 又如何选择向量数据库呢? 本文是老码农关于向量数据库的...【详细内容】
2023-11-27  Search: 向量数据库  点击:(133)  评论:(0)  加入收藏
初识向量数据库与pgvector实践
随着大语言模型的兴起,向量数据库正愈发受到人们的关注。作为对向量数据库的一名小白,近期简单对这一新技术方向做了些了解,特分享给大家。 1. 大火的向量数据库 1).什么是向...【详细内容】
2023-11-17  Search: 向量数据库  点击:(208)  评论:(0)  加入收藏
国内首个向量数据库标准发布
科技日报北京11月15日电 (记者都芃)15日,中国信通院联合腾讯云计算(北京)有限责任公司、中移(苏州)软件技术有限公司等多家企业共同编制的、国内首个向量数据库标准正式发布,...【详细内容】
2023-11-16  Search: 向量数据库  点击:(210)  评论:(0)  加入收藏
▌简易百科推荐
向量数据库落地实践
本文基于京东内部向量数据库vearch进行实践。Vearch 是对大规模深度学习向量进行高性能相似搜索的弹性分布式系统。详见: https://github.com/vearch/zh_docs/blob/v3.3.X/do...【详细内容】
2024-04-03  京东云开发者    Tags:向量数据库   点击:(4)  评论:(0)  加入收藏
原来 SQL 函数是可以内联的!
介绍在某些情况下,SQL 函数(即指定LANGUAGE SQL)会将其函数体内联到调用它的查询中,而不是直接调用。这可以带来显著的性能提升,因为函数体可以暴露给调用查询的规划器,从而规划器...【详细内容】
2024-04-03  红石PG  微信公众号  Tags:SQL 函数   点击:(3)  评论:(0)  加入收藏
如何正确选择NoSQL数据库
译者 | 陈峻审校 | 重楼Allied Market Research最近发布的一份报告指出,业界对于NoSQL数据库的需求正在持续上升。2022年,全球NoSQL市场的销售额已达73亿美元,预计到2032年将达...【详细内容】
2024-03-28    51CTO  Tags:NoSQL   点击:(13)  评论:(0)  加入收藏
为什么数据库连接池不采用 IO 多路复用?
这是一个非常好的问题。IO多路复用被视为是非常好的性能助力器。但是一般我们在使用DB时,还是经常性采用c3p0,tomcat connection pool等技术来与DB连接,哪怕整个程序已经变成以...【详细内容】
2024-03-27  dbaplus社群    Tags:数据库连接池   点击:(12)  评论:(0)  加入收藏
八个常见的数据可视化错误以及如何避免它们
在当今以数据驱动为主导的世界里,清晰且具有洞察力的数据可视化至关重要。然而,在创建数据可视化时很容易犯错误,这可能导致对数据的错误解读。本文将探讨一些常见的糟糕数据可...【详细内容】
2024-03-26  DeepHub IMBA  微信公众号  Tags:数据可视化   点击:(6)  评论:(0)  加入收藏
到底有没有必要分库分表,如何考量的
关于是否需要进行分库分表,可以根据以下考量因素来决定: 数据量和负载:如果数据量巨大且负载压力较大,单一库单一表可能无法满足性能需求,考虑分库分表。 数据增长:预估数据增长...【详细内容】
2024-03-20  码上遇见你  微信公众号  Tags:分库分表   点击:(13)  评论:(0)  加入收藏
在 SQL 中写了 in 和 not in,技术总监说要炒了我……
WHY?IN 和 NOT IN 是比较常用的关键字,为什么要尽量避免呢?1、效率低项目中遇到这么个情况:t1表 和 t2表 都是150w条数据,600M的样子,都不算大。但是这样一句查询 ↓select *...【详细内容】
2024-03-18  dbaplus社群    Tags:SQL   点击:(5)  评论:(0)  加入收藏
应对慢SQL的致胜法宝:7大实例剖析+优化原则
大促备战,最大的隐患项之一就是慢SQL,对于服务平稳运行带来的破坏性最大,也是日常工作中经常带来整个应用抖动的最大隐患,在日常开发中如何避免出现慢SQL,出现了慢SQL应该按照什...【详细内容】
2024-03-14  京东云开发者    Tags:慢SQL   点击:(4)  评论:(0)  加入收藏
过去一年,我看到了数据库领域的十大发展趋势
作者 | 朱洁策划 | 李冬梅过去一年,行业信心跌至冰点2022 年中,红衫的一篇《适应与忍耐》的报告,对公司经营提出了预警,让各个公司保持现金流,重整团队,想办法增加盈利。这篇报告...【详细内容】
2024-03-12    InfoQ  Tags:数据库   点击:(26)  评论:(0)  加入收藏
SQL优化的七个方法,你会哪个?
一、插入数据优化 普通插入:在平时我们执行insert语句的时候,可能都是一条一条数据插入进去的,就像下面这样。INSERT INTO `department` VALUES(1, '研发部(RD)', &#39...【详细内容】
2024-03-07  程序员恰恰  微信公众号  Tags:SQL优化   点击:(19)  评论:(0)  加入收藏
站内最新
站内热门
站内头条