
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向量數(shù)到 1 億、維度 768 時一份裸 float32 索引要吃掉 300 多 GB 內(nèi)存多數(shù)團(tuán)隊到這里只能接受召回與 QPS 的折中。Faiss RaBitQ 走了另一條路把每個向量壓到幾個比特讓找最近鄰?fù)嘶梢淮挝贿\算計數(shù)問題。從 1.11.0 落地到 1.15.0它經(jīng)歷了從能用到敢上生產(chǎn)的連續(xù)迭代——1.15.0 把 RaBitQ 快掃路徑的檢索 QPS 再抬高 80%見 CHANGELOG.md 變更描述并補上了多比特、mmap 與 RISC-V 向量化內(nèi)核的缺口。RaBitQ 壓掉了什么300 字講清原理RaBitQRandomized Binary Quantization隨機(jī)二值量化只記錄向量經(jīng)隨機(jī)旋轉(zhuǎn)后的符號每個維度相對質(zhì)心取正還是取負(fù)1 比特。類比成記地址不寫精確坐標(biāo)只記河的哪邊、橋的哪側(cè)維度越高編碼越精細(xì)。符號本身會丟精度所以每個向量額外存了范數(shù)、量化向量與原向量的點積等幾個系數(shù)查詢時用系數(shù)做距離估計而非精確重算。真正讓它快的有兩件事一是隨機(jī)旋轉(zhuǎn)矩陣相當(dāng)于先把向量隨機(jī)攪勻讓符號位均勻攜帶信息避免數(shù)據(jù)分布偏斜導(dǎo)致估計誤差二是 FastScan 批打包——32 個向量的符號位被拼進(jìn) SIMD 友好的塊里CPU 一條指令處理一批。距離估計的主體是位平面上的 popcount統(tǒng)計 1 的個數(shù)這正是 AVX-512 的 vpopcntdq 指令擅長的事。實現(xiàn)見 faiss/IndexIVFRaBitQFastScan.h 與 faiss/impl/RaBitQuantizer.h。1.15.0 關(guān)鍵變更新增、優(yōu)化、修復(fù)類別變更說明優(yōu)化RaBitQ 快掃查詢初始化重構(gòu) AND 點積與 popcount 融合QPS 提升 80%并新增 AVX-512 LUT 量化路徑新增IndexIVFRaBitQFastScan轉(zhuǎn)換構(gòu)造函數(shù)先建 IVFRaBitQ可原地轉(zhuǎn)成 FastScan 變體新增RISC-V RVV RaBitQ 內(nèi)核RISC-V 向量指令平臺也可跑 RaBitQ新增Flat 與靜態(tài) Vamana SVS 索引的 mmap 支持用內(nèi)存映射加載大索引免去整塊反序列化進(jìn)內(nèi)存修復(fù)大 bbs 下快掃輔助偏移錯誤批大小超過默認(rèn)值時結(jié)果會算錯1.15.0 修正修復(fù)L2 距離估計鉗制到 ≥ 0消除舊版本偶發(fā)輸出的微小負(fù)距離怎么建 IVFRaBitQ 索引最小可運行示例工廠字符串是最省事的入口IVF1000,RaBitQ4表示 nlist1000 的 IVF倒排文件索引先分桶再檢索配 4 比特 RaBitQ想要 SIMD 批處理就寫RaBitQfs默認(rèn) 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 # 查詢向量量化位數(shù)0 僅非 FastScan 變體支持 D, I faiss.search_with_parameters(index, xq, k, params)內(nèi)存賬可以直接算1 比特下 d768 的向量符號碼 96 字節(jié)加幾字節(jié)系數(shù)約為 float32 原尺寸的 1/30。容易踩的坑qb、nb_bits 與訓(xùn)練量?? qb 默認(rèn)值在 1.14.0 從 0 改成了 4且 FastScan 變體不支持 qb0SIMD 查找表必須用量化后的查詢。老代碼里硬編碼 qb0 的換到 RaBitQfs 路徑會直接報錯。RaBitQ工廠串默認(rèn) 1 比特2~9 比特寫成RaBitQ4這種形式1.13.1 起支持多比特。多比特?fù)Q召回內(nèi)存按比特數(shù)線性漲別默認(rèn)拉滿。訓(xùn)練樣本建議至少 39×nlist——這是 faiss k-means 每個質(zhì)心的默認(rèn)最小樣本數(shù)不夠會導(dǎo)致分桶嚴(yán)重偏斜。官方基準(zhǔn) benchs/bench_rabitq.py 用的正是 10 萬訓(xùn)練點 nlist1000 這條下限。評估前先確認(rèn) CPU 支持 AVX2/AVX-512位平面掃描是 RaBitQ 的速度來源標(biāo)量路徑與 SIMD 差距非常大跨機(jī)器復(fù)現(xiàn)數(shù)字時先看指令集。延伸資源benchs/bench_rabitq.py官方基準(zhǔn)條件為 20 萬合成向量、d∈{256, 512, 768, 1024}、k100、nprobe∈{4, 16, 32}對照 SQ、PQFastScan、HNSW。要在自己機(jī)器上拿數(shù)照這個腳本跑最公平。tests/test_rabitq.py內(nèi)含按 RaBitQ 論文逐行翻譯的參考實現(xiàn)適合核對理解或做跨 SIMD 級別的等價校驗。faiss/IndexRaBitQ.hqb、centered、nb_bits 等字段語義都有注釋比翻文檔快。GPU 側(cè)目前還沒有 RaBitQ 內(nèi)核上億向量想全壓到 GPU 的實用組合仍是 IVFPQFastScan。后續(xù)版本大概率繼續(xù)補多比特快掃融合與更廣的平臺覆蓋但 1.15.0 的 CPU 路徑已經(jīng)可以直接進(jìn)生產(chǎn)評估了?!久赓M下載鏈接】faissA library for efficient similarity search and clustering of dense vectors.項目地址: https://gitcode.com/GitHub_Trending/fa/faiss創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考