AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


百度向量数据库 VectorDB 性能报告
发布日期:2024-04-24 18:56:30 浏览次数: 1785


百度向量数据库 VectorDB 是一款纯自研高性能、高性价比、生态丰富且即开即用的向量数据库服务,提供高效的向量索引和相似度查询服务。为了让用户更好地了解VectorDB的性能表现,VectorDB性能白皮书详细描述了性能测试环境、测试方法和测试结果。本章节说明性能测试所需的环境与数据集。

数据库规格

测试实例规格如下表格所示:

规格项 规格信息
数据库类型 标准版
代理节点数 2
数据节点规格 4c8g(4核心,8GB内存)
数据节点数 3

该规格所支持的最大向量规模,请参见产品规格,并按照以上规格新建向量数据库实例,具体操作的流程,请参见“快速指南-创建实例”。

客户端测试环境

与百度云向量数据库实例为同一地域同一VPC内的云服务器,其环境要求如下:

  • 操作系统:CentOS / 8.4 x86_64 (64bit)

  • 规格:8c16g(8核心,16GB内存)

说明: 在使用BCC连接VectorDB实例时,需要在BCC关联的安全组中配置出站规则,把百度VectorDB实例的IP及端口添加到出站规则中,避免因为安全组的问题导致连接失败。

测试工具

我们基于Go语言自研了性能测试工具ann-benchamrk,用于评估近似最近邻(ANN)检索库的性能测试工具,能够避免客户自行解决客户端依赖,快速进行性能测试和对比。它提供了一套标准的测试数据集和评估指标,可以用于比较不同量级数据集下向量数据库的性能表现。

本测试基于该ann-benchmark进行,以下是测试工具的运行方法:

./bin/ann-benchmark -conf ./conf/conf.toml

参数 参数含义
-conf 测试工具的配置文件路径,默认为conf文件夹下的conf.toml文件,具体配置文件中配置项含义,会在测试方法小节中详细介绍

数据集

测试过程使用的官方数据集都需要提前下载,测试工具在运行时会检查./dataset目录(ann-benchmark工具的根目录)下是否存在数据集文件,为了确保在使用测试工具时无需另外单独安装环境依赖,百度云向量数据库团队转换提供了parquet文件格式的ann数据集,并制作了Cohere 768维度数据集。具体数据集信息,如下表所示:

数据集名 数据集介绍 向量维度 向量数 距离类型
SIFT_1M 官方数据集 128 1,000,000 L2
GIST_1M 官方数据集 960 1,000,000 L2
COHERE_1M 官方数据集 768 1,000,000 IP


测试方法

百度智能云VectorDB采用自研的性能测试工具ann-benchmark进行测试比对,该工具不依赖外部组件,并提供了官方的标准数据集和自制的数据集。本文详细介绍下基于ann-benchmark工具进行数据库性能测试的方法。

准备测试环境

  1. 下载测试工具。下载链接:linux-ann-benchmark-1.0.1.tar.gz

  2. 下载百度智能云VectorDB提供的数据集文件,下载链接见测试环境小节。

  3. 登录百度智能云BCC测试客户端环境(BCC的规格要求,请参见测试环境)。

  4. 执行tar -zxvf linux-ann-benchmark-1.0.1.tar.gz命令解压测试工具压缩包。

  5. 下载数据集,并放在测试工具目录dataset文件夹下。

修改配置文件

进入测试工具目录,打开配置文件,配置相关参数 执行如下命令,拷贝配置文件,根据需要修改参数:

vim conf/conf.toml

样例配置文件的内容如下所示:

logDir = "./log"

# Config for ann benchmark dataset
[Dataset]
path = "./dataset"
name = "SIFT_1M"

# Config for vector store
[VectorStore]
name = "Mochow"
endpoint = "http://127.0.0.1:5378"
user = "root"
password = "test_password"
database = "benchmark_db"
table = "benchmark_table"
dropExistingTable = true

# Common Config for Test Case
[TestCase]
vectorIndex = "HNSW"
topK = 10
concurrency = [24, 36, 48]
duration = 120
recallRangeForQPSBench = [0.8, 0.995]

# Config for hnsw index build
[TestCase.HNSW.Index]
M = [16, 32]
efConstruction = 200

# Config for hnsw search
[TestCase.HNSW.Search]
ef = [20, 40, 60, 80, 100, 120, 140, 160, 180, 200, 400, 600, 800, 1000, 1200, 1400, 1600, 1800, 2000]

配置项参数含义如下:

配置项 参数含义 说明
logDir 测试工具日志目录 ./log:工具根目录下的log目录
Dataset.path 测试数据集存放目录名 ./dataset
Dataset.name 数据集名称 支持如下几种:
  • SIFT_1M:128维,L2相似度度量算法 

  • COHERE_1M:768维,L2相似度度量算法 

  • GIST_1M:960维,IP相似度度量算法

VectorStore.name 向量数据库名称 支持如下两种:
  • Mochow:即百度智能云VectorDB 

  • Milvus:即Milvus向量数据库

VectorStore.endpoint 向量数据库的连接地址 获取向量数据库实例的内网IP地址与网络端口。可以在实例详情中的网络信息中查看,实际使用时建议添加协议前缀,目前支持http和https
VectorStore.user 连接用户名 默认为root
VectorStore.password 向量数据库的API访问密钥 如何获取,请参见 账号管理
VectorStore.database 测试使用的库名称
VectorStore.table 测试使用的表名称
VectorStore.dropExistingTable 是否删除并清空已存在的测试表 TRUE
TestCase.vectorIndex 向量索引类型 目前仅支持HNSW
TestCase.topK 向量相似性检索最多返回的记录数 默认为10
TestCase.concurrency QPS测试Case中使用的并发数 QPS测试中会依次尝试concurrency列表中不同的并发数
TestCase.duration QPS测试Case的持续时间,单位为秒 默认为120s
TestCase.recallRangeForQPSBench QPS测试的召回率闭区间 在召回率范围内的测试集会进行QPS测试
TestCase.HNSW.Index 向量索引类型为HNSW的索引参数:
  • M:每个节点在索引构图中可以连接多少个邻居节点 

  • efConstruction:索引构图时,指定寻找节点邻居遍历的范围。数值越大构图效果越好,构图时间越长,固定为200

写入数据集后,会依次使用不同的M和efConstruction值构建索引测试召回率和QPS
TestCase.HNSW.Search.ef 向量索引类型为HNSW的检索参数: 
  • ef:搜索过程的动态候选集的大小

在进行召回率和QPS测试时,会依次尝试使用列表中的ef参数测试召回率和QPS。同一数据集,召回率越高,即ef参数设置越大时,QPS越低。在其他配置不变的情况下,若需提高召回率,可适当增加查询参数 ef


运行测试工具

执行如下命令,运行测试工具。其中,-conf指明配置文件路径,配置文件中配置项的含义,请参见上一小节。

cd linux-ann-benchmark-1.0.1
./bin/ann-benchmark -conf ./conf/conf.toml


查看测试结果

测试结果

测试结束后,结果会写入到工具根目录的result/benchmark_result_{测试开始时间}格式文件中,内容样例如下:

Mochow {M:16, efc:200} {ef:100} 82.76% 2431.7927

其中每一行为一组测试参数下的测试结果,以空格分割开,每一部分的含义如下:

  • Mochow:本次测试采用的向量数据库类型;

  • {M:16, efc:200}:向量索引的构建参数;

  • {ef:100}:向量检索参数;

  • 82.76%:召回率;

  • 2431.7927:最大QPS;

实例状态

百度智能云VectorDB控制台提供了实例的CPU、内存、QPS、时延等关键性能指标监控,可以在测试过程中观察上述指标的状态,具体观察方法,请参见 查看监控数据。

测试方法

百度智能云VectorDB采用自研的性能测试工具ann-benchmark进行测试比对,该工具不依赖外部组件,并提供了官方的标准数据集和自制的数据集。本文详细介绍下基于ann-benchmark工具进行数据库性能测试的方法。

准备测试环境

  1. 下载测试工具。下载链接:linux-ann-benchmark-1.0.1.tar.gz

  2. 下载百度智能云VectorDB提供的数据集文件,下载链接见测试环境小节。

  3. 登录百度智能云BCC测试客户端环境(BCC的规格要求,请参见测试环境)。

  4. 执行tar -zxvf linux-ann-benchmark-1.0.1.tar.gz命令解压测试工具压缩包。

  5. 下载数据集,并放在测试工具目录dataset文件夹下。

修改配置文件

进入测试工具目录,打开配置文件,配置相关参数 执行如下命令,拷贝配置文件,根据需要修改参数:

vim conf/conf.toml

样例配置文件的内容如下所示:

logDir = "./log"

# Config for ann benchmark dataset
[Dataset]
path = "./dataset"
name = "SIFT_1M"

# Config for vector store
[VectorStore]
name = "Mochow"
endpoint = "http://127.0.0.1:5378"
user = "root"
password = "test_password"
database = "benchmark_db"
table = "benchmark_table"
dropExistingTable = true

# Common Config for Test Case
[TestCase]
vectorIndex = "HNSW"
topK = 10
concurrency = [24, 36, 48]
duration = 120
recallRangeForQPSBench = [0.8, 0.995]

# Config for hnsw index build
[TestCase.HNSW.Index]
M = [16, 32]
efConstruction = 200

# Config for hnsw search
[TestCase.HNSW.Search]
ef = [20, 40, 60, 80, 100, 120, 140, 160, 180, 200, 400, 600, 800, 1000, 1200, 1400, 1600, 1800, 2000]

配置项参数含义如下:

配置项 参数含义 说明
logDir 测试工具日志目录 ./log:工具根目录下的log目录
Dataset.path 测试数据集存放目录名 ./dataset
Dataset.name 数据集名称 支持如下几种:
  • SIFT_1M:128维,L2相似度度量算法 

  • COHERE_1M:768维,L2相似度度量算法 

  • GIST_1M:960维,IP相似度度量算法

VectorStore.name 向量数据库名称 支持如下两种:
  • Mochow:即百度智能云VectorDB 

  • Milvus:即Milvus向量数据库

VectorStore.endpoint 向量数据库的连接地址 获取向量数据库实例的内网IP地址与网络端口。可以在实例详情中的网络信息中查看,实际使用时建议添加协议前缀,目前支持http和https
VectorStore.user 连接用户名 默认为root
VectorStore.password 向量数据库的API访问密钥 如何获取,请参见 账号管理
VectorStore.database 测试使用的库名称
VectorStore.table 测试使用的表名称
VectorStore.dropExistingTable 是否删除并清空已存在的测试表 TRUE
TestCase.vectorIndex 向量索引类型 目前仅支持HNSW
TestCase.topK 向量相似性检索最多返回的记录数 默认为10
TestCase.concurrency QPS测试Case中使用的并发数 QPS测试中会依次尝试concurrency列表中不同的并发数
TestCase.duration QPS测试Case的持续时间,单位为秒 默认为120s
TestCase.recallRangeForQPSBench QPS测试的召回率闭区间 在召回率范围内的测试集会进行QPS测试
TestCase.HNSW.Index 向量索引类型为HNSW的索引参数:
  • M:每个节点在索引构图中可以连接多少个邻居节点 

  • efConstruction:索引构图时,指定寻找节点邻居遍历的范围。数值越大构图效果越好,构图时间越长,固定为200

写入数据集后,会依次使用不同的M和efConstruction值构建索引测试召回率和QPS
TestCase.HNSW.Search.ef 向量索引类型为HNSW的检索参数: 
  • ef:搜索过程的动态候选集的大小

在进行召回率和QPS测试时,会依次尝试使用列表中的ef参数测试召回率和QPS。同一数据集,召回率越高,即ef参数设置越大时,QPS越低。在其他配置不变的情况下,若需提高召回率,可适当增加查询参数 ef


运行测试工具

执行如下命令,运行测试工具。其中,-conf指明配置文件路径,配置文件中配置项的含义,请参见上一小节。

cd linux-ann-benchmark-1.0.1
./bin/ann-benchmark -conf ./conf/conf.toml


查看测试结果

测试结果

测试结束后,结果会写入到工具根目录的result/benchmark_result_{测试开始时间}格式文件中,内容样例如下:

Mochow {M:16, efc:200} {ef:100} 82.76% 2431.7927

其中每一行为一组测试参数下的测试结果,以空格分割开,每一部分的含义如下:

  • Mochow:本次测试采用的向量数据库类型;

  • {M:16, efc:200}:向量索引的构建参数;

  • {ef:100}:向量检索参数;

  • 82.76%:召回率;

  • 2431.7927:最大QPS;

实例状态

百度智能云VectorDB控制台提供了实例的CPU、内存、QPS、时延等关键性能指标监控,可以在测试过程中观察上述指标的状态,具体观察方法,请参见 查看监控数据。

测试结果说明

本文提供了百度智能云VectorDB和某开源系统的对比测试结果报告。性能报告主要主要关注以下两个指标:

  • 检索QPS或吞吐:系统在单位时间内能够处理的检索请求数量,是衡量检索性能的关键指标。

  • 召回率:检索的TopK结果中,满足真实情况(KNN检索)的TopK集合的比例,是衡量向量检索精度的关键指标。

本文的所有测试都是在相同规格的实例下进行的,测试配置如下:

  1. 测试方法:向量索引选择HNSW,检索最相似Top10的向量,对比百度云向量数据库与某开源向量数据库的QPS表现。

  2. 测试规格:数据节点规格均为4核+8GB内存的配置,数据节点数量均为3个。

  3. 数据集:测试SIFT128、COHERE768、GIST960三种维度的数据集,数据集大小均为100万。

  4. 数据表配置:数据表均为1个分区/分片,分片副本数(含主副本)均为3。

测试结果


SIFT(128维)

128维数据集下,百度智能云VectorDB与某开源向量数据库的QPS对比结果如下图所示:

详细测试结果如下表所示:

数据集 索引类型 召回率 QPS
某开源向量数据库 百度智能云VectorDB
SIFT_1M HNSW(M=32,efConstruction=200) 95% 3269 22261(↑580%)
98% 3200 18942(↑491%)
99% 3055 14572(↑376%)


COHERE(768维)

768维数据集下,百度智能云VectorDB与某开源向量数据库的QPS对比结果如下图所示:

详细测试结果如下图所示:


数据集 索引类型 召回率 QPS
某开源向量数据库 百度智能云VectorDB
COHERE_1M HNSW(M=32,efConstruction=200) 95% 1508 11223(↑644%)
98% 1037 5866(↑465%)
99% 658 4138(↑528%)

GIST(960维)

768维数据集下,百度智能云VectorDB与某开源向量数据库的QPS对比结果如下图所示:

详细测试结果如下图所示:


数据集 索引类型 召回率 QPS
某开源向量数据库 百度智能云VectorDB
GIST_1M HNSW(M=32,efConstruction=200) 95% 958 2856(↑198%)
98% 647 1632(↑152%)
99% 503 926(↑84%)



53AI,企业落地应用大模型首选服务商

产品:大模型应用平台+智能体定制开发+落地咨询服务

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询