写点什么

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

评论

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

人民网《外企谈信心》| Denodo:加强数据管理技术合作 护航数字经济高质量发展

科技汇

可跨平台数据库多连管理工具:Navicat Premium 16 中文版

繁星

数据库管理 Navicat Premium 16

龙芯浏览器是哪家公司开发的?支持信创吗?

行云管家

浏览器 信创 国产化 龙芯浏览器

企业数智化领先实践,学得会!

用友BIP

数智化转型

「我在淘天做技术」1688的AIGC商业化落地实践探索

阿里技术

创意 校园招聘 1688 B端 AIGC

日常数字生活中,手机里的隐私信息是如何被保护的?

最新动态

ps插件:Camera Raw for Mac 16.0中文版

加油,小妞!

ps插件 Camera Raw 16

CodeWhisperer 的安装及体验

亚马逊云科技 (Amazon Web Services)

Java Python 人工智能 云上探索实验室 Amazon CodeWhisperer

Parallels Desktop 19 虚拟机 一键激活 无需关闭sip

繁星

pd虚拟机 Parallels Desktop 19 pd虚拟机 19

犀牛Rhino 8 for Mac(3D建模软件)

展初云

Mac 建模软件 Rhino 犀牛

Photoshop 2024 Mac最新资源 附 alpaca增效工具 可完美替代AI创成式填充

加油,小妞!

ps AI绘图 Photoshop 2024

深度开发者故事|API Explorer 助力教育行业 一站式搭建实验环境

云计算 软件开发 华为云

KubeEdge-Ianvs v0.2 发布:终身学习支持非结构化场景

华为云开发者联盟

云计算 云原生 后端 华为云 华为云开发者联盟

安全审计 合约审计:代币开发公司的一个关键方面

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 NFT开发

万界星空科技MES与WMS如何集成的?

万界星空科技

数字化转型 工业互联网 wms mes 3D仓库

生态合作升级!用友Fast by BIP On 阿里云战略发布

用友BIP

机械加工行业云MES解决方案

万界星空科技

工业互联网 制造业 生产管理系统 mes 机械臂

一站式IT统一运维管理平台有哪些?大家都在用哪个?

行云管家

IT运维 运维管理 统一运维

如何在嵌入式软件开发的过程中使用DevSecOps方法,提升开发效率与安全性

龙智—DevSecOps解决方案

DevOps DevSecOps

人人用数不用愁,动态数据脱敏为您解忧

华为云开发者联盟

数据库 大数据 华为云 数仓 华为云开发者联盟

数智化营销——企业会员私域运营的成功路径

用友BIP

数智营销

治理效率提升77%!揭秘基于DataLeap实时健康分的最佳实践

字节跳动数据平台

数据库 数据治理 数据安全 数据研发 企业号11月PK榜

After Effects 2024 for Mac(ae视频特效制作工具)

展初云

Mac软件 视频编辑 AE After Effects

MegEngine 9-10 双月报:新版本发布,AI 生态升级,不容错过!

MegEngineBot

深度学习 开发者 开源社区 MegEngine

PCB设计安规丨电气间隙与爬电距离要点

华秋电子

Docker打包前端vue代码推送镜像到远程仓库

javaNice

Java’ Docker 镜像

组态软件特点及工控组态软件应用

2D3D前端可视化开发

物联网 组态软件 PLC 工业控制系统 web组态编辑器

深入理解 Dubbo 协议的调试方法与实践

Apifox

Java 程序员 dubbo 后端 RPC

Kontakt Factory Library 2(Kontakt原厂音色库)

展初云

Mac软件 音色库 Kontakt

全网累计销量TOP 1的TCL超薄嵌入式冰箱,跟着选0出错!

科技热闻

数智化采购平台覆盖间接采购全流程,现金流优化的“小成大就”

用友BIP

数智采购

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