写点什么

京东分布式向量检索系统 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:2612343

评论

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

YashanDB V23.4 LTS MySQL兼容性全方位增强

YashanDB

数据库

基于YOLOv8的无人机位置捕捉识别项目|完整源码数据集+PyQt5界面+完整训练流程+开箱即用!

申公豹

人工智能

ECDSA安全漏洞深度解析:从非ce泄露到密钥恢复实战

qife122

密码学 侧信道攻击

EEG-CLIP:通过自然语言描述学习脑电图表征

qife122

脑电图 零样本解码

最近Vibe Coding的经验总结

Immerse

经验 CODING VibeCodingf Vibe

自适应集群协作提升大语言模型医疗决策支持能力

qife122

人工智能 医疗决策支持

观测云基于 ToB/ToC 业务可观测最佳实践

观测云

可观测性

刘立明:以智能制造为方向 推动制造型企业的数字化转型

新消费日报

大数据-58 Kafka 消息发送全流程详解:序列化、分区策略与自定义实现

武子康

Java 大数据 kafka 分布式 消息队列

AppCenter iOS SDK 核心组件库

qife122

ios 日志收集

2025年7月文章一览

codists

Python

什么是 Operational Data Hub?它因何而生,又为何能够在当下成为技术共识?

tapdata

实时数据平台 实时数据同步 数据整合架构

消息重复消费+顺序性,分布式消息的终极难题?一线解决方案全解析!

我爱娃哈哈😍

消息队列 重复消费 顺序消费

Airtable 如何用 StarRocks 构建数据验证系统

StarRocks

数据分析 Airtable StarRocks 数据库 大数据 数据储存

Terraform Authoring Operations Professional 认证考试经验分享:从备考到实战全攻略

雪雷

Terraform 认证

RabbitMQ vs RocketMQ,消息堆积了怎么办?一线解决方案全解析!

我爱娃哈哈😍

RocketMQ 消息队列 消息堆积处理 Rabbit MQ

直播预告:我不是网红,可以 Build in Public 吗?丨RTE Dev Talk

声网

基于YOLOv8的多种水果种类识别项目|完整源码数据集+PyQt5界面+完整训练流程+开箱即用!

申公豹

人工智能

StarRocks vs ClickHouse:2025 年 OLAP 引擎终极对比指南

镜舟科技

数据分析 Clickhouse StarRocks 湖仓一体 OLAP 引擎

自动化规划工具优化工单分配效率

qife122

混合整数非线性规划 分支定界法

想在代码中验证sql的正确性?

量贩潮汐·WholesaleTide

sql

通过胜率理解偏好学习的理论与优化方法

qife122

机器学习 胜率优化

任务嵌入软注入技术超越基于提示的上下文学习

qife122

自然语言处理 任务嵌入

AI 调酒师上岗!接管酒吧吧台

阿里巴巴云原生

AI 调酒师上岗!接管酒吧吧台

阿里云云效

通义灵码

LED广告车屏幕整体解决方案

Dylan

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

从噪声数据中发现可解释的常微分方程

qife122

机器学习 常微分方程

如何选择优质漏洞赏金项目并赚取丰厚奖金

qife122

网络安全 漏洞赏金

HarmonyOS 5 应用拉起系列(一):应用与元服务互通方式

鸿蒙魔法师

鸿蒙 HarmonyOS ArkTS

YOLOv8手势识别项目实战-石头剪刀布实时检测系统

申公豹

人工智能

终结“安全裸奔”:腾讯iOA免费版掀起的中小企业安全革命

Undoom

腾讯iOA场景体验官

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