Milvus 是什么
Milvus 是一款开源的向量数据库,支持针对 TB 级向量的增删改操作和近实时查询,具有高度灵活、稳定可靠以及高速查询等特点。Milvus 集成了 Faiss、NMSLIB、Annoy 等广泛应用的向量索引库,提供了一整套简单直观的 API,让你可以针对不同场景选择不同的索引类型。此外,Milvus 还可以对标量数据进行过滤,进一步提高了召回率,增强了搜索的灵活性。
Milvus主要是在Ubuntu环境下进行开发的,我们推荐的编译环境首选是Ubuntu 18.04。在0.6.0之前的版本都是使用GPU加速的版本,但很多使用者反映他们希望在无GPU的机器上运行Milvus。于是我们在0.6.0上通过编译选项提供了CPU和GPU两种版本,但在CPU版本的Docker镜像没有发布前,很多使用者不得不自己去编译CPU版本,由于各人的机器环境千差万别而遇到了各种各样的编译问题。因此我们上传了两个Docker镜像,分别提供了Milvus CPU和GPU版本所需要的编译环境。
使用这两个镜像编译Milvus,具体做法如下:
步骤1 拉取镜像
CPU版编译环境的镜像:
docker pull milvusdb/milvus-cpu-build-env:v0.6.0-ubuntu18.04
GPU版编译环境的镜像:
docker pull milvusdb/milvus-gpu-build-env:v0.6.0-ubuntu18.04
我的docker做了免sudo运行的设置,有些使用者可能需要加sudo才能运行,如果嫌麻烦,可以查阅“免sudo使用docker”相关文档。
这里需要注意的是,如果使用GPU版本的镜像,必须要安装nvidia-docker,具体可参考
步骤2 启动容器
启动CPU版本容器:
docker run -it -p 19530:19530 -d milvusdb/milvus-cpu-build-env:v0.6.0-ubuntu18.04
启动GPU版本容器:
docker run --runtime=nvidia -it -p 19530:19530 -d milvusdb/milvus-gpu-build-env:v0.6.0-ubuntu18.04
容器创建出来后,会给出一个容器的ID,比如上面这个“d4adxxxxx”。我们现在要进入这个容器里:
docker exec -it [container_id] bash
这里的container_id就换成上一条命令看到的那个“d4adxxxxx”,我们就进入了容器内部。
步骤3 在容器中下载Milvus源码并进行编译
先进入一个能往里写东西的目录,比如home目录:
cd /home
下载源码,目前是0.6.0:
wget https://github.com/milvus-io/milvus/archive/0.6.0.zip
更新一下apt-get,安装一个解压工具
apt-get update
apt-get install unzip
解压源码包:
unzip ./0.6.0.zip
我们看到源码被解压到一个叫milvus-0.6.0的文件夹里,进入其core目录:
cd ./milvus-0.6.0/core
如果你用的是CPU镜像,就这么编译:
./build.sh -t Release
如果你用的是GPU镜像,就需要加一个“-g”参数:
./build.sh -g -t Release
参数“-t Release”意思是编译Release版本,如果你想调试的话,也可以编译Debug版本。
不出意外的话,编译成功。然后我们启动编译好的Milvus服务程序:
./start_server.sh
这个start_server.sh指定core/conf目录下的server_config.yaml和log_config.conf作为配置启动Milvus。Milvus数据存储路径是由server_config.yaml文件里的primary_path这一项指定的,默认的路径是:/tmp/milvus
所以,如果之后你想查看Milvus的日志文件,就可以到 /tmp/milvus/logs目录里去看。
步骤4 使用python 连接Milvus并做些操作
在写脚本之前,先确定 pymilvus 已经安装:
pip3 install pymilvus==0.2.5
pymilvus的主页上有一张Milvus和pymilvus版本配对的表格,目前还没有0.6.0的配对信息,但之前0.5.3所对应的pymilvus-0.2.5也是能用在0.6.0上的,之后会有新的版本和0.6.0对应。
python的环境都没问题的话,就可以写测试脚本了,比如可以在pycharm里写个脚本在Milvus里创建一张表,运行之后就能看到返回的成功信息:
注:
- 如果想使用C++SDK的,可以参考源码目录milvus/core/src/sdk下的README.MD文件
- 如果想使用JavaSDK的,可以参考milvus-java-sdk源码里的相关文档
- Milvus默认的对外服务端口是19530,如果你拉取了Milvus发布版镜像想运行,就有可能跟你自己编译启动的Milvus有端口冲突,所以记得用docker stop [container_id]来停止容器