Milvus源码编译安装
- Milvus源码编译安装
- Golang和C++开发环境安装
- 源码安装编译基础依赖:OpenBLAS
- 安装Rust
- 安装前置依赖
- 下载源码
- 更改安装脚本
- 开始编译
- 测试Milvus是否安装成功
- 遇到的问题
- 问题1:
- 问题2:
- 问题3:
- 问题4:
- 问题5:
网上可参考的Milvus源码安装教程资料太少,且不全,会缺少很多依赖安装,导致最后编译安装会遇到很多问题,在此,整理自己源码编译安装的全过程,方便日后查看。
Milvus源码编译安装
Golang和C++开发环境安装
根据此教程进行部署安装Golang开发环境。
由于Milvus是GO语言开发,所以需要先安装Golang,版本要求>=1.16即可。
源码安装编译基础依赖:OpenBLAS
OpenBLAS是向量计算库,参考此教程部署安装。
1.先安装必要依赖工具:
sudo apt-get update && \
# common utils for download sources tarball/zipball
sudo apt-get install -y --no-install-recommends curl wget ca-certificates gnupg2 && \
# openblas deps
sudo apt-get install -y --no-install-recommends g++ gcc gfortran git make && \
# cleanup
sudo apt-get remove --purge -y
- 下载0.3.9版本的OpenBLAS源码包
这里我是手动下载上传。
OPENBLAS_VERSION=0.3.9 && \
wget "https://github.com/xianyi/OpenBLAS/archive/v${OPENBLAS_VERSION}.tar.gz"
- 解压编译
tar -zxvf xxx.tar.gz
cd xxx
sudo make TARGET=CORE2 DYNAMIC_ARCH=1 DYNAMIC_OLDER=1 USE_THREAD=0 USE_OPENMP=0 FC=gfortran CC=gcc COMMON_OPT="-O3 -g -fPIC" FCOMMON_OPT="-O3 -g -fPIC -frecursive" NMAX="NUM_THREADS=128" LIBPREFIX="libopenblas" LAPACKE="NO_LAPACKE=1" INTERFACE64=0 NO_STATIC=1
- 等待结果,出现下面内容表示OpenBLAS编译完成
make[1]: Leaving directory '/app/OpenBLAS-0.3.9/exports'
OpenBLAS build complete. (BLAS CBLAS LAPACK LAPACKE)
OS ... Linux
Architecture ... x86_64
BINARY ... 64bit
C compiler ... GCC (command line : gcc)
Fortran compiler ... GFORTRAN (command line : gfortran)
Library Name ... libopenblas-r0.3.9.a (Single threaded)
To install the library, you can run "make PREFIX=/path/to/your/installation install".
- 安装OpenBLAS
sudo make -j4 PREFIX=/usr NO_STATIC=1 install
- 出现下面内容,表示安装成功!
make[1]: Entering directory '/app/milvus/OpenBLAS-0.3.9'
Generating openblas_config.h in /usr/include
Generating f77blas.h in /usr/include
Generating cblas.h in /usr/include
Copying LAPACKE header files to /usr/include
Copying the shared library to /usr/lib
Generating openblas.pc in /usr/lib/pkgconfig
Generating OpenBLASConfig.cmake in /usr/lib/cmake/openblas
Generating OpenBLASConfigVersion.cmake in /usr/lib/cmake/openblas
Install OK!
make[1]: Leaving directory '/app/milvus/OpenBLAS-0.3.9'
- 清理
rm -rf xxx.tar.gz
安装Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
rustup install 1.73.0
查看cargo和rustup版本是否均为1.73.0
cargo --version
rustc --version
设置为默认版本并确认cargo和rust版本
rustup default 1.73.0
输入以下命令确保已设为默认版本:
rustup toolchain list
安装前置依赖
参考此教程。
- 安装googletest
wget https://github.com/google/googletest/archive/release-1.8.0.tar.gz && \
tar zxf release-1.8.0.tar.gz && \
rm -f release-1.8.0.tar.gz && \
cd googletest-release-1.8.0 && \
cmake . && \
make && \
make install
- 安装packages
sudo apt-get install \
g++ \
cmake \
libboost-all-dev \
libevent-dev \
libdouble-conversion-dev \
libgoogle-glog-dev \
libgflags-dev \
libiberty-dev \
liblz4-dev \
liblzma-dev \
libsnappy-dev \
make \
zlib1g-dev \
binutils-dev \
libjemalloc-dev \
libssl-dev \
pkg-config \
libunwind-dev
- 安装fmt
git clone https://github.com/fmtlib/fmt.git && cd fmt
mkdir _build && cd _build
cmake ..
make -j$(nproc)
sudo make install
- 安装调试相关依赖
apt-get install \
libunwind8-dev \
libelf-dev \
libdwarf-dev
- 下载安装folly
如果克隆失败,建议手动下载放到合适位置即可。
git clone https://github.com/facebook/folly.git
编译安装folly
cd folly
mkdir _build && cd _build
cmake ..
make -j $(nproc)
make install
下载源码
到这一步,基本的前置工作已完成。
git clone https://gitee.com/milvus-io/milvus.git
更改安装脚本
cd milvus/scripts
vim 3rdparty_build.sh
搜索/cargo,找到+1.73 build替换为:
rustup run 1.73.0 cargo build --release --verbose
如果不替换使用下载的源码部署脚本编译,会报错"error:toolchain ‘1.73-x86_64-unknown-linux-gnu’ is not installed”.
开始编译
回退到上一级目录,执行make milvus编译。
cd milvus
make milvus
【注】在编译的时候,请记得关掉梯子再编译!!!
若失败,make clean再次make milvus。
经过漫长的等待,最后出现下面的界面表示构建完成。
看到Build Milvus就构建成功了。
测试Milvus是否安装成功
运行如下命令:
./bin/milvus
以上,Milvus 在 Ubuntu 20.04 / Ubuntu 22.04 环境中的编译安装已完成!
遇到的问题
问题1:
"fatal: destination path 'opendal' already exists and is not an empty directory.
解决办法:
rm -rf opendal/
问题2:
error: toolchain '1.73-x86_64-unknown-linux-gnu' is not installed
解决办法:
更改源码脚本,将cargo +1.73 build更改为rustup run 1.73.0 cargo build --release
问题3:
提示Cargo.html不存在,这种是编译的第三方库没有完整下载所以报错找不到,解决方法是删掉整个源码目录,再次编译。
问题4:
无法加载共享库。
error while loading shared libraries: libfolly_exception_tracer_base.so.0.58.0 -dev: cannot open shared object file: No such file or directory
解决办法:
跟着我上面的流程走,安装了fmt,相关依赖包,及folly,依赖库肯定存在,此时,我们只需要找到这个依赖文件位置,将其放入/usr/local/lib下,再配置环境变量,使其生效即可。
- 使用find命令查找缺少依赖文件libfolly_exception_tracer_base.so.0.58.0-dev具体位置
find / -name libfolly_exception_tracer_base.so.0.58.0-dev 2>/dev/null
查找结果如下:
2. 制作软链接
sudo ln -s /milvus/cmake_build/lib/libfolly_exception_tracer_base.so.0.58.0-dev /usr/local/lib/libfolly_exception_tracer_base.so.0.58.0-dev
- 配置环境变量
问题5:
cargo部署路径要在/usr/bin之前,所以配置如下: