ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

Faiss 1.15.0 RaBitQ 快扫检索 QPS 提升 80%:1 比特量化向量检索走到哪了

Faiss 1.15.0 RaBitQ 快扫检索 QPS 提升 80%:1 比特量化向量检索走到哪了 Faiss 1.15.0 RaBitQ 快扫检索 QPS 提升 80%1 比特量化向量检索走到哪了【免费下载链接】faissA library for efficient similarity search and clustering of dense vectors.项目地址: https://gitcode.com/GitHub_Trending/fa/faiss向量数到 1 亿、维度 768 时一份裸 float32 索引要吃掉 300 多 GB 内存多数团队到这里只能接受召回与 QPS 的折中。Faiss RaBitQ 走了另一条路把每个向量压到几个比特让找最近邻退化成一次位运算计数问题。从 1.11.0 落地到 1.15.0它经历了从能用到敢上生产的连续迭代——1.15.0 把 RaBitQ 快扫路径的检索 QPS 再抬高 80%见 CHANGELOG.md 变更描述并补上了多比特、mmap 与 RISC-V 向量化内核的缺口。RaBitQ 压掉了什么300 字讲清原理RaBitQRandomized Binary Quantization随机二值量化只记录向量经随机旋转后的符号每个维度相对质心取正还是取负1 比特。类比成记地址不写精确坐标只记河的哪边、桥的哪侧维度越高编码越精细。符号本身会丢精度所以每个向量额外存了范数、量化向量与原向量的点积等几个系数查询时用系数做距离估计而非精确重算。真正让它快的有两件事一是随机旋转矩阵相当于先把向量随机搅匀让符号位均匀携带信息避免数据分布偏斜导致估计误差二是 FastScan 批打包——32 个向量的符号位被拼进 SIMD 友好的块里CPU 一条指令处理一批。距离估计的主体是位平面上的 popcount统计 1 的个数这正是 AVX-512 的 vpopcntdq 指令擅长的事。实现见 faiss/IndexIVFRaBitQFastScan.h 与 faiss/impl/RaBitQuantizer.h。1.15.0 关键变更新增、优化、修复类别变更说明优化RaBitQ 快扫查询初始化重构 AND 点积与 popcount 融合QPS 提升 80%并新增 AVX-512 LUT 量化路径新增IndexIVFRaBitQFastScan转换构造函数先建 IVFRaBitQ可原地转成 FastScan 变体新增RISC-V RVV RaBitQ 内核RISC-V 向量指令平台也可跑 RaBitQ新增Flat 与静态 Vamana SVS 索引的 mmap 支持用内存映射加载大索引免去整块反序列化进内存修复大 bbs 下快扫辅助偏移错误批大小超过默认值时结果会算错1.15.0 修正修复L2 距离估计钳制到 ≥ 0消除旧版本偶发输出的微小负距离怎么建 IVFRaBitQ 索引最小可运行示例工厂字符串是最省事的入口IVF1000,RaBitQ4表示 nlist1000 的 IVF倒排文件索引先分桶再检索配 4 比特 RaBitQ想要 SIMD 批处理就写RaBitQfs默认 1 比特、批大小 32。import numpy as np import faiss d, nb, nq, k 768, 200_000, 1_000, 100 xb np.random.rand(nb, d).astype(float32) xq np.random.rand(nq, d).astype(float32) index faiss.index_factory(d, IVF1000,RaBitQ4) index.train(xb) index.add(xb) params faiss.IVFRaBitQSearchParameters() params.nprobe 32 params.qb 8 # 查询向量量化位数0 仅非 FastScan 变体支持 D, I faiss.search_with_parameters(index, xq, k, params)内存账可以直接算1 比特下 d768 的向量符号码 96 字节加几字节系数约为 float32 原尺寸的 1/30。容易踩的坑qb、nb_bits 与训练量⚠️ qb 默认值在 1.14.0 从 0 改成了 4且 FastScan 变体不支持 qb0SIMD 查找表必须用量化后的查询。老代码里硬编码 qb0 的换到 RaBitQfs 路径会直接报错。RaBitQ工厂串默认 1 比特2~9 比特写成RaBitQ4这种形式1.13.1 起支持多比特。多比特换召回内存按比特数线性涨别默认拉满。训练样本建议至少 39×nlist——这是 faiss k-means 每个质心的默认最小样本数不够会导致分桶严重偏斜。官方基准 benchs/bench_rabitq.py 用的正是 10 万训练点 nlist1000 这条下限。评估前先确认 CPU 支持 AVX2/AVX-512位平面扫描是 RaBitQ 的速度来源标量路径与 SIMD 差距非常大跨机器复现数字时先看指令集。延伸资源benchs/bench_rabitq.py官方基准条件为 20 万合成向量、d∈{256, 512, 768, 1024}、k100、nprobe∈{4, 16, 32}对照 SQ、PQFastScan、HNSW。要在自己机器上拿数照这个脚本跑最公平。tests/test_rabitq.py内含按 RaBitQ 论文逐行翻译的参考实现适合核对理解或做跨 SIMD 级别的等价校验。faiss/IndexRaBitQ.hqb、centered、nb_bits 等字段语义都有注释比翻文档快。GPU 侧目前还没有 RaBitQ 内核上亿向量想全压到 GPU 的实用组合仍是 IVFPQFastScan。后续版本大概率继续补多比特快扫融合与更广的平台覆盖但 1.15.0 的 CPU 路径已经可以直接进生产评估了。【免费下载链接】faissA library for efficient similarity search and clustering of dense vectors.项目地址: https://gitcode.com/GitHub_Trending/fa/faiss创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表