跳到主要内容

ANN 资源评估指南

向量检索(ANN)业务通常先受内存与 CPU 约束,而不是磁盘容量。本文给出一套可落地的资源评估方法,帮助你在上线前规划 Apache Doris 向量检索集群的规格。

快速导航

评估总览

通用评估顺序为:

  1. 估算索引内存:根据数据规模、索引类型与量化方式得到索引常驻内存。
  2. 估算 CPU 核心:按目标 QPS 与延迟,匹配内存配比下的 CPU 数量。
  3. 预留安全水位:为查询执行、非向量列访问与 Compaction 留出冗余。

ANN 资源特征

相比常规 OLAP 索引,ANN 在资源使用上有以下特点:

资源维度资源特征
构建阶段 CPU使用率高,导入期对 CPU 压力大
构建阶段内存Segment 过大时,单个索引构建可能因内存不足失败
查询阶段内存高性能查询通常要求索引尽量常驻内存
查询阶段 CPU高 QPS 场景对 CPU 核心数有明显要求

Doris 支持 sq8sq4pq 三种量化方式来降低内存占用。量化的代价通常是:

  • 导入变慢:额外编码开销。
  • 查询可能变慢:额外解码或重构开销。
  • 召回率可能下降:有损编码引入误差。

评估输入清单

开始评估前,请准备以下输入:

输入项说明
向量维度 D单个向量的浮点维度,例如 768
总行数 N待索引的向量总数
索引类型hnsw / ivf / ivf_on_disk
量化方式flat / sq8 / sq4 / pq
max_degree仅 HNSW,控制图结构邻居数,默认 32
目标 QPS 与延迟用于 CPU 核心估算

HNSW 内存估算

默认参数下的经验公式

在默认 max_degree=32 时:

HNSW_FLAT_Bytes ~= 1.3 * D * 4 * N

其中:

  • D * 4 * N 为原始 float32 向量内存。
  • 1.3 表示 HNSW 图结构额外开销(约 0.3 倍)。

调整 max_degree 时的修正

max_degree 越大,图结构开销越高,按比例放大:

HNSW_factor   ~= 1 + 0.3 * (max_degree / 32)
HNSW_FLAT_Bytes ~= HNSW_factor * D * 4 * N

量化对内存的近似缩减

量化方式内存占比(相对 FLAT)
sq81/4
sq41/8
pq通常接近 sq4(如 pq_m=D/2, pq_nbits=8

ivf_on_disk 的特殊说明

ivf_on_disk 复用了 IVF 的训练与查询参数模型(nlist / ivf_nprobe),但将倒排列表主体放在磁盘并通过缓存提供查询能力。做容量规划时,可先把下文的 IVF 估算视为「全量驻内存」的上界,再结合期望保留的热点数据规模单独规划 ann_index_ivf_list_cache_limit

速查表(D=768max_degree=32

行数FLATSQ8SQ4PQ(m=384, nbits=8
1M4 GB1 GB0.5 GB0.5 GB
10M40 GB10 GB5 GB5 GB
100M400 GB100 GB50 GB50 GB
1B4000 GB1000 GB500 GB500 GB
10B40000 GB10000 GB5000 GB5000 GB

IVF 内存估算

IVF 相比 HNSW 结构开销更低,可近似为:

IVF_FLAT_Bytes ~= D * 4 * N

量化对 IVF 内存的缩减比例与 HNSW 一致:

量化方式内存占比(相对 FLAT)
sq81/4
sq41/8
pq通常接近 sq4

速查表(D=768

行数FLATSQ8SQ4PQ(m=384, nbits=8
1M3 GB0.75 GB0.35 GB0.35 GB
10M30 GB7.5 GB3.5 GB3.5 GB
100M300 GB75 GB35 GB35 GB
1B3000 GB750 GB350 GB350 GB
10B30000 GB7500 GB3500 GB3500 GB

CPU 核心估算

高 QPS 场景可先用经验比例估算:

16 核 : 64 GB   (约 1 核 : 4 GB)

注意:即使开启量化,CPU 需求也不一定按索引内存同比下降。实践上建议:

  1. 先按 FLAT 等效负载 估算 CPU。
  2. 通过实际压测逐步下调到合理水平。

线上安全余量(不要按 100% 内存设计)

上面的公式只覆盖 ANN 索引本身,不包含完整 SQL 执行开销。例如:

SELECT id, text, l2_distance_approximate(embedding, [...]) AS dist
FROM tbl
ORDER BY dist
LIMIT N;

即使有 TopN 延迟物化,执行层仍需要额外内存处理非向量列与算子状态。线上建议:

  • ANN 索引内存控制在机器总内存的约 70% 以内。
  • 其余内存用于查询执行、Compaction 与其他数据访问。

场景化选型建议

场景推荐方案说明
性能优先且内存预算充足HNSW + FLAT召回率与延迟最佳
内存受限HNSW/IVF + PQ通常比 SQ8/SQ4 更平衡
PQ 参数初值pq_m = D / 2后续按召回与延迟压测微调
查询性能要求不高优先降低 CPU 配置也可采用「导入期高 CPU、稳定期降配」策略

FAQ

Q1:开启量化后内存能减少多少?

A:sq8 约为 FLAT 的 1/4sq4pq(如 pq_m=D/2, pq_nbits=8)约为 1/8。具体值仍受 HNSW 图结构开销影响。

Q2:CPU 是否可以按量化后的内存比例同步缩减?

A:不建议。量化主要降低内存占用,CPU 需求并不同比例下降。建议先按 FLAT 等效负载估算 CPU,再通过压测下调。

Q3:max_degree 调大后内存如何变化?

A:HNSW 图结构开销按 1 + 0.3 * (max_degree / 32) 放大。例如 max_degree=64 时,因子约为 1.6

Q4:ivf_on_disk 应该按多少内存做规划?

A:上界为「全量驻内存的 IVF」,实际驻内存大小由 ann_index_ivf_list_cache_limit 决定,可结合热点数据规模单独评估。

Q5:为什么不能按 100% 内存来设计?

A:ANN 索引外,SQL 执行层(非向量列、算子状态)、Compaction 与其他访问也会占用内存。建议预留约 30% 余量,索引内存控制在总内存的 70% 以内。

相关文档