向量数据库

标量量化 SQ:从 float32 到 int8

核心索引算法约 20 分钟kp-011

前置知识

一句话定义

标量量化(Scalar Quantization)把每个分量独立地从 float32(4 字节)压到更低比特——fp16(2 字节)、int8(1 字节)甚至 4/1 bit——是压缩率与失真之间最温和的权衡:逐维独立、构建零成本、召回损失通常很小。

为什么重要

内存是向量库最贵的资源(见 kp-026 的账本),而 int8 一档就砍掉 75% 向量内存且几乎不动索引结构——这是生产系统里性价比最高的一笔优化。SQ 也是"图导航 + 压缩向量"组合拳(kp-008 案例)里最常用的压缩腿,Qdrant、FAISS、Milvus、pgvector(halfvec) 全线支持。

前置知识

kp-003(度量)、kp-004(三元权衡);二进制表示的基础常识。

核心概念

原理与机制

affine 量化的映射与还原:

量化:   x_q = round( (x - min) / scale ),  scale = (max - min) / 255
还原:   x̂  = x_q × scale + min
误差上界(每维): |x - x̂| ≤ scale / 2

距离计算两种口径:直接在整数域算(int8 全程 SIMD,最快)或反量化回浮点再算。失真来源是均匀量化噪声:对高斯类嵌入分布,int8 每维相对误差约千分之几量级,聚合到 d 维距离后对排序的影响通常只翻转"几乎并列"的候选——这是 int8 实测召回损失常小于 1~3 个百分点的原因。

压缩-失真阶梯(768 维为例):

精度每向量字节压缩率典型召回影响用法
float3230721×无损基线
fp1615362×≈0直接替换
int87684×<1~3%+rescoring 或补 efSearch
1 bit9632×显著,需精排见 kp-031

公式或模型

内存账直接收益:

N=1e7, d=768:  fp32 29.5GB → int8 7.4GB,  省 22GB
HNSW 图内存不受量化影响(指针仍是 4B), 见 kp-008 公式

图示

float32:  | 0.7231 | 0.1189 | 1.4472 | …  每维4B
int8:     | 185    | 30     | 255    | …  每维1B + 全局(min,max,scale)
还原:     185×scale+min ≈ 0.7231 (误差 ≤ scale/2)

实例或案例

Qdrant 对 1 亿条 1536 维向量做 scalar int8 量化并开启 rescoring(量化粗排 4 倍候选 + 原始浮点精排):内存从约 600 GB 降到约 150 GB,recall@10 仅降 0.4 个百分点,p99 反而下降(内存带宽压力减小)。对照组:直接量化不精排,召回掉 2 个百分点——rescoring 就是花少量 CPU 把失真挡回去。

直观类比

把每维"身高测量"从毫米级精度(float32)改成厘米级刻度(int8):绝大多数排序不受影响,只有身高几乎相同的两人可能排错——精排相当于把并列候选人重新用毫米尺量一遍。

常见误区

  1. "量化后距离可以直接与浮点时代的阈值比较"——量纲变了,业务相似度阈值必须重新标定;比较排序无碍,比绝对值有坑。
  2. "压缩率越高越好"——int8 以下(4 bit、1 bit)失真非线性上升,必须配 rescoring 与更认真的重测,见 kp-031。
  3. "量化能省建库时间"——SQ 构建近乎免费,但 HNSW 图结构本身不压缩;图内存要靠降 M 或换磁盘方案(kp-013)。

自测题

  1. int8 相对 float32 的内存压缩率与典型召回代价?
  2. 答:4 倍压缩;配 rescoring 或补偿 efSearch 时召回损失通常在 1~3 个百分点内,具体以自建评测为准。

  3. 为什么 fp16 常被称为"免费午餐"?
  4. 答:直接降比特存半精度、无需训练码本、几乎零失真,代价只有 2 倍压缩率——预算允许时是最安全的第一步。

  5. rescoring 的原理与代价?
  6. 答:量化距离粗排出数倍于 k 的候选,再取原始向量精排 top-k;代价是候选集的浮点距离计算与原始向量访问(内存/IO 略增)。

与其他知识点的关系

kp-012 把"逐维独立量化"升级为"分段子空间码本";kp-026 把本篇压缩率放进总成本账;kp-031 展示把压到 1 bit 后如何用理论修正救回精度。

延伸阅读

Johnson, Douze, Jégou, "Billion-scale similarity search with GPUs"(2017)——量化表示在大规模检索中的工程化实践与精度权衡。

相关知识点