文章目录
0 概述
Vearch 对大规模深度学习向量进行高效相似搜索的弹性分布式系统。
参考文档:
- github地址:https://github.com/vearch/vearch
- 中文文档:https://vearch.readthedocs.io/zh_CN/latest/overview.html
参考实例:
- 官方部署实例:https://github.com/vearch/vearch/blob/master/docs/Quickstart.md
- 中文大佬ansj的文章:https://my.oschina.net/ansj/blog/3117596
1 安装
由于公司服务器不能上网,所有操作尽量离线安装。
参考:官方安装部署教程:https://github.com/vearch/vearch/blob/master/docs/Deploy.md
参考:官方安装部署教程:https://vearch.readthedocs.io/zh_CN/latest/quick-start-guide.html
1.1 安装anaconda
参考《linux安装jdk以及eclipse,安装Anaconda与pyChram》 https://blog.csdn.net/u012052268/article/details/77160683
安装完成后,别忘记配置环境变量:
vi ~/.bashrc
加入以下几句话:
PATH=/home/myName/anaconda3/bin:$PATH
export PATH
使配置生效:
source ~/.bashrc
1.2 安装docker
按照文章《20191120离线安装docker》的方式安装好docker。
并下哦那个docker hub离线下载镜像 vearch_env
。这个镜像是编译 vearch的基础环境,有了它就不用装哪些那七八糟的东西了。
1.3 安装vearch
1.3.1 下载vearch源码
cd /home/vearch
1.3.2 准备编译环境
docker pull ansj/vearch_env:0.3 # 或者 从离线的地方load进来,有了vearch_env 就可以编译vearch了
1.3.3 运行
cd vearch/cloud/
bash run_docker.sh
这个打包命令将进行一下所有操作(1.2.3.1-1.2.3.4),以下的都不用做了。
如果启动成功你将会看到如下信息:
2019/10/15 04:58:13 startup.go:63: [INFO] start server by version:[0.1] commitID:[3a0ed89b690ea2cf566a45fc5681b0a1ca170726]
2019/10/15 04:58:13 startup.go:72: [INFO] The Config File Is: /vearch/config.toml
2019/10/15 04:58:13 startup.go:76: [INFO] The configuration content is:
打开浏览器访问 http://127.0.0.1:8817/ (或者 服务器地址加8817)可以看到下图说明启动是ok的:
1.3.3.1 编译Vearch
docker pull ansj/vearch_env # 或者 从离线的地方load进来,有了vearch_env 就可以编译vearch了
cd vearch/cloud/
bash compile.sh
这一步将自动生成容器vearch_env,运行docker ps -a
命令可以看到;
并在vearch_env的容器中编译vearch代码;
然后自动把编译后的代码拷贝出容器 到宿主机的:$vearch/build/bin
,$vearch/build/lib
文件夹中。
1.3.3.2 创建vearch可运行镜像
# 继续在cloud文件夹中:
bash build.sh
这一步会得到一个vearch的docker镜像iamge。分为7步:
- 构建centos7 基础环境
- Step 2/7 : ADD compile/bin /vearch/bin/
- Step 3/7 : ADD compile/lib /vearch/lib/
- Step 4/7 :
ENV MASTER_NAME="___MASTER_NAME___"
- Step 5/7 :
ENV LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/vearch/lib/"
- Step 6/7 : RUN yum install -y libgomp blas-devel lapack-devel
- ENTRYPOINT ["/vearch/bin/vearch","-conf" ,"/vearch/config.toml","-master","$MASTER_NAME"]
运行docker images
命令可以看到,多了一个ansj/vearch:0.3
的image
1.3.3.3 copy exaple配置文件过来作为单机配置
# 继续在cloud中
cat ../config/config.toml.example > config.toml
1.3.3.4 启动Vearch
# 直接运行
docker run -it -p 8817:8817 -p 9001:9001 -p 2378:2378 -p 2390:2390 -p 2370:2370 -p 6062:6062 -p 8818:8818 -p 6061:6061 -p 8081:8081 -p 8898:8898 -p 8899:8899 -p 6060:6060 -v $PWD/config.toml:/vearch/config.toml ansj/vearch:0.3 all
### 其实 单机模式中 只对外暴露 8817、9001 两个端口即可运行。
### 但是为了以后分布式部署方便。 把所有使用到的端口 都暴露出来。这样,多台机器之间的数据连接端口无障碍。
1.3.4 运行图像检索插件
这里会调用 python环境 以及训练好的VGG16模型。 所以需要安装一些python包,提前安装好的可以忽略:
- shortuuid
- opencv-python-4.1.1.26
- opencv-python_headless (一定要装,否则会报
ImportError: libSM.so.6
错误) - msgpack
- torch1.2 (一定要在官网 安装cpu版本啊 血的教训)
- torchvision 0.4 (一定要在官网 安装cpu版本啊 血的教训)
- pytorch官网上下载的
vgg16.pth
放到~/.cache/torch/checkpoints/
里面 - 下载yolov3.weights 放入
/home/CVpy36/xuqingtang/vearch/plugin/model/
以上环境准备好了,启动图片插件
cd /home/vearch/vearch/plugin
nohup ./bin/run.sh image &
看到 ↓ 信息就成功了:
load model success
或者进入src直接运行python文件
cd /home/vearch/vearch/plugin/src
nohup python main.py --model_name=image_retrieval &
这个插件写好了flask接口,所有的请求通过4101访问,不用8817了。
2 测试使用
参考:
- https://github.com/vearch/vearch/blob/master/docs/Quickstart.md
- https://github.com/vearch/vearch/blob/master/docs/APIVisualSearch.md
- https://vearch.readthedocs.io/zh_CN/latest/use_op/op_db.html
2.1 建库建表:
建立一个名为testDb 的库,其中有名为 testSpace的表;
并且使用 vgg16 建模。
curl -XPOST -H "content-type:application/json" -d '{ "db": true, "method": 0, "columns": { "imageurl": { "type": "keyword" }, "boundingbox": { "type": "keyword" }, "label": { "type": "keyword" } }, "feature": { "type": "vector", "filed": "imageurl", "model_id": "vgg16", "dimension": 512 } }' http://127.0.0.1:4101/testDb/testSpace/_create
如果成功之后,会返回:
{ "code": 200, "db_msg": "success", "space_msg": "success"}
2.2 删除表格
curl -XPOST -H "content-type:application/json" -d '{ "db": false, "space": true }' http://127.0.0.1:4101/test/test/_delete
成功的响应如下所示:
{ "code": 200, "db_msg": null, "space_msg": "success"}
2.3 数据插入
- 单条数据插入:
# single insert
curl -XPOST -H "content-type:application/json" -d '{ "imageurl": "../images/image_retrieval/test/COCO_val2014_000000123599.jpg", "detection": false, "boundingbox": "10,10,290,290", "label": "coat" }' http://127.0.0.1:4101/test/test/_insert
返回值为:
{ "db": "testDb", "space": "testSpace", "ids": [{ "AW3tYgdsAkKsEQACQOnu": "successful"}], "successful": 1}
- csv批量导入演示的方法:
# bulk insert
curl -XPOST -H "content-type:application/json" -d '{ "method": "bulk", "imageurl": "../images/image_retrieval/test.csv", "detection": true }' http://127.0.0.1:4101/test/test/_insert
imageurl 字段可以直接输入base64字符串
2.4 尝试图片搜索
curl -XPOST -H "content-type:application/json" -d '{ "imageurl": "http://www.gming.org/uploadfile/2015/0914/20150914104444833.jpg", "size": 5 }' http://127.0.0.1:4101/testDb/testSpace/_search
size为你想获取的几个返回值。
插件内部编写了多种图像输入格式,所以可以
- 使用base64编码的本地图像进行搜索;
- 也可以使用图像URI搜索可公开访问的在线图像
- 或存储在本地图像文件夹中的图像。
搜索结果看起来像这样:
2.5 删除数据
使用以下curl命令按ID删除记录
# request
curl -XDELETE http://127.0.0.1:4101/test/test/AWz2IFBSJG6WicwQVTog
# response
{
"code": 200,
"msg": "success"
}
2.6 Update record by ID
# request
curl -XPOST -H "content-type:application/json" -d '{
"imageurl": "../images/image_retrieval/test/COCO_val2014_000000123599.jpg",
"detection": true
}' http://127.0.0.1:4101/test/test/_update?id=AWz2IFBSJG6WicwQVTog
# response
{
"db": "test",
"space": "test",
"ids": [
{
"AWz2IFBSJG6WicwQVTog": "successful"
}
],
"successful": 1
}
原文链接:https://lookme.blog.csdn.net/article/details/103264626
本站声明:网站内容来源于网络,如有侵权,请联系我们,我们将及时处理。
还没有人抢沙发呢~