资讯动态

Faiss 1.11.0 向量检索提速:RaBitQ 把每条向量压缩到约 1/32 的存储

发布时间:2026/9/1 14:33:32 来源:尧图企业网站定制
Faiss 1.11.0 向量检索提速RaBitQ 把每条向量压缩到约 1/32 的存储【免费下载链接】faissA library for efficient similarity search and clustering of dense vectors.项目地址: https://gitcode.com/GitHub_Trending/fa/faissFaiss 1.11.02025-04-24 发布见 CHANGELOG.md是稠密向量检索库 Faiss 的新版本解决数据量上涨后 fp32 向量存储与暴力搜索延迟扛不住的瓶颈核心新增是 RaBitQ 量化索引。读完本文你能三步建出一个 RaBitQ 索引并发起查询按数据规模、精度、内存三个条件选到合适索引并用三个量化指标确认优化生效。这个版本改了什么新增 RaBitQ 实现IndexRaBitQ、IndexIVFRaBitQ及其 FastScan 变体共 4 种索引形态index factory 直接支持RaBitQ、RaBitQfs字符串faiss/IndexRaBitQ.h、faiss/index_factory.cpp新增内存映射与零拷贝反序列化器加载大索引不必再整体复制一份内存faiss/impl/mapped_io.h训练 API 增加normalize_l2/is_spherical开关让球面数据的预处理行为显式化CHANGELOG 1.11.0 Added 一节修复IndexHNSW的metric_arg传参 bug、为nb_neighbors增加越界检查、修复 ARM 平台上IVFPQFastScan的 range search 行为CHANGELOG 1.11.0 Fixed 一节C API 开始通过 Conda 发布C 语言接入的安装方式更简单CHANGELOG 1.11.0 Changed 一节RaBitQ 是怎么省事的把一条 256 维向量想成行李箱里 256 件物品。乘积量化PQ把向量切成 M 段、每段查码本表相当于把物品分装进小袋子再逐个描述RaBitQ 则是完全不拆行李每个维度只记 1 个比特正还是负。于是每维从 4 个字节降到 1/8 个字节再外加几个字节的校准常数总存储约是 fp32 的 1/25 到 1/32码长公式见 faiss/impl/RaBitQuantizer.h 的compute_code_size。搜索时 CPU 用 and、popcount 这类位运算估计距离而不是逐维浮点乘法SIMD 指令集恰好对位运算加速明显。三步跑通最小示例第一步安装。pip 装现成包最简单想自己编译也可以从源码来pip install faiss-cpu # 或git clone https://gitcode.com/GitHub_Trending/fa/faiss # cmake -B build cmake --build build -j cmake --install build第二步建索引。IndexRaBitQ只需要维度d和每维位数nb_bits没有 PQ 那种 M 参数训练也远比聚类轻量。第三步查询接口和普通 Faiss 索引完全一致import numpy as np import faiss d, n 256, 200_000 xb np.random.randn(n, d).astype(float32) xq np.random.randn(10, d).astype(float32) index faiss.IndexRaBitQ(d, nb_bits1) # 1-bit 量化 index.add(xb) D, I index.search(xq, 10)按场景选索引数据规模精度要求内存条件推荐索引百万以内接近精确搜索不限IndexFlatL2暴力搜索千万级可接受少量召回损失紧张IndexRaBitQnb_bits1亿级精度与速度平衡紧张IndexIVFRaBitQnlist 取 √N 量级千万级以上极高精度充足IndexHNSWFlat图索引 一般从 IVF RaBitQ 起步再调nprobe换召回CPU 支持 AVX-512 时可换 FastScan 变体factory 字符串RaBitQfs批处理吞吐更高。怎么确认优化生效不用搭监控体系看三个数字就够查询延迟用 timeit 跑 10 次 search 取平均毫秒数benchs/bench_rabitq.py 里的计时函数可以直接照搬召回率拿精确 top-k 做对照用faiss.eval_intersection算交集占比与升级前的基线对比内存RaBitQ 1-bit 码每条向量占 (d7)/8 8 字节乘上向量总数对比 fp32 的 d×4 字节省了多少一目了然 该基准脚本会依次跑 256 / 512 / 768 / 1024 维按维度输出召回与延迟表格跑一遍就能得到你这台机器上的前后对比。容易踩的四个坑按 IVFPQ 的签名调用IndexIVFRaBitQ。原因它的构造参数是 (quantizer, d, nlist, ...)不存在 IVFPQ 的 M、nbits 参数RaBitQ 的位宽参数是nb_bits1-9。规避先看 faiss/IndexIVFRaBitQ.h 里的真实签名再写代码在 FastScan 变体里把qb设为 0。原因SIMD 查找表需要量化后的查询头文件明确注明 FastScan 不支持qb0。规避保留默认qb4需要更精查询量化再调大用sa_decode的输出去核对 L2 精度。原因解码偏向保持内积重建向量的 L2 误差可能偏大。规避L2 场景以 search 路径的距离为准不把重建结果当真值小数据硬上量化索引。原因数据不到百万且内存充裕时暴力搜索更准也更简单量化收益只在大规模或内存受限时才体现。规避先跑IndexFlatL2建立精度与延迟基线再决定是否压缩Faiss 1.11.0 让向量检索的内存和延迟收益集中在nb_bits一个参数上配合内存映射反序列化大索引的加载和部署都更省力。想继续深入可以从以下三个入口看起benchs/bench_rabitq.pyRaBitQ 官方基准脚本含计时与召回计算faiss/impl/RaBitQuantizer.h量化器核心接口与码长、解码语义的注释INSTALL.md源码编译与安装的完整说明【免费下载链接】faissA library for efficient similarity search and clustering of dense vectors.项目地址: https://gitcode.com/GitHub_Trending/fa/faiss创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价