首页/AI/RAG 与向量库速查/标量量化与二值量化(SQ / BQ)
Embedding 与检索50 条

标量量化与二值量化(SQ / BQ)

标量量化(SQ)把 float32 转成 int8 或 4 位整数,内存降约 4 倍、精度损失较小;二值量化(BQ)进一步压到 1 位,用汉明距离检索,适合内存敏感的大规模场景。

RAG 与向量库速查AI更新于 2026-10-13

量化在做什么

量化把 float32 向量换成更少的比特存储:标量量化(SQ)把每一维压成 int8 或 4 位整数,内存约降到四分之一到八分之一,精度损失通常可以接受;二值量化(BQ)进一步压到每维 1 位、用汉明距离比较,内存降到约三十二分之一,召回下降明显,需要靠重排补偿。它解决的是「向量条数增长快于内存扩容」这个现实问题。

基本信息

SQ8每维 8 位,内存约四分之一,通用首选
SQ4每维 4 位,内存约八分之一,精度损失更明显
BQ每维 1 位,内存约三十二分之一,需精排补偿
常用模式量化向量粗筛,原始向量精排

典型使用场景

  • 内存告急:向量总量远超可用内存,先量化保容量再谈精度
  • 成本压缩:自建集群减少节点数,托管服务降档位
  • 海量粗筛:二值量化快速缩小候选,再用 float 向量重排保精度
  • 冷热分层:低频访问的历史向量量化存磁盘,热数据保留原始精度
  • 扩容前的过渡:采购周期内先用量化撑住容量,为正式扩容争取时间

Qdrant 量化配置

Qdrant 量化配置
PUT /collections/kb
{
  "vectors": {"size": 1024, "distance": "Cosine"},
  "quantization_config": {"scalar": {"type": "int8", "always_ram": true}}
}
# 说明:quantization_config 声明量化方式,二值量化改为 binary 段
# always_ram 让量化向量常驻内存,加快检索但占用更多内存
# 二值量化建议配合 rescore,用原始向量对候选精排

量化方式对比

方式每维位数相对内存代价
float32321x基线,不损失精度
SQ88约四分之一精度轻微下降,多数场景可用
SQ44约八分之一精度下降更明显,需评测确认
BQ1约三十二分之一召回损失大,必须重排补偿
量化通常与原始向量共存:先用量化做粗筛,再用 float 向量精排,兼顾内存与精度,这也是多数向量库推荐的组合方式。
量化配置一般在建集合时声明、事后修改需要重建索引,因此要在数据规模还小时规划好,避免上线后返工影响服务。
量化后要重新做阈值校准与召回评测:分数分布变了,沿用旧阈值会出现大量误收或误拒,这类问题通常在上线后几天才被用户发现。

易错点

  • 先量化再做评测:量化会改变分数分布,阈值需要重新校准
  • always_ram 打开后内存不足时,服务可能出现过载或启动问题
  • 二值量化不接重排,粗筛假阳性直接进上下文,答案质量下降
  • 量化后未重新校准相似度阈值,无答案查询被大量误收

数据来源与参考

  • Qdrant 官方文档(Quantization)
  • Milvus 官方文档(IVF_SQ8 等量化索引)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌