已关闭
[RFC]: 支持IVF-RabitQ检索算法 #33
xiangjie10创建于  4月25日关闭于  6月17日
xiangjie10成员
4月25日 创建

提交提案之前,请先检索仓库内是否已有相同的提案,如已有请在同一提案中进行讨论。

需求背景

向量检索是大规模 AI 应用(如 RAG、推荐系统、图像检索、去重系统)的核心能力。随着业务数据量的增长,传统暴力检索已无法满足延迟和吞吐要求,工业界广泛采用近似最近邻搜索索引来加速检索。

IVF-RabitQ 是一种基于量化的高效 ANN 索引算法,在保持较高召回率的同时显著降低计算开销和内存占用。该算法在大规模向量检索场景下具有以下优势:

  • 低内存占用:通过量化压缩,大幅降低向量存储空间
  • 高检索速度:利用量化距离快速筛选候选,减少精确距离计算次数
  • 高召回率:结合重排序机制,在速度和精度间取得良好平衡
    当前 Index 组件缺少对 IVF-RabitQ 算法的支持,无法满足大规模向量检索场景的性能要求。因此,本 RFC 的目标是为 Index 组件引入 IVF-RabitQ 索引能力,使其能够高效支撑千万级向量检索场景。

提议方案

为 Index 组件增加 IVF-RabitQ 索引类型支持,具体包括:

索引构建阶段:

  • 原始高维向量归一化为单位向量;
  • 复用IVFFlat将所有向量划分为若干簇,每个向量归属最近簇心,生成倒排列表;
  • RaBitQ量化:对每个簇内向量,随机正交投影→计算与簇心的残差→生成8bit分段紧凑打包的二进制编码;
  • 预计算其他常量;
  • 存储簇心、倒排列表、向量8bit编码及相关常量,完成索引构建。

检索查询阶段:

  • 查询向量归一化为单位向量;
  • 查询向量执行旋转,复用IVFFlat计算查询向量与所有簇心的距离,筛选最近的nprobe个候选簇;
  • 计算每个查询向量的LUT,按8位进行分段;
  • 通过查表、求和以及叠加相关常量,计算查询向量与每个底库向量的距离;
  • 复用IVFFlat逻辑进行TopK选择。

索引持久化能力:

  • 支持索引文件的序列化存储

方案目标

  • 支持 IVF-RabitQ 索引的构建、检索和持久化
  • 在指定验收场景下达到性能指标要求
  • 保持与现有 Index 接口的兼容性,不破坏现有功能

硬件

A2\A3\A5

测试计划

单元测试:

  • 不同数据规模下的构建和检索测试
  • 持久化正确性测试(保存后加载结果一致)
  • 边界条件测试(空索引、单向量、满容量等)

精度测试

与CPU结果相比,TOPK300一致性不低于95%
注意1:对比时需要将聚类步骤放在CPU上计算,且与Faiss原生代码参数配置为一致;
注意2:需要将随机旋转矩阵配置为单位矩阵,避免随机性引入精度误差;

性能测试

性能:metric_type需要支持L2,内积,1kw底库,dim 128, nlist 1024, nprobe 32 64 , batch 1-64, topk300,10xCPU(型号: KunPeng 920 7265)

意见征集周期

截止 2026-04-30

抄送名单

yukunQin
xiangjie10
yihao1234

其他补充说明

欢迎加入社区,感谢您对社区的贡献 🎉!

likedislike
Xxiangjie10成员
4月25日 添加了label:rfc
xiangjie10成员
4月25日 评论:

/label add triaged

likedislike
ascend-robotascend-robot成员
4月25日 添加了label:triaged
yihao1234成员
4月25日 评论:

/label add triaged

likedislike
Xxiangjie10成员
4月28日 修改了issue 的描述
Xxiangjie10成员
4月28日 修改了issue 的描述
Xxiangjie10成员
5月7日 关联了pull request:添加IVF-RabitQ 的RFC文档
Dduliqiang成员
5月9日 关联了pull request:feat(ivfrabitq): add IVFRaBitQ index support with custom operators
Dduliqiang成员
5月9日 关联了pull request:【反合】feat(ivfrabitq): add IVFRaBitQ index support with custom operators
Dduliqiang成员
5月9日 删除了关联的pull request:【反合】feat(ivfrabitq): add IVFRaBitQ index support with custom operators
Dduliqiang成员
6月17日 issue状态由 TODO 改变为 DONE
Dduliqiang成员
6月17日 关闭了 issue
ascend-robotascend-robot成员
6月17日 添加了label:resolved
姚小白姚小白成员
28 天前 关联了看板:MindSDK版本issue看板