跳转至

在 RDS PostgreSQL 中实现 RaBitQ 量化

Ch01.288 在 RDS PostgreSQL 中实现 RaBitQ 量化

📊 Level ⭐⭐ | 12.7KB | entities/在-rds-postgresql-中实现-rabitq-量化.md

核心要点

阿里云 RDS PostgreSQL 在 pgvector 扩展中引入了 RaBitQ(Random Binary Quantization) 向量量化技术,实现 32 倍压缩比(float32 → 1bit/维度),同时通过理论误差界保证召回率。实测在 1024 维 100M 向量的业务数据集上,IVF-RaBitQ 索引空间仅 16GB(vs. HNSW 的 689GB),索引创建时间从 4 天缩短至 4 小时,P99 查询延迟在混合读写场景下降低至原来的约 1/4。

深度分析

向量检索成为 RDBMS 新标配

随着大语言模型和多模态 AI 的普及,将非结构化数据(文本、图像、音频)编码为高维向量并在海量向量中快速检索,已成为 RAG、语义搜索、图像检索、推荐系统等场景的基础设施需求。pgvector 基于 PostgreSQL 内核的 Access Method 接口实现了 IVF-FLAT 和 HNSW 两种向量索引,让企业无需引入专用向量数据库即可获得 AI 能力。阿里云 RDS PostgreSQL 在跟进开源版本迭代的同时,针对生产场景做了性能和稳定性优化,RaBitQ 即为其中关键引入。

pgvector 在大规模场景下的三大瓶颈

当向量规模从百万级迈向千万甚至亿级时,pgvector 的性能瓶颈被显著放大: 存储效率低下。 pgvector 使用 float32 数组表示向量,1024 维向量占用 4096 字节。PostgreSQL 页面大小固定为 8KB,单个页面对高维向量的空间利用率极低。尤其是 HNSW 索引,在内存受限场景下,搜索阶段因 Buffer 未命中触发大量文件 IO,查询性能可劣化一到两个数量级。 查询延迟长尾效应。 随着索引规模增大,P99 延迟的劣化速度远超 P50。在高并发场景下,CPU 的浮点计算压力成为瓶颈,延迟稳定性难以保障。 向量插入性能劣化。 HNSW 索引构建依赖 maintenance_work_mem 参数控制内存。当已构建的图超过内存限制时,图构建退化到磁盘——因为构建过程中需要频繁读取已插入向量来计算距离,导致严重的 IO 瓶颈。索引完成后,新向量插入同样存在此问题。 文章给出了空间占用的量化数据:SIFT1M(960D1M)索引需 4887MB,GIST1M(128D1M)需 654MB,而 1024 维 100M 向量的业务数据集索引空间高达 689GB——这已是生产级别的存储压力。

为什么是 RaBitQ

pgvector 社区已支持半精度向量(float16)和二值量化(32 倍压缩但召回率严重损失),但这两者都无法满足生产需求:float16 压缩比有限,二值量化召回率不可接受。RaBitQ 之所以成为更优选择,在于其四个核心特性: 极高压缩比。 1bit/维度,32 倍压缩,将 1024 维 float32 向量从 4096 字节压缩至 128 字节。 距离运算高效化。 将向量距离运算转化为位运算,结合 SIMD 一次处理多条向量,显著提升吞吐量。 理论误差界可证明。 这是 RaBitQ 区别于其他激进量化方法的关键:它能提供可证明的误差范围,允许在召回率和性能之间做可控权衡,而非盲目压缩。 两阶段搜索策略。 先用 RaBitQ 估计距离快速初筛出候选集,再根据误差界判断哪些候选向量需要精确距离计算并参与重排序——确保召回率不会过度损失。

核心原理:几何特性 + 随机旋转 + SQ4

RaBitQ 的理论基础来自论文《RaBitQ: Quantizing High-Dimensional Vectors with a Theoretical Error Bound for Approximate Nearest Neighbor Search》。其核心洞察利用了高维空间的几何特性:在 1000 维和 3 维空间的单位球面上随机生成单位向量,统计向量第一维的取值分布,会发现高维空间下这些值不是均匀分布的,而是集中在零点附近。 基于这一特性,RaBitQ 首先将原始向量投影到单位球面上,再通过二值量化表示向量每一维的方向而非具体数值,从而保留关键信息。在二值化之前,向量会经过一次随机旋转变换——该操作将原始向量的信息"均匀打散"到各个维度上,确保每个比特位都能携带有效信息。 在距离计算时,RaBitQ 将原始内积或欧式距离展开为多个分量。其中绝大部分分量可在索引创建阶段预计算,或在查询时以常数级别一次性计算(与候选集大小无关)。唯一需要逐向量计算的核心项通过 SQ4(4bit 标量量化) 的方式,被转化为 1-bit 量化码与 4-bit 查询向量的内积运算,通过位运算 + POPCOUNT 快速完成。

IVF-RaBitQ 与 HNSW-RaBitQ 的实现差异

IVF-RaBitQ(倒排文件 + RaBitQ): IVF-FLAT 的工作流程是用 K-Means 将向量空间划分为若干 cluster,搜索时先定位最近的 N 个 cluster,然后在 cluster 内精确扫描。RaBitQ 与 IVF-FLAT 的结合方式是:索引构建时用 KMeans 聚类组织向量,每个聚类的中心点仍使用原始向量表示;以每个聚类中心点作为 RaBitQ 的质心,对聚类内向量进行量化。搜索时先计算查询向量与各中心点距离选出最近聚类,对查询向量做 SQ4 量化后计算估计距离排序,最后根据误差界选取部分向量计算精确距离做高精度重排序。 HNSW-RaBitQ: HNSW 将向量组织为多层图结构——上层为稀疏高速公路,下层为稠密局部邻接图,搜索时从顶层入口逐层向下贪心导航。HNSW 与量化结合的关键挑战在于:如果全程使用 RaBitQ 估计距离计算图索引中的目标距离,可能导致搜索方向偏差进而损失召回率。解决方案是:图的构建(分层和邻接关系)基于原始向量进行;在搜索阶段,上层初筛时使用 RaBitQ 快速定位;在 Level 0 搜索时,先用 RaBitQ 计算估计距离,根据理论误差界,仅对估计距离接近的候选向量计算精确距离并排序。

性能测试结果

测试环境: RDS PostgreSQL 17(20260330 小版本),pg.x2.12xlarge.2c 实例,pgvector 0.8.0.2,压测工具为 ann-benchmark。 dbpedia-openai-1M 数据集(内存充足场景): | 索引类型 | 创建时间 | 索引空间 | |---|---|---| | IVF-FLAT | 95.32s | 7820MB | | IVF-RaBitQ | 78.72s | 248MB | | HNSW | 281.42s | 7918MB | | HNSW-RaBitQ | 251.97s | 510MB | 同等召回率下,RaBitQ 版本的索引空间压缩约 32 倍,且创建时间更短。 1024 维 100M 业务数据集(内存受限真实生产场景): | 指标 | IVF-RaBitQ | HNSW | |---|---|---| | 索引创建时间 | 4h23min17s | 4d1h13min47s | | 索引空间 | 16GB | 689GB | | Write-only 写入延迟 | 6.41ms | 469.41ms | | Read-only top10 查询延迟 | 342.08ms | 27.65ms | | Read-only top100 查询延迟 | 359.19ms | 1789.22ms | | Read-write 写入延迟 | 13.42ms | 473.54ms | | Read-write 查询延迟 | 395.93ms | 1704.64ms | 关键洞察:在真实生产环境(内存受限)下,HNSW 在索引创建、数据插入、大结果集查询等场景均出现严重性能劣化。IVF-RaBitQ 的优势在于大规模、内存受限场景,而非小结果集的极致低延迟——top10 查询仍略逊于 HNSW,但 top100 及更大结果集场景下全面胜出。

实践启示

1. 量化是向量数据库规模化的必经之路。 从 float32 到 1bit 的 32 倍压缩,不仅仅是存储节省——它直接决定了在有限内存 budget 下能服务多大规模的向量检索。对于计划在 PostgreSQL 上构建 RAG 系统的团队,RaBitQ 提供了一条无需引入专用向量数据库即可支撑亿级向量服务的路径。 2. HNSW 与量化并非替代关系,而是场景分化。 HNSW 在内存充足、小结果集、低延迟场景下仍是最佳选择;IVF-RaBitQ 在大规模、内存受限、大结果集、高并发写入场景下优势显著。阿里云的实现允许在创建索引时选择 opclass(rabitq_vector_cosine_ops),提供了灵活的场景适配能力。 3. 理论误差界是 RaBitQ 的核心价值锚点。 与盲目压缩不同,RaBitQ 的理论保证让工程师能够量化召回率损失,这为生产决策提供了可信的工程依据。在评估其他向量量化方案时,是否提供理论误差界应作为重要的技术选型标准。 4. 内存受限是生产环境的常态而非例外。 文章中 top10 查询 IVF-RaBitQ(342ms)反而慢于 HNSW(27ms)的数据值得警惕——这说明 RaBitQ 的优势区间是大规模场景,在选型时不应被"量化加速"的笼统表述误导,而应基于具体的内存 budget 和查询结果集大小做判断。 5. SQL 接口降低了向量量化的使用门槛。 阿里云提供了与 pgvector 社区版完全兼容的 SQL 语法,仅需在创建索引时指定 USING ivfflat (embedding rabitq_vector_cosine_ops)USING hnsw (embedding rabitq_vector_cosine_ops),无需额外的学习成本和运维改造。这意味着现有的 pgvector 应用可以以极低的迁移成本获得量化加速能力。

相关资源

相关实体