pcl 使用gpu计算法向量_分布式向量搜索系统Vearch的GPU版使用方法

87acea498045b91115cb8a2c93e4ee5a.png
简介: Vearch是一个分布式向量搜索系统,可以用来计算向量相似度或用于机器学习领域 如:图像识别, 视频识别或自然语言处理各个领域。

代码地址:

https://github.com/vearch/vearch​github.com

部署流程:

https://github.com/vearch/vearch/blob/master/docs/Quickstart.md​github.com

中文文档:

https://vearch.readthedocs.io/zh_CN/latest/overview.html​vearch.readthedocs.io

本文主要介绍GPU版的部署及使用

系统要求:

  1. CUDA版本大于等于9
  2. 显卡算力要求3.5以上

支持多张显卡,系统部署后,会自动占用所有显卡,在使用单卡时,GPU的速度是CPU的5-10倍,随着显卡数量增多,性能基本呈线性提升

Vearch的GPU版暂时不支持实时插入功能,所以建表并插入数据后,手动调用建索引命令:

{{ROUTER

为了防止插入数据时触发建索引操作,建表时需指定index_size大于等于max_size

Faiss为了保证运算速度,设置了最大nprobe和最大召回数量GPU_MAX_SELECTION_K,其中CUDA版本小于9.2时,GPU_MAX_SELECTION_K为1024,CUDA版本大于等于9.2时,GPU_MAX_SELECTION_K为2048

按照文档部署服务,其中create space步骤需要指定retrieval_type为GPU,并且nprobe小于等于2048(CUDA版本大于等于9.2)

测试过程:

服务器配置:

CPU:Intel(R) Xeon(R) CPU E5-2680 v4 @ 2.40GHz(56核)

显卡:Tesla P40(4张显卡),CUDA 10.2

内存:256G

  1. create database,创建数据库
  2. create space,其中engin参数为:"engine": {"name":"gamma", "index_size":15000000, "max_size":15000000, "nsubvector":64, "ncentroids": 2048}
  3. 插入1500万512维数据
  4. 使用ab进行压测,其中quick设置成false,不使用原始向量进行排序,在数据量巨大的时候,部分数据会存储在磁盘上,如果这时候还要计算相似度的精确值,将会拖慢系统速度。ab并发设置成1000,每次召回100条结果

建完索引后,显卡信息如下

c079dbf8a4edfd5da2f36960f3b6ab6c.png

压测过程中

8a7cad0afff35bfa980a113e4aea0daa.png

CPU占用

97ca9d557c0ffbc8c44f717c1791865e.png

GPU占用只有20%左右,说明在1500万数据量情况下,性能还有很大富裕

9f3b0e572102c4088dec5492794b210f.png

上图是ab的输出结果,QPS达到了4047,tp99为56毫秒,平均响应时间为24毫秒(图中的Failed requests全部为Length,这个是因为返回结果有耗时took字段,每个请求的耗时不可能全部一样,所以这些失败并不是真正的请求失败)

Q&A:

  1. 建完索引后,能不能继续插入数据呢?

答:能继续插入数据,只是新插入的数据只能在再次调用建索引命令_forcemerge后才能被搜索出,并且建索引的过程中不能进行搜索。

2. 索引何时dump?

答:建索引后自动dump,如果多次建索引,则保留最新的dump文件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值