百度向量数据库 VectorDB 性能报告

百度向量数据库 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官方数据集1281,000,000L2
GIST_1M官方数据集9601,000,000L2
COHERE_1M官方数据集7681,000,000IP

测试方法

百度智能云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.concurrencyQPS测试Case中使用的并发数QPS测试中会依次尝试concurrency列表中不同的并发数
TestCase.durationQPS测试Case的持续时间,单位为秒默认为120s
TestCase.recallRangeForQPSBenchQPS测试的召回率闭区间在召回率范围内的测试集会进行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.concurrencyQPS测试Case中使用的并发数QPS测试中会依次尝试concurrency列表中不同的并发数
TestCase.durationQPS测试Case的持续时间,单位为秒默认为120s
TestCase.recallRangeForQPSBenchQPS测试的召回率闭区间在召回率范围内的测试集会进行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、时延等关键性能指标监控,可以在测试过程中观察上述指标的状态,具体观察方法,请参见 查看监控数据。

cbe39d89c493be67d436b8ced7e64ac7.png

测试结果说明

本文提供了百度智能云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对比结果如下图所示:

8ab8389a0150463266fa702b8349918f.png

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

数据集索引类型召回率QPS
某开源向量数据库百度智能云VectorDB
SIFT_1MHNSW(M=32,efConstruction=200)95%326922261(↑580%)
98%320018942(↑491%)
99%305514572(↑376%)

COHERE(768维)

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

937c9dc43a388cecbbfd4a79f4e79e9c.png

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

数据集索引类型召回率QPS
某开源向量数据库百度智能云VectorDB
COHERE_1MHNSW(M=32,efConstruction=200)95%150811223(↑644%)
98%10375866(↑465%)
99%6584138(↑528%)

GIST(960维)

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

ae80346fc24b9a120d1bfc0a9734f399.png

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

数据集索引类型召回率QPS
某开源向量数据库百度智能云VectorDB
GIST_1MHNSW(M=32,efConstruction=200)95%9582856(↑198%)
98%6471632(↑152%)
99%503926(↑84%)
  • 12
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值