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