环境安装与启动服务

前提条件

安装步骤

  1. 安装模型仓:

    HDK、CANN、PTA、ATB Models请参考模型仓readme

  2. 安装MindIE LLM

    获取MindIE的整包进行安装:

    软件包名称:

    • Ascend-mindie_1.0.RC3_linux-x86_64.run
    • Ascend-mindie_1.0.RC3_linux-aarch64.run

    安装MindIE整包代码:

    # 安装MindIE整包 
    chmod +x Ascend-mindie*.run ./Ascend-mindie-{version}_linux-{arch}.run --install --install-path=${working_dir}
    source ${working_dir}/mindie/set_env.sh

  3. 安装Triton Inference Server

    gcc版本需支持c++17。

    • 下载server代码并重命名为triton_server。
      git clone https://github.com/triton-inference-server/server.git triton_server
    • 切换分支到r24.02。
      cd triton_server
      git checkout r24.02
    • 运行启动脚本。
      1. 复制以下代码并修改对应路径(15和16行),得到一个.sh文件,本文命名为build_npu.sh。
      2. 将其放在triton_server的根目录下。
      3. 执行 bash build_npu.sh。
        #!/bin/bash
        build_type="Release"
        while getopts "d" opt; do
          case ${opt} in
            d)
              build_type="Debug"
              ;;
            \?)
              echo "Invalid option: -$OPTARG" >&2
              exit 1
              ;;
          esac
        done
        
        mkdir -p /home/xxx/triton_server/build
        cd /home/xxx/triton_server/build
        
        cmake -DCMAKE_BUILD_TYPE=$build_type -DCMAKE_INSTALL_PREFIX:PATH=/opt/tritonserver \
                -DTRITON_THIRD_PARTY_REPO_TAG=r24.02 \
                -DTRITON_COMMON_REPO_TAG=r24.02  \
                -DTRITON_CORE_REPO_TAG=r24.02  \
                -DTRITON_BACKEND_REPO_TAG=r24.02  \
                -DTRITON_VERSION=1.0.0 \
                -DTRITON_ENABLE_METRICS_GPU=OFF \
                -DTRITON_ENABLE_GPU=OFF \
                -DTRITON_CORE_HEADERS_ONLY=OFF \
                ..
        
        make install
    • 编译过程中如果出现报错有包没有安装,请按照提示安装即可。
      apt-get install rapidjson-dev # rapidjson
      apt-get install libboost-dev # boost
      apt-get install libre2-dev # Re2
      apt-get install libb64-dev # b64
      apt-get install libnuma-dev # numa
      apt-get install patchelf # patchelf
    • 编译过程中大概率会出现grpc无法下载,导致编译失败的情况。解决如下:(以24.02为例)
      1. 手动git clone grpc代码。
        # 注:git clone前可以将curl的postBuffer设大,笔者配置为20G,按需分配,运行如下指令:
        # git config --global http.postBuffer 20971520000
        
        cd /home/xxx/triton_server/build/_deps/repo-third-party-build/grpc-repo/src
        git clone --branch v1.48.0 https://github.com/grpc/grpc.git // 使用哪个版本需要看triton_server/build/_deps/repo-third-party-src/CMakeLists.txt中grpc的git tag
        cd grpc
        git submodule update --init --recursive // 下载git子仓库
      2. 下载git子仓库时可能会有部分子仓库无法下载,需要手动进行。
        • 进入到/triton_server/build/_deps/repo-third-party-build/grpc-repo/src/grpc/third_part。
        • git clone 上一步没有clone成功的子仓,需要将boringssl的名字换成boringssl-with-bazel。
        • 执行 git submodule init && git submodule update,如果都已经下载下来了,屏幕上会打印子仓的路径及节点号,比如 Submodule path 'third_party/googletest': checked out 'c9ccac7cb7345901884aabf5d1a786c。
          cd /home/xxx/triton_server/build/_deps/repo-third-party-build/grpc-repo/src/grpc/third_part
          git clone xxx // 上一步没有git clone下来的子仓
          cd ..
          git submodule init
          git submodule update
      3. 修改对应的CMakelist.txt,让其指向本地文件。
        cd /home/xxx/triton_server/build/_deps/repo-third-party-src/ 
        vim CMakeLists.txt
      4. 屏蔽对应的git源,同理,其他git源出现上述问题也同样处理。
        ExternalProject_Add(grpc-repo
          PREFIX grpc-repo
          # GIT_REPOSITORY "https://gitee.com/Gongen/grpc.git"
          # GIT_TAG "v1.48.0"
          SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}/grpc-repo/src/grpc"
          EXCLUDE_FROM_ALL ON
          CONFIGURE_COMMAND ""
          BUILD_COMMAND ""
          INSTALL_COMMAND ""
          TEST_COMMAND ""
          PATCH_COMMAND python3 ${CMAKE_CURRENT_SOURCE_DIR}/tools/install_src.py --src <SOURCE_DIR> ${INSTALL_SRC_DEST_ARG} --dest-basename=grpc_1.48.0
        )
      5. 编译过程中如果出现boost版本过低的报错提示,运行如下指令安装boost-1.78即可。
        wget https://boostorg.jfrog.io/artifactory/main/release/1.78.0/source/boost_1_78_0.tar.gz
        tar xvf boost_1_78_0.tar.gz
        cd boost_1_78_0
        ./bootstrap.sh --with-python=/usr/local/bin/python3
        ./b2 install

  4. 安装Triton Client

    pip install nvidia-pyindex 
    pip install tritonclient[all]

  5. 安装MindIE Backend

    • 方法一: 使用已发布的libtriton_mindie.so文件。

      在 /opt/tritonserver/backends 目录下创建mindie目录,将libtriton_mindie.so放在该目录下。

    • 方法二:使用编译出来的libtriton_mindie.so文件。
      1. 参考样例代码中的目录结构搭建Triton_MindIE-LLM_Backend代码仓。
      2. 设置环境变量。
        export MINDIE_LLM_HOME_PATH=${mindie_dir}/latest/mindie-llm  #mindie-llm安装路径
        export TRITON_HOME_PATH=/opt/tritonserver  #tritonserver安装路径
      3. 编译。
        cd ${working_dir}/Triton_MindIE-LLM_Backend
        bash build.sh

启动服务

  1. 启动Triton Server

    // 设置环境变量
    cd ${working_dir}/Triton_MindIE-LLM_Backend/example
    source set_env.sh
    
    // 启动triton服务 
    bash launch.sh

    当出现如下打印时,表示启动成功。

    I0807 03:28:54.018305 1434372 grpc_server.cc:2519] Started GRPCInferenceService at 0.0.0.0:8111
    I0807 03:28:54.018602 1434372 http_server.cc:4637] Started HTTPService at 0.0.0.0:8110
    I0807 03:28:54.060484 1434372 http_server.cc:320] Started Metrics Service at 0.0.0.0:8112

  2. 用Triton Client发送测试请求

    • 另启动一个窗口,进入和Triton server一样的容器,source与上文同样的环境变量。
    • 如果运行单用例,修改client_stream.py中的模型名和权重路径,然后执行如下命令。
      python client_stream.py
    • 如果跑多用例数据集,执行如下命令。
      python submit.py --name llama3_8b --model_path weights/llama3_8b --trace_dataset GSM8K.jsonl

      必须配置的参数:

      • --name 模型名
      • --model_path 模型权重路径
      • --trace_dataset 数据集名