50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

京东分布式向量检索系统 vearch 如何一招搞定海量特征存储与计算?

  • 2019-12-02
  • 本文字数:3642 字

    阅读完需:约 12 分钟

京东分布式向量检索系统vearch如何一招搞定海量特征存储与计算?

随着算法能力的不断提升,图像、音视频和文本等均可通过机器学习算法抽取大量的特征应用于业务场景,例如以图搜图、听音识曲、视频相似度检测、人脸识别等,不过目前尚无一套完整的系统解决方案来满足高维特征向量的存储与计算。

为了让 AI 算法领域的专家能够更专注于算法,京东零售技术架构团队基于现有的部分业务及应用场景抽象提炼了一个服务于 AI 时代的基础向量检索系统——vearch,它可以完整地解决海量特征的存储与计算,为文本、图像、音视频检索等应用提供统一的基础设施。

项目背景

vearch 是一个分布式向量搜索系统,可用来存储、计算海量的特征向量,为 AI 领域的向量检索提供基础系统支撑与保障。该系统能够广泛地应用于图像, 音视频和自然语言处理等各个机器学习领域。


vearch 基于 Facebook AI 研究院开源的 Faiss 实现,但 Faiss 本身只是一个能够单机运行的支持各种向量检索模型的机器学习算法基础库,不支持分布式、实时索引和检索,同时也不支持标量字段的存储和索引等等。


因此结合在实际应用中的需求,我们在 faiss 的基础上研发了 vearch,提供了类似 ElasticSearch 的灵活易用的 RESTFul API,可以方便地对表结构及数据进行管理查询。

系统架构

vearch 的向量检索系统架构如图 1 所示,主要由 Master,Router 和 Partition Server(PS)三部分组成:


  • Master: Master 对整个 vearch 集群的资源进行调度和管理,这些资源包括数据分片的位置,数据 schema 的结构,并对集群中各节点的状态进行监控和分片的调度,保证整个集群中所有节点的负载相对均衡,对集群水平拓展提供可靠支持。

  • Router: 是一个无状态且轻量的路由模块,负责对用户所有的请求进行解析路由和转发。对入参提供校验,给用户提供基于 Restful 数据管理的接口,及权限控制,因为是分布式系统, router 还负责将各个 partition 上的结果集进行合并二次排序筛选。

  • Partition Server(PS): 是存储及重要的计算节点,可以支持上百个实例, 一个 partition server 上可以存在多个 partition,这些 partition 之间互相独立由 master + router 进行统一管理查询。partition server 的内核采用 gamma 引擎进行索引及数据存储。


数据模型主要包含空间、文档、向量、标量。一个空间可以创建多个文档,一个文档由多个字段组成,每个字段可以是向量类型,也可以是标量类型(int, float, string 等等)。


图1


vearch 基于 raft 协议实现数据多副本存储,保证系统数据的高可用,同时可以很方便地支持横向弹性扩展。为满足实际业务场景需要,vearch 还提供了算法插件服务模块,通过选择默认的 VGG,Resnet 或自定义算法模型等,能够提供一键式端到端的图像检索,视频流智能监控等业务应用场景的完整解决方案。


考虑到开发及可扩展性,vearch 中的 Master,Router 和 PS 均采用 GO 语言编写。出于性能考虑,核心的存储检索引擎 gamma 基于 faiss 采用 c++语言实现。在 faiss 基础上,gamma 引擎根据实际业务场景需要,做了一系列的定制开发。主要包括:


1、 高性能,无锁向量实时索引,支持 add, delete 和 update 三种基本更新操作


2、 支持文档中常规标量字段的存储和索引


3、 支持按标量字段的范围过滤查询


4、 支持文档多标签的实时存储及检索


5、通过 IVFPQ 等量化检索模型召回后,提供了召回 TopN 原始向量的精排功能


6、支持原始向量,标量,向量索引和标量索引的持久化


7、支持单文档多向量的存储及检索


8、支持基本的交,标量字段范围过滤等组合查询语法


为了提升检索召回及排序的质量,在实际应用场景中,通过量化,Hash 及图等检索模型召回后得到的 TopN 候选集,需要进一步比对计算其原始向量距离。因此在实际生产环境及成熟产品应用中,庞大原始向量的存储是不能逃避开的一个问题。


vearch 提供了自主研发的内存+磁盘混合存储和 rocksdb 两种存储方式。向量存储有其固有的特点,比如定长,所占空间比较大,连续存储的话可以压缩,另外也可以考虑分桶聚簇存储,基于以上种种特点,自定义存储结构可优化空间比较大。


具体在使用时,原始向量的存储可根据性能及使用条件限制,配置选择常见的全内存,内存+磁盘混合存储,以及 rocksdb 三种存储方式。内存+磁盘混合存储和 rocksdb 均可通过参数配置使用内存的大小,在查询性能和实际使用的机器资源情况之间做出合理的 tradeoff。


  • 全内存储方式:低延迟,可存储数据规模受限于实际内存可使用量

  • 向量顺序存储

  • 定期 dump 增量到文件

  • 内存+磁盘混合存储方式: 延迟不敏感,可存储数据量受限于磁盘总量,远大于内存版

  • 向量先缓存到内存

  • 定时异步批量刷盘

  • Mmap 磁盘文件到内存

  • Rocksdb

  • Key 是向量 ID(自增),value 是向量数据


vearch 允许用户自定义 table 中的字段,它支持以下 6 种字段类型,其中 vector 类型表示该字段是一个向量字段:1、vector(向量);2、string;3、int;4、long;5、float;6、double


图2


标量字段范围查询


该功能实现了等值过滤以及范围过滤,可以缩小以及锁定搜索范围,避免对不符合要求的向量冗余计算,从而使得性能有较显著的提升,其主要采用高性能 B 树实现。具体 API 应用示例:“filter”: [ “category”: {“eq”: 655}, “price”: {“gt”: 10, “lt”: 20} ]


插件服务


vearch 提供了一种可以将图片自动转化成向量数据的服务,使用者可以实现即插即用,其主要架构图如下:


图3


功能列表


vearch 目前事支持的主要功能有如表 1 所述:


表1


更多可参考:https://vearch.readthedocs.io/zh_CN/latest/


实现过程


如下 GIF 图清晰地展示了 vearch 的总体用法及其内部结构。 vearch 的使用主要分为三个步骤。 首先,创建数据库和空间,然后导入数据,最后可以搜索自己的数据集。


图4


性能表现


图 5 是在我们的测试环境基于图片提取的 512 维 VGG 特征做出的测试结果,从量化索引召回 top 100 后,对召回 top100 的原始向量都做了进一步精排,从图中我们发现,对 VGG 十亿量级的数据量,使用了数据过滤后,QPS 平均提升了 4-5 倍,极大地降低了计算的复杂度。


图5


召回率测试结果


在我们的测试环境中采用默认参数配置(ncentroids=256, nprobe=20, nsubvector=64, nbits_per_idx=8),召回测试详情如下图所示。基于 vgg1M(100 万)特征向量数据集召回率平均在 0.95 以上,在 vgg10M(1000 万)特征向量数据集的数据量召回率也在 0.92 以上。


表2


应用场景和案例


vearch 主要的应用场景有:


  • 图像/视频/音频检索和去重;

  • 安防领域视频智能监控

  • 文本相似度计算;

  • 推荐,搜索召回及排序;


案例 1:人脸识别底层特征向量存储、计算引擎,如图 6 所示,目前已经应用到京东之家业务中,为业务过滤掉了 40%左右的不良数据。


图6


案例 2:vearch 可提供实时在线相似性图片搜索服务,比如在电商平台可以用来搜同款。详细流程如图 7 所示:


图7


案例 3:海量重复图片去重,在目前已经应用到了京东重复铺货检测,如图 8 所示:


图8


案例 4:可应用于搜索,推荐系统。比如视频网站推荐系统将各种特征 embedding 成向量后,利用向量相似性检索做召回,召回模型细节如图 9 所示:


图9


使用方法


使用方法非常简单,只需两步就可以轻松搭起一个分布式向量检索系统:



搭建完成后,直接使用类似 ES 的 RESTFul API:


https://github.com/vearch/vearch/blob/master/docs/APILowLevel.md


即可建库建表,插入文档向量,直接开始使用了。


除此之外,目前算法插件服务模块还支持视频流的人脸智能监控。欢迎感兴趣的算法工程师们贡献更多,更丰富,更智能的算法插件。


项目信息:


目前 vearch 项目已经开源:


https://github.com/vearch/vearch,


项目设计的相关论文“The Design and Implementation of a Real Time Visual Search System on JD E-commerce Platform”已被 International ACM Middleware Conference 接收发表。

未来规划

  • 集成更多更丰富的检索模型,比如 HNSW,IMI,OPQ 等等,更进一步提升召回率;

  • 规划设计 vearch 部署环境实时管理前端界面需;

  • 更丰富的算法插件,比如文本语义 embedding 算法插件,音频 embedding 算法插件。


参考资料:


  1. vearch website:https://vearch.github.io/

  2. Github: https://github.com/vearch/vearch

  3. Paper link:https://arxiv.org/abs/1908.07389

  4. Document:

  5. 中文: https://vearch.readthedocs.io/zh_CN/latest

  6. 英文: https://vearch.readthedocs.io/en/latest

  7. 开源社区邮件联系方式:vearch-maintainers@groups.io.

  8. Slack: https://vearchwrokspace.slack.com

作者简介

张丽颖,CNCF 官方大使,京东技术架构部产品经理,主要负责分布式文件存储,以及分布式检索服务; 开源项目 ChubaoFS 和 vearch 的 contributor。


李洁,京东技术架构部副总监(技术专家),拥有近十年一线互联网公司系统架构研发经验,擅长大数据量、高并发、高性能分布式系统的设计开发,尤其在图片、视频、文本搜索的系统架构方面有丰富的设计开发及研究经验。开源项目 vearch 的 maintainer。


2019-12-02 14:2612471

评论

发布
暂无评论
发现更多内容

工业管理 项目管理经验总结(7)

万里无云万里天

项目管理 工业 工厂运维

《小K闪电课堂》:秒懂 KaiwuDB/KWDB 数据库技术内核

KaiwuDB

数据库 数据库教程

哈尔滨三级等保:数字时代的安全 “定海神针

等保测评

分布式架构基础

天翼云开发者社区

中间件 计算

YashanDB数据库用户管理及权限分配实用方法

数据库砖家

看到了 SQL 中 order by 3 desc,1 直接愣了一下。知道原因后,直接想骂人!

左诗右码

【 HarmonyOS 】错误描述:The certificate has expired! 鸿蒙证书过期如何解决?

GeorgeGcs

qData 数据中台【开源版】发布 1.0.4 版本,全面升级数据清洗与资产管理能力

千桐科技

数据中台 qData 开源数据中台 Java数据中台 千数平台

大庆企业选等保测评公司,牢记这 5 个筛选要点

等保测评

R8疑难杂症分析实战:外联优化设计缺陷引起的崩溃|得物技术

得物技术

android 性能优化 编译器 编译器 加速器 编程语言

欧洲APP开发的完整流程

北京木奇移动技术有限公司

APP开发流程 软件外包开发 海外APP开发

分布式系统-秒杀

天翼云开发者社区

大数据 安全 中间件

Google 发布了Nano Banana编写最佳提示词,提供了10种场景

程序员海军

AI 设计 AIGC Nano Banana Gemini 2.5

基于 Amazon Q Developer+Remote MCP 访问 Amazon Redshift

亚马逊云科技 (Amazon Web Services)

kafka数据同步到mysql

天翼云开发者社区

数据库复制

节能LED显示技术:点亮未来

Dylan

广告 LED LED display LED显示屏 LED屏幕

存算分离架构重塑政务数据治理:福建大数据基于 Databend 构建一体化公共数据平台的实践探索

Databend

聊聊 Webpack 那些安全事儿:打包风险与防护小技巧

权说安全

Karma无线安全工具:探针响应与网络诱捕技术解析

qife122

网络安全 渗透测试

2025 HarmonyOS创新赛线上解读会成功举办 助力开发者把握生态机遇

最新动态

技术文章

qife122

人工智能 openai

黑龙江等保测评安全技术服务:打造数字时代安全堡垒的秘密武器

等保测评

大数据-85 Spark Action 操作详解:从 Collect 到存储的全景解析

武子康

Java 大数据 flink spark 分布式

海外APP的开发流程

北京木奇移动技术有限公司

软件外包公司 APP外包公司 海外APP

让天下没有难查的故障:2025 阿里云 AI 原生编程挑战赛正式启动

阿里云云效

阿里云 云原生 云原生编程挑战赛

面向对象设计与设计模式实战指南

qife122

设计模式 低层设计

崩了!Nacos升级到3.0竟不能用了,哭死!

王磊

YashanDB数据库用户权限安全策略及最佳实践

数据库砖家

【HarmonyOS】一步解决弹框集成-快速弹框QuickDialog使用详解

GeorgeGcs

数据分析与AI丨产品全生命周期的数据分析与AI提效案例

Altair RapidMiner

人工智能 AI 数据分析 制造业 RapidMiner

破人才瓶颈、促生态共赢 ——2025 鸿蒙生态大会人才发展分论坛亮点纷呈

最新动态

京东分布式向量检索系统vearch如何一招搞定海量特征存储与计算?_AI&大模型_李洁_InfoQ精选文章