物理机内部署RAG SDK
本章节指导用户基于操作系统ubuntu20.04-live-server和Huawei Cloud EulerOS 2.0,以普通用户“HwHiAiUser”为例,在物理机内部署RAG SDK。
- 确保已经根据安装依赖章节安装所需的依赖。
- 安装RAG SDK和安装CANN的用户需为同一用户,建议为普通用户。
- 关于用户准备可参考《CANN 软件安装指南》的“准备用户”章节。
安装前准备
- 复制驱动目录,将属主和属组更改为HwHiAiUser。
cp -r /usr/local/Ascend/driver /tmp chown -R HwHiAiUser:HwHiAiUser /tmp/driver
- 基于操作系统ubuntu20.04-live-server,确保系统已安装Python 3.11,libpq-dev以及cmake,cmake最小版本为3.24.3。以下为libpq-dev和Python的安装方法:
# 安装libpq-dev(psycopg2需要) apt install -y libpq-dev # 设置PY_VERSION为python3.11 export PY_VERSION=python3.11 # 添加Python ppa add-apt-repository -y ppa:deadsnakes/ppa && apt-get update # 安装Python apt-get install -y --no-install-recommends $PY_VERSION $PY_VERSION-dev $PY_VERSION-distutils $PY_VERSION-venv # 设置默认的python ln -sf /usr/bin/$PY_VERSION /usr/bin/python3 ln -sf /usr/bin/$PY_VERSION /usr/bin/python # 安装pip curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py python3 get-pip.py python3 -m pip install --upgrade setuptools
- 基于操作系统Huawei Cloud EulerOS 2.0,Python及依赖包的安装方法:
# 确保系统yum源中包含python3.11,配置方法可参考HCE的REPO源配置与软件安装的官方源配置和13.12openEuler的REPO源配置 yum update yum install python3.11 yum install cmake swig postgresql-devel patch mesa-libGL
操作步骤
- 切换用户至HwHiAiUser,并进入“/home/HwHiAiUser”目录。
- 安装torch和torch-npu。
1 2 3 4 5 6
# for x86,安装torch: pip3 install torch==2.1.0+cpu --index-url https://download.pytorch.org/whl/cpu # for aarch64,安装torch: pip3 install torch==2.1.0 # for all,安装torch-npu pip3 install torch-npu==2.1.0.post11
- 安装OpenBLAS。
- 下载OpenBLAS v0.3.10源码压缩包并解压。
1 2
wget https://github.com/xianyi/OpenBLAS/archive/v0.3.10.tar.gz -O OpenBLAS-0.3.10.tar.gz tar -xf OpenBLAS-0.3.10.tar.gz
- 进入OpenBLAS目录。
1
cd OpenBLAS-0.3.10
- 编译安装。
1 2 3
make FC=gfortran USE_OPENMP=1 -j # 普通用户需要指定安装路径 make PREFIX=/home/HwHiAiUser/OpenBLAS install
- 配置库路径的环境变量。
1 2 3
# 配置bashrc vim /home/HwHiAiUser/.bashrc export LD_LIBRARY_PATH=/home/HwHiAiUser/OpenBLAS/lib:$LD_LIBRARY_PATH
- 验证是否安装成功。
1
cat /home/HwHiAiUser/OpenBLAS/lib/cmake/openblas/OpenBLASConfigVersion.cmake | grep 'PACKAGE_VERSION "'
如果正确显示软件的版本信息,则表示安装成功。
- 下载OpenBLAS v0.3.10源码压缩包并解压。
- 下载faiss源码,构建faiss wheel包并安装。
在安装Index SDK依赖时也安装了faiss,但仅编译生成了libfaiss.so,还需要构建faiss wheel包并安装,以便在python中使用faiss。
- 下载faiss源码包并解压。
1 2 3
# faiss 1.10.0 wget https://github.com/facebookresearch/faiss/archive/v1.10.0.tar.gz tar -xf v1.10.0.tar.gz && cd faiss-1.10.0/faiss
- 创建install_faiss.sh脚本。
1
vi install_faiss.sh
- 在install_faiss.sh脚本中写入如下内容。
export FAISS_INSTALL_PATH=/home/HwHiAiUser/faiss/faiss1.10.0 # faiss安装后可能是${FAISS_INSTALL_PATH}/lib或者${FAISS_INSTALL_PATH}/lib64,与具体操作系统有关 export FAISS_INSTALL_PATH_LIB=${FAISS_INSTALL_PATH}/lib mkdir -p ${FAISS_INSTALL_PATH} sed -i "149 i virtual void search_with_filter (idx_t n, const float *x, idx_t k, float *distances, idx_t *labels, const void *mask = nullptr) const{}" Index.h sed -i "49 i template <typename IndexT> IndexIDMapTemplate<IndexT>::IndexIDMapTemplate (IndexT *index, std::vector<idx_t> &ids): index (index), own_fields (false) { this->is_trained = index->is_trained; this->metric_type = index->metric_type; this->verbose = index->verbose; this->d = index->d; id_map = ids; }" IndexIDMap.cpp sed -i "30 i explicit IndexIDMapTemplate (IndexT *index, std::vector<idx_t> &ids);" IndexIDMap.h sed -i "217 i utils/sorting.h" CMakeLists.txt cd .. && cmake -B build . -DFAISS_ENABLE_GPU=OFF -DPython_EXECUTABLE=/usr/bin/python3 -DBUILD_TESTING=OFF -DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=${FAISS_INSTALL_PATH} make -C build -j faiss make -C build -j swigfaiss # 如果报错没有wheel,使用pip安装 cd build/faiss/python && python3 setup.py bdist_wheel cd ../../.. && make -C build install cd build/faiss/python && cp libfaiss_python_callbacks.so ${FAISS_INSTALL_PATH_LIB}/ cd dist # 该操作可能更新numpy到2.x.x版本,需要回退到1.26.4 pip3 install faiss-1.10.0*.whl
- 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
- 执行install_faiss.sh脚本,安装faiss。
bash install_faiss.sh
- 如果报错没有wheel,请使用pip安装。
- 安装完faiss之后,numpy可能更新到2.x.x版本,需要回退至1.26.4。
- 下载faiss源码包并解压。
- 安装Index SDK。
- 增加对软件包的可执行权限。
chmod +x Ascend-mindxsdk-mxindex_{version}_linux-{arch}.run
- 执行如下命令,校验软件包的一致性和完整性。
./Ascend-mindxsdk-mxindex_{version}_linux-{arch}.run --check
若显示如下信息,说明软件包已通过校验。
1
Verifying archive integrity... 100% SHA256 checksums are OK. All good.
- 创建软件包的安装路径。
- 若用户未指定安装路径,软件会默认安装到软件包所在的路径。
- 若用户想指定安装路径,需要先创建安装路径。以安装路径“/home/HwHiAiUser/Ascend”为例:
1
mkdir -p /home/HwHiAiUser/Ascend
- 安装Index SDK。
./Ascend-mindxsdk-mxindex_7.0.RC1_linux-aarch64.run --install --install-path=<安装路径> --platform=<npu_type>
如需指定路径安装,请将<安装路径>配置为上一步创建的路径,安装过程中提示Do you accept the EULA to install RAG SDK? [Y/N]时,输入Y或y,表示同意EULA协议,继续进行安装;输入其他字符时停止安装,退出程序。
若出现如下回显信息,则表示软件成功安装。
Uncompressing ASCEND MXINDEX RUN PACKAGE 100%
- 安装完Index SDK后执行Index SDK脚本。
cd <安装路径>/mxIndex/ops && ./custom_opp_{arch}.run
- 增加对软件包的可执行权限。
- 下载并安装ascendfaiss。
- 下载源码包并解压
1 2
wget https://gitee.com/ascend/mindsdk-referenceapps/repository/archive/master.zip unzip master.zip && cd mindsdk-referenceapps-master/IndexSDK/faiss-python
- 创建install_ascendfaiss_sh.sh脚本
1
vi install_ascendfaiss.sh
- 在install_ascendfaiss.sh脚本中写入如下内容。。
# 设置以下环境变量 export PY_VERSION=python3.11 export FAISS_INSTALL_PATH=/home/HwHiAiUser/faiss/faiss1.10.0 # faiss安装后可能是${FAISS_INSTALL_PATH}/lib或者${FAISS_INSTALL_PATH}/lib64,与具体操作系统有关 export FAISS_INSTALL_PATH_LIB=${FAISS_INSTALL_PATH}/lib export INDEXSDK_INSTALL_PATH=/home/HwHiAiUser/Ascend/mxIndex export PYTHON_HEADER=/usr/include/$PY_VERSION/ export ASCEND_INSTALL_PATH=/home/HwHiAiUser/Ascend/ascend-toolkit/latest export DRIVER_INSTALL_PATH=/tmp export OPENBLAS_INSTALL_PATH=/home/HwHiAiUser/OpenBLAS swig -python -c++ -Doverride= -module swig_ascendfaiss -I${PYTHON_HEADER} -I${FAISS_INSTALL_PATH}/include -I${INDEXSDK_INSTALL_PATH}/include -DSWIGWORDSIZE64 -o swig_ascendfaiss.cpp swig_ascendfaiss.swig g++ -std=c++11 -DFINTEGER=int -fopenmp -I/usr/local/include -I${ASCEND_INSTALL_PATH}/include -I${ASCEND_INSTALL_PATH}/runtime/include -I${DRIVER_INSTALL_PATH}/driver/kernel/inc/driver -I${DRIVER_INSTALL_PATH}/driver/kernel/libc_sec/include -fPIC -fstack-protector-all -Wall -Wreturn-type -D_FORTIFY_SOURCE=2 -g -O3 -Wall -Wextra -I${PYTHON_HEADER} -I/home/HwHiAiUser/.local/lib/$PY_VERSION/site-packages/numpy/core/include -I${FAISS_INSTALL_PATH}/include -I${INDEXSDK_INSTALL_PATH}/include -c swig_ascendfaiss.cpp -o swig_ascendfaiss.o g++ -std=c++11 -shared -fopenmp -L${OPENBLAS_INSTALL_PATH}/lib/ -L${ASCEND_INSTALL_PATH}/lib64 -L${ASCEND_INSTALL_PATH}/runtime/lib64 -L${DRIVER_INSTALL_PATH}/driver/lib64 -L${DRIVER_INSTALL_PATH}/driver/lib64/common -L${DRIVER_INSTALL_PATH}/driver/lib64/driver -L${FAISS_INSTALL_PATH_LIB}/ -L${INDEXSDK_INSTALL_PATH}/lib -Wl,-rpath-link=${ASCEND_INSTALL_PATH}/acllib/lib64:${ASCEND_INSTALL_PATH}/runtime/lib64:${DRIVER_INSTALL_PATH}/driver/lib64:${DRIVER_INSTALL_PATH}/driver/lib64/common:${DRIVER_INSTALL_PATH}/driver/lib64/driver -L/usr/local/lib -Wl,-z,relro -Wl,-z,now -Wl,-z,noexecstack -s -o _swig_ascendfaiss.so swig_ascendfaiss.o -L.. -lascendfaiss -lfaiss -lascend_hal -lacl_retr -lascendcl -lc_sec -lopenblas -lacl_op_compiler # 如果报错没有build,使用pip安装 python3 -m build cd dist && pip3 install ascendfaiss*.whl export LD_LIBRARY_PATH=${INDEXSDK_INSTALL_PATH}/lib:${FAISS_INSTALL_PATH}/lib:$LD_LIBRARY_PATH
- 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
- 执行install_ascendfaiss.sh脚本,安装ascendfaiss。
bash install_ascendfaiss.sh
- 下载源码包并解压
- 安装RAG SDK。
bash Ascend-mindxsdk-mxrag_<version>_linux-<arch>.run --install --install-path=<安装路径> --platform=<npu_type> # 安装第三方依赖包 pip3 install rank_bm25==0.2.2 langchain-opengauss==0.1.3 # 安装依赖包 pip3 install -r <安装路径>/mxRag/requirements.txt
安装过程中提示Do you accept the EULA to install RAG SDK? [Y/N]时,输入Y或y,表示同意EULA协议,继续进行安装;输入其他字符时停止安装,退出程序。
若出现如下回显信息,则表示软件成功安装。
Install RAG SDK successfully.
--install安装命令同时支持输入可选参数,如表1所示。输入不在列表中的参数可能正常安装或者报错。
- 设置RAG SDK运行环境变量。
- 用vim打开文件~/.bashrc,在文件最后添加如下内容。
export MX_INDEX_FINALIZE=0 export PY_VERSION=python3.11 export LOGURU_FORMAT='<green>{time:YYYY-MM-DD HH:mm:ss.SSS}</green> | <level>{level: <8}</level> | <cyan>{name}</cyan>:<cyan>{function}</cyan>:<cyan>{line}</cyan> - <level>{message!r}</level>' export MX_INDEX_MODELPATH=/home/HwHiAiUser/Ascend/modelpath # 设置index SDK安装路径,如果安装时未使用默认路径安装,请根据实际路径修改 export MX_INDEX_INSTALL_PATH=/home/HwHiAiUser/Ascend/mxIndex export MX_INDEX_MULTITHREAD=1 export ASCEND_HOME=$HOME/Ascend/ export LD_LIBRARY_PATH=/home/HwHiAiUser/Ascend/mxIndex/lib:/home/HwHiAiUser/faiss/faiss1.10.0/lib:$LD_LIBRARY_PATH export PYTHONPATH=/home/HwHiAiUser/.local/lib/$PY_VERSION/site-packages/mx_rag/libs:$PYTHONPATH export LD_PRELOAD=$(ls /home/HwHiAiUser/.local/lib/$PY_VERSION/site-packages/scikit_learn.libs/libgomp-*):$LD_PRELOAD source /home/HwHiAiUser/Ascend/ascend-toolkit/set_env.sh source /home/HwHiAiUser/Ascend/nnal/atb/set_env.sh source /home/HwHiAiUser/Ascend/mxRag/script/set_env.sh
- 保存退出后运行如下命令让环境生效。
source ~/.bashrc
- 用vim打开文件~/.bashrc,在文件最后添加如下内容。

安装RAG SDK时可能出现报错信息:
ERROR: Cannot uninstall 'xxx'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.
则说明xxx模块是操作系统自带的组件,无法直接升级,可以尝试重新下发指令安装:pip3 install -r requirements.txt --ignore-installed
检查运行环境
- 切换到运行用户HwHiAiUser。
- 执行npu-smi info命令检查驱动是否挂载正常。
如当Health参数的值为OK时,即表示当前芯片的健康状态为正常(以下仅为示例,请以实际查询到的信息为准)。
+--------------------------------------------------------------------------------------------------------+ | npu-smi 24.1.rc2 Version: 24.1.rc2 | +-------------------------------+-----------------+------------------------------------------------------+ | NPU Name | Health | Power(W) Temp(C) Hugepages-Usage(page) | | Chip Device | Bus-Id | AICore(%) Memory-Usage(MB) | +===============================+=================+======================================================+ | 7 xxx | OK | NA 44 0 / 0 | | 0 0 | 0000:83:00.0 | 0 1851 / 21527 | +===============================+=================+======================================================+ | 8 xxx | OK | NA 44 0 / 0 | | 0 1 | 0000:84:00.0 | 0 1852 / 21527 | +===============================+=================+======================================================+ +-------------------------------+-----------------+------------------------------------------------------+ | NPU Chip | Process id | Process name | Process memory(MB) | +===============================+=================+======================================================+ | No running processes found in NPU 7 | +===============================+=================+======================================================+ | No running processes found in NPU 8 | +===============================+=================+======================================================+