AI 与向量

选择计算插件

为您的向量工作负载选择合适的计算插件。


您有两种扩展向量工作负载的选项:

  1. 增加数据库大小。本指南将帮助您为工作负载选择合适的大小。
  2. 将工作负载分散到多个数据库。您可以在工程扩展中找到关于此方法的更多详细信息。

维度

嵌入向量的维度数量是选择合适计算附加组件的最重要因素。一般来说,维度越低性能越好。我们为一些更常见的嵌入维度提供了指导建议。对于每个基准测试,我们使用Vecs创建集合,将嵌入向量上传到单个表,并为嵌入列创建IVFFlatHNSW索引(使用inner-product距离度量)。然后我们运行了一系列查询来测量不同计算附加组件的性能:

HNSW

384 维向量

该基准测试使用 dbpedia-entities-openai-1M 数据集,其中包含 1,000,000 个文本嵌入向量,重新生成为 384 维向量。每个嵌入向量都是使用 gte-small 生成的。

计算规格向量数量m构建ef值搜索ef值QPS平均延迟P95延迟内存使用量内存
微型100,0001664605800.017 秒0.024 秒1.2 (交换)1 GB
小型250,0002464604400.022 秒0.033 秒2 GB2 GB
中型500,0002464803500.028 秒0.045 秒4 GB4 GB
大型1,000,00032801002700.073 秒0.108 秒7 GB8 GB
超大1,000,00032801005250.038 秒0.059 秒9 GB16 GB
2倍超大1,000,00032801007900.025 秒0.037 秒9 GB32 GB
4倍超大1,000,000328010016500.015 秒0.018 秒11 GB64 GB
8倍超大1,000,000328010026900.015 秒0.016 秒13 GB128 GB
12倍超大1,000,000328010039000.014 秒0.016 秒13 GB192 GB
16倍超大1,000,000328010042000.014 秒0.016 秒20 GB256 GB

基准测试准确率为 0.99。

960维向量

该基准测试使用了gist-960数据集,其中包含1,000,000个图像嵌入向量。每个嵌入向量为960维。

计算规格向量数量mef_constructionef_searchQPS平均延迟p95延迟内存使用量内存
微型30,0001664654300.024秒0.034秒1.2 GB (交换)1 GB
小型100,0003280602600.040秒0.054秒2.2 GB (交换)2 GB
中型250,0003280901200.083秒0.106秒4 GB4 GB
大型500,00032801201600.063秒0.087秒7 GB8 GB
超大1,000,00032802002000.049秒0.072秒13 GB16 GB
2XL1,000,00032802003400.025秒0.029秒17 GB32 GB
4XL1,000,00032802006300.031秒0.050秒18 GB64 GB
8XL1,000,000328020011000.034秒0.048秒19 GB128 GB
12XL1,000,000328020014200.041秒0.095秒21 GB192 GB
16XL1,000,000328020016500.037秒0.081秒23 GB256 GB

基准测试的准确率为0.99。

通过增加mef_construction参数可以进一步提升QPS。这将允许您使用更小的ef_search值来提高QPS。

1536 维向量

该基准测试使用 dbpedia-entities-openai-1M 数据集,其中包含 1,000,000 个文本嵌入向量。对于计算附加项 large 及以下规格,还使用了来自维基百科文章的 224,482 个嵌入向量。每个嵌入向量均为 1536 维,由 OpenAI 嵌入 API 生成。

计算规格向量数量mef_constructionef_searchQPS平均延迟p95 延迟内存使用量内存
Micro15,0001640404800.011 秒0.016 秒1.2 GB (交换)1 GB
Small50,00032641001750.031 秒0.051 秒2.2 GB (交换)2 GB
Medium100,00032641002400.083 秒0.126 秒4 GB4 GB
Large224,48232641002800.017 秒0.028 秒8 GB8 GB
XL500,00024561003600.055 秒0.135 秒13 GB16 GB
2XL1,000,00024562505600.036 秒0.058 秒32 GB32 GB
4XL1,000,00024562509500.021 秒0.033 秒39 GB64 GB
8XL1,000,000245625016500.016 秒0.023 秒40 GB128 GB
12XL1,000,000245625019000.015 秒0.021 秒38 GB192 GB
16XL1,000,000245625022000.015 秒0.020 秒40 GB256 GB

基准测试的准确率为 0.99。

通过增加 mef_construction 可以进一步提升 QPS。这将允许您使用更小的 ef_search 值从而提高 QPS。例如,对于 4XL 规格,将 m 增加到 32 并将 ef_construction 增加到 80 可使 QPS 提升至 1280。

IVFFlat 索引

(注:IVFFlat 是 Inverted File with Flat Compression 的缩写,是一种用于向量相似性搜索的索引方法。在中文技术文档中通常保留原名不翻译,但可以在首次出现时添加说明)

IVFFlat 是一种基于聚类的近似最近邻(ANN)搜索算法,通过将向量空间划分为多个聚类单元来加速搜索。它通过以下两个阶段工作:

  1. 训练阶段:使用 k-means 算法将向量空间划分为 nlist 个聚类中心
  2. 搜索阶段:只搜索距离查询向量最近的 nprobe 个聚类中的向量

这种索引方法在搜索精度和性能之间提供了良好的平衡,特别适合中等维度的向量数据(通常维度在100-1000之间)。

384 维向量

该基准测试使用 dbpedia-entities-openai-1M 数据集,包含 1,000,000 个文本嵌入向量,专门针对 384 维向量重新生成。每个嵌入向量均使用 gte-small 模型生成。

计算规格向量数量列表数探测数QPS平均延迟p95延迟内存使用量内存
Micro100,000500502050.048 秒0.066 秒1.2 GB (交换)1 GB
Small250,0001000601600.062 秒0.079 秒2 GB2 GB
Medium500,0002000801200.082 秒0.104 秒3.2 GB4 GB
Large1,000,0005000150750.269 秒0.375 秒6.5 GB8 GB
XL1,000,00050001501500.131 秒0.178 秒9 GB16 GB
2XL1,000,00050001503000.066 秒0.099 秒10 GB32 GB
4XL1,000,00050001505700.035 秒0.046 秒10 GB64 GB
8XL1,000,000500015014000.023 秒0.028 秒12 GB128 GB
12XL1,000,000500015015500.030 秒0.039 秒12 GB192 GB
16XL1,000,000500015018000.030 秒0.039 秒16 GB256 GB

960 维向量基准测试

该基准测试使用 gist-960 数据集,其中包含 1,000,000 个图像嵌入向量。每个嵌入向量为 960 维。

计算规格向量数量列表数QPS平均延迟P95 延迟内存使用量内存
微型30,00030750.065 秒0.088 秒1.1 GB (交换)1 GB
小型100,000100780.064 秒0.092 秒1.8 GB2 GB
中型250,000250580.085 秒0.129 秒3.2 GB4 GB
大型500,000500550.088 秒0.140 秒5 GB8 GB
超大1,000,00010001100.046 秒0.070 秒14 GB16 GB
2倍超大1,000,00010002350.083 秒0.136 秒10 GB32 GB
4倍超大1,000,00010004200.071 秒0.106 秒11 GB64 GB
8倍超大1,000,00010008150.072 秒0.106 秒13 GB128 GB
12倍超大1,000,000100011500.052 秒0.078 秒15.5 GB192 GB
16倍超大1,000,000100013450.072 秒0.106 秒17.5 GB256 GB

1536 维向量

本基准测试使用 dbpedia-entities-openai-1M 数据集,其中包含 1,000,000 个文本嵌入向量。每个嵌入向量是通过 OpenAI 嵌入 API 生成的 1536 维向量。

计算规格向量数量列表数QPS平均延迟P95延迟内存使用量内存
微型20,000401350.372 秒0.412 秒1.2 GB (交换)1 GB
小型50,0001001400.357 秒0.398 秒1.8 GB2 GB
中型100,0002001300.383 秒0.446 秒3.7 GB4 GB
大型250,0005001300.378 秒0.434 秒7 GB8 GB
超大500,00010002350.213 秒0.271 秒13.5 GB16 GB
2XL1,000,00020003800.133 秒0.236 秒30 GB32 GB
4XL1,000,00020007200.068 秒0.120 秒35 GB64 GB
8XL1,000,000200012500.039 秒0.066 秒38 GB128 GB
12XL1,000,000200016000.030 秒0.052 秒41 GB192 GB
16XL1,000,000200017900.029 秒0.051 秒45 GB256 GB

对于 1,000,000 个向量,10 次探测的准确率为 0.91。而对于 500,000 及以下数量的向量,10 次探测的准确率在 0.95-0.99 之间。要提高准确率,需要增加探测次数。

性能优化技巧

有多种方法可以提升您的 pgvector 性能。以下是一些实用建议:

数据库预热

在生产环境上线前执行数千次"预热"查询非常有用。这有助于优化内存利用率,同时也能帮助确认您为工作负载选择了合适的计算规格。

微调索引参数

您可以通过增加 mef_constructionlists 参数来提高每秒请求数。但需要注意一个重要事项:这些参数值越高,构建索引所需的时间就越长。

更多技巧和完整的分步指南,请参阅AI应用生产环境部署指南

基准测试方法

我们遵循ANN Benchmarks方法中概述的技术。Python测试运行器负责上传数据、创建索引和执行查询。pgvector引擎使用vecs实现,这是一个用于pgvector的Python客户端。

每个测试至少运行30-40分钟。测试包含在不同并发级别下执行的一系列实验,以测量引擎在不同负载类型下的性能表现。最终结果取平均值。

作为通用建议,我们推荐对大多数工作负载使用5或更高的并发级别,对高负载工作负载使用30或更高的并发级别。