内容提要
Qdrant 通过固定、缓存、冷存储三层管理内存,并结合量化压缩向量。小集合可全部缓存;内存瓶颈时固定量化向量副本以兼顾速度与低占用;磁盘受限时先量化再转冷存储。避免同时缓存全精度与压缩副本,谨慎使用 HNSW 内联存储。
延伸解读
内存层级与量化组合的适用场景
Qdrant 提供固定、缓存、冷存储三层内存管理,并支持量化压缩向量。小集合可全部缓存,无需量化;内存成为瓶颈时,固定量化向量副本能兼顾速度与低占用;磁盘受限时,先量化再转冷存储可降低尾延迟风险。避免同时缓存全精度与压缩副本,除非内存充裕。
固定量化向量的优势与时机
当集合增长到内存成为主要限制时,固定压缩向量副本是推荐配置。它提供与最快配置相当的搜索速度,但内存占用仅为一小部分,且内存占用固定,不会随集合增长而波动。对于能完全放入缓存的小集合,则无需固定,因为全精度缓存已能达到相同延迟。
冷存储与量化的协同作用
若磁盘占用比速度更重要,应在完全采用冷存储前加入量化。未量化的冷存储每次首次访问都需从磁盘读取,HNSW 遍历可能触及多个页面,导致尾延迟风险。量化后的压缩副本每页可容纳更多向量,一次读取可服务更多候选,从而减少磁盘读取次数和尾延迟。
HNSW 内联存储的磁盘开销与测试建议
HNSW 内联存储通过将向量数据复制到图文件中来减少随机读取,但会为每个点存储全精度副本,并为每条边存储压缩副本。边数越多、向量维度越高,磁盘开销越大,可能使图文件膨胀数倍。在生产环境使用前,应基于实际维度和图连接度进行测试,并考虑使用更小的压缩向量尺寸来缓解。
Q&A
Qdrant 的内存层级有哪些?各自的特点是什么?
Qdrant 提供三种内存层级:Pinned(固定)位于堆上,永远不会被驱逐,访问始终快速;Cached(缓存)通过内存映射并在启动时预加载到操作系统页面缓存,启动也快,但内存压力下可能被推出;Cold(冷存储)同样内存映射但不预加载,首次读取任何页面都来自磁盘。
什么时候应该固定量化向量?
当集合大到 RAM 成为瓶颈(而非仅仅追求速度)时,应固定压缩副本。固定能提供固定的内存预留,使集合持续增长时内存占用几乎不变,同时保持接近最快配置的搜索速度。如果集合小到能完全放入缓存层且有余量,则无需固定。
在冷存储层使用量化有什么好处?
在冷存储层使用量化可以降低磁盘读取成本,因为大多数候选向量会针对小的压缩副本进行评分,而不是从冷文件中分页加载全精度向量。这能消除大部分尾部延迟风险,即使尚未固定任何数据。
为什么不应该同时缓存全精度向量和压缩副本?
因为这会加倍常驻工作集,而不是缩小它。Qdrant 默认会固定压缩副本而非缓存它,同时缓存两者需要集群有足够 RAM 容纳两份数据。如果 RAM 不足,性能可能从接近最快配置骤降到接近最差,延迟增加数倍。
HNSW 内联存储有什么潜在问题?
HNSW 内联存储通过将向量数据直接复制到图文件中来减少随机访问读取,但会为每个点增加全精度副本,并为每条边增加压缩副本。第二个成本随边数和向量大小增长,可能远快于集合增长。结合量化时,磁盘上图大小可能比不使用内联存储时大很多倍。因此,在生产环境依赖它之前,应在真实向量维度和图连接度下测试。
如何根据 RAM 限制来调整 Qdrant 配置?
应根据当前工作集占用的集群 RAM 比例来调整每种配置,而不是根据集合中的点数或初始设置时的余量。同一配置可能看起来正常、失败、又恢复,仅仅因为数据集大小与可用 RAM 的比例发生变化。应在每个扩展步骤重新检查 RAM 余量与工作集的关系。