Qdrant中的内存层级:何时使用何种配置

Qdrant中的内存层级:何时使用何种配置

💡 原文英文,约1400词,阅读约需6分钟。
📝

内容提要

Qdrant支持将向量、HNSW图、量化向量等分配到不同内存层级(固定、缓存、冷存储),以平衡速度与成本。建议在RAM紧张时固定量化向量,冷存储时配合量化减少磁盘读取,避免缓存全精度与压缩副本共存。HNSW内联存储需测试,并随扩展持续检查RAM余量。

🔎

延伸解读

量化与冷存储的配合

文章指出,在冷存储(cold tier)下,未量化的向量每次首次访问都需要从磁盘读取,而HNSW遍历会触及大量页面,导致尾部延迟风险。通过量化,压缩副本可以容纳更多向量在同一磁盘页上,一次读取即可服务更多候选向量,从而显著降低尾部延迟。因此,在延迟敏感的工作负载中,应避免将未量化的稠密向量置于冷存储,而应优先考虑量化。

缓存全精度与压缩副本的权衡

Qdrant默认将压缩副本固定(pinned)而非缓存,若同时缓存全精度向量和压缩副本,会使驻留工作集翻倍,而非缩小。文章建议仅在RAM充足时才这样做,否则当工作集接近集群内存上限时,性能可能急剧下降。因此,在内存受限时,应避免同时缓存两种副本,而应选择固定压缩副本或仅缓存全精度向量。

HNSW内联存储的磁盘开销

HNSW内联存储将向量数据复制到图文件中,每个点包含全精度副本,每条边还包含压缩副本,导致磁盘占用随边数和向量大小增长,可能远超点数量。结合量化时,磁盘图大小可能比非内联存储大数倍。因此,在生产环境使用前,必须在真实向量维度和图连接度下测试,并注意压缩向量大小可减少额外磁盘占用,但无法完全消除问题。

RAM作为限制因素的动态评估

文章强调,配置的适用性取决于工作集占集群RAM的比例,而非点数量或初始设置时的余量。同一配置可能在小规模时表现良好,随着数据增长接近内存上限而性能恶化,但集群RAM增加后又恢复。因此,每次扩展时都应重新检查RAM余量,而非仅依赖初始配置,以避免因内存不足导致的性能问题。

Q&A

Qdrant支持哪些内存层级?它们分别有什么特点?

Qdrant支持三种内存层级:固定(Pinned)、缓存(Cached)和冷存储(Cold)。固定层级的数据常驻堆内存,不会被驱逐,访问速度最快;缓存层级使用内存映射并在启动时预热到操作系统页缓存,启动快,但在内存压力下可能被操作系统驱逐;冷存储也使用内存映射,但不预热,首次读取页面时从磁盘加载。

在Qdrant中,什么时候应该固定量化向量?

当集合规模增长到RAM成为主要限制因素(而非原始速度)时,应该固定量化向量。固定量化向量可以提供可预测的内存占用,并保持接近最快配置的搜索速度,同时内存占用远小于缓存全精度向量。如果集合足够小,完全能放入缓存层级且还有余量,则无需固定,因为缓存全精度向量在延迟上与固定相当。

为什么在冷存储中建议使用量化?

在冷存储中,未量化的向量首次读取需要从磁盘加载,而HNSW遍历会触及大量页面,导致尾部延迟风险。使用量化后,压缩副本可以容纳更多向量在同一页面,一次磁盘读取可以服务更多候选向量,从而显著降低尾部延迟。因此,如果磁盘占用比原始速度更重要,建议在冷存储中配合量化使用。

在Qdrant中,缓存全精度向量和压缩副本同时存在会有什么问题?

同时缓存全精度向量和压缩副本会加倍常驻工作集,因为Qdrant默认将压缩副本固定(pinned)而非缓存。这会导致内存占用翻倍,而不是减少。除非集群有足够RAM容纳两者,否则不建议这样做。

HNSW内联存储与量化结合时,对磁盘空间有什么影响?

HNSW内联存储会将向量数据直接复制到图文件中,每个点包含一个全精度副本,每条边还包含一个压缩副本。压缩副本的成本随边数和向量大小增长,可能远超集合本身的增长。结合量化时,磁盘上的图大小可能比不使用内联存储时大很多倍,具体倍数取决于向量维度和图连通性,需要在实际场景中测试。

如何根据RAM余量来调整Qdrant配置?

应根据当前工作集占集群RAM的比例来调整配置,而不是仅根据点数或初始设置。随着数据增长,工作集可能接近内存上限,导致性能下降;当集群RAM增加后,性能可能恢复。因此,需要在每个扩展步骤重新检查RAM余量,确保配置与当前资源匹配。

🏷️

标签

➡️

继续阅读