Qdrant 量化配置是什么
Qdrant 提供标量量化(int8)、乘积量化(PQ)与二值量化三种向量压缩手段:量化后的向量体积更小,可以常驻内存做粗筛,原始向量则留在磁盘用于重排(rescoring),从而用较小的内存支撑更大的集合。代价是量化引入精度损失,并且会改变分数的分布尺度,因此相似度阈值、重排门限这类依赖具体分数的逻辑必须重新校准。它属于内存成本与召回率之间的显式取舍。
基本信息
| 支持类型 | 标量量化(int8)、乘积量化(PQ)、二值量化 |
|---|---|
| 典型压缩比 | int8 约 1/4;二值量化约 1/32 |
| 放置策略 | 量化向量常驻内存,原始向量可放磁盘 |
| 关键参数 | quantile 控制量化覆盖范围,always_ram 控制是否常驻 |
| 适用规模 | 内存受限的大集合;小集合收益有限 |
| 上线要求 | 用固定评测集对比量化前后的召回与延迟 |
典型使用场景
- 内存吃紧:集合规模增长到单机内存放不下全量向量时启用
- 成本优化:用少量召回损失换取内存占用大幅下降
- 高维模型压缩:1024 维 embedding 用二值量化压到约三十二分之一
- 磁盘模式配合重排:原始向量落盘,粗筛命中后再精排保精度
- 灰度验证:先在一个集合上开启,评测通过再推全量
建集合时启用标量量化
建集合时启用标量量化
client.create_collection(
collection_name="kb_big",
vectors_config=models.VectorParams(size=1024, distance=models.Distance.COSINE,
on_disk=True), # 原始向量放磁盘
quantization_config=models.ScalarQuantization(
scalar=models.ScalarQuantizationConfig(type=models.ScalarType.INT8,
quantile=0.99, always_ram=True)),
) # 量化向量常驻内存,用于粗筛量化方式对照
| 方式 | 压缩比 | 典型用法 |
|---|---|---|
| 标量量化 int8 | 约 1/4 | 通用首选,配合原始向量重排 |
| 乘积量化 PQ | 更小 | 内存极紧时使用,需要调参 |
| 二值量化 | 约 1/32 | 高维模型加重排,召回损失必须先评测 |
| 量化加落盘 | 最小 | 用磁盘 IO 换内存,注意延迟变化 |
量化会改变分数分布:阈值、重排门限等依赖分数的逻辑需要重新校准,否则会出现「召回变差但代码没改」的困惑。
上线前对比同一评测集的 recall@k 与 P95 延迟:量化带来的内存收益是确定的,召回损失必须实测而不是猜。