昇腾社区首页
中文
注册

物理机内部署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

操作步骤

  1. 切换用户至HwHiAiUser,并进入“/home/HwHiAiUser”目录。
  2. 安装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
    
  3. 安装OpenBLAS。
    1. 下载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
      
    2. 进入OpenBLAS目录。
      1
      cd OpenBLAS-0.3.10
      
    3. 编译安装。
      1
      2
      3
      make FC=gfortran USE_OPENMP=1 -j
      # 普通用户需要指定安装路径
      make PREFIX=/home/HwHiAiUser/OpenBLAS install
      
    4. 配置库路径的环境变量。
      1
      2
      3
      # 配置bashrc
      vim /home/HwHiAiUser/.bashrc
      export LD_LIBRARY_PATH=/home/HwHiAiUser/OpenBLAS/lib:$LD_LIBRARY_PATH
      
    5. 验证是否安装成功。
      1
      cat /home/HwHiAiUser/OpenBLAS/lib/cmake/openblas/OpenBLASConfigVersion.cmake | grep 'PACKAGE_VERSION "'
      

      如果正确显示软件的版本信息,则表示安装成功。

  4. 下载faiss源码,构建faiss wheel包并安装。

    在安装Index SDK依赖时也安装了faiss,但仅编译生成了libfaiss.so,还需要构建faiss wheel包并安装,以便在python中使用faiss。

    1. 下载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
      
    2. 创建install_faiss.sh脚本。
      1
      vi install_faiss.sh
      
    3. 在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
    4. 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
    5. 执行install_faiss.sh脚本,安装faiss。
      bash install_faiss.sh
      • 如果报错没有wheel,请使用pip安装。
      • 安装完faiss之后,numpy可能更新到2.x.x版本,需要回退至1.26.4。
  5. 安装Index SDK。
    1. 增加对软件包的可执行权限。
      chmod +x Ascend-mindxsdk-mxindex_{version}_linux-{arch}.run
    2. 执行如下命令,校验软件包的一致性和完整性。
      ./Ascend-mindxsdk-mxindex_{version}_linux-{arch}.run --check

      若显示如下信息,说明软件包已通过校验。

      1
      Verifying archive integrity...  100%   SHA256 checksums are OK. All good.    
      
    3. 创建软件包的安装路径。
      • 若用户未指定安装路径,软件会默认安装到软件包所在的路径。
      • 若用户想指定安装路径,需要先创建安装路径。以安装路径“/home/HwHiAiUser/Ascend”为例:
        1
        mkdir -p /home/HwHiAiUser/Ascend
        
    4. 安装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%
    5. 安装完Index SDK后执行Index SDK脚本。
      cd <安装路径>/mxIndex/ops && ./custom_opp_{arch}.run
  6. 下载并安装ascendfaiss。
    1. 下载源码包并解压
      1
      2
      wget https://gitee.com/ascend/mindsdk-referenceapps/repository/archive/master.zip 
      unzip master.zip && cd mindsdk-referenceapps-master/IndexSDK/faiss-python
      
    2. 创建install_ascendfaiss_sh.sh脚本
      1
      vi install_ascendfaiss.sh
      
    3. 在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
      
    4. 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
    5. 执行install_ascendfaiss.sh脚本,安装ascendfaiss
      bash install_ascendfaiss.sh
  7. 安装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所示。输入不在列表中的参数可能正常安装或者报错。

    表1 --install安装命令可选参数表

    输入参数

    含义

    --help | -h

    查询帮助信息。

    --info

    查询包构建信息。

    --list

    查询文件列表。

    --check

    查询包完整性。

    --install

    软件包安装操作命令。

    --install-path=<path>

    (可选)自定义RAG SDK软件包安装根目录。如未设置,默认为当前命令执行所在目录。

    --version

    查询安装包RAG SDK版本。

    --upgrade

    软件包升级操作命令,将RAG SDK升级到安装包所包含的版本。

    --platform

    可选参数,对应昇腾AI处理器类型。

    请在安装昇腾AI处理器的服务器执行npu-smi info命令进行查询,将查询到的“Name”最后一位数字删掉,即是--platform的取值。

    --quiet

    可选参数,表示静默安装。使用该参数,默认同意华为企业业务最终用户许可协议(EULA),跳过协议签署过程,并减少人机交互的信息的打印。

    --whitelist

    可选参数,表示安装白名单特性模块,取值可以是operator或者whl,安装多个特性时,可以用逗号分隔,如果不设置该参数,则表示安装所有特性模块。

    operator:指安装推理加速算子模块。

    whl:指安装RAG SDK功能模块(知识库管理、向量化、缓存等)。

  8. 设置RAG SDK运行环境变量。
    1. 用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
    2. 保存退出后运行如下命令让环境生效。
      source ~/.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

检查运行环境

  1. 切换到运行用户HwHiAiUser。
  2. 执行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                                                                    |
    +===============================+=================+======================================================+