下载
中文
注册

单机推理

前提条件

  • 服务器或容器环境上已经安装好驱动和固件、CANN包、PyTorch、ATB Models和MindIE。
  • 若开启HTTPS双向认证,需要提前准备好服务证书、服务器私钥和验签证书等。
  • MindIE Server对于Python的环境要求为Python3.10.x,如果环境中的Python3.10.x不是默认版本,需要参考如下方法添加环境变量(Python路径根据实际路径进行修改)。
    export LD_LIBRARY_PATH=/usr/local/python3.10.13/lib:$LD_LIBRARY_PATH
    export PATH=/usr/local/python3.10.13/bin:$PATH

软件包文件清单

MindIE Service组件包含的文件如表1所示。

表1 文件清单

目录/文件

文件

说明

bin

infer_engine-{version}-py3-none-any.whl

Benchmark Python接口包。

llm_engine_test

性能测试工具。

mies_tokenizer-{version}-py3-none-any.whl

mies_tokenizer模块安装包。

mindiebenchmark-{version}-py3-none-any.whl

MindIE Benchmark工具安装包。

mindieclient-{version}-py3-none-any.whl

MindIE Client工具安装包。

mindieservice_backend_connector

进程间通信模块。

mindieservice_daemon

主程序。

model_wrapper-{version}-py3-none-any.whl

model_wrapper模块安装包。

msctl

MindIE MS客户端。

ms_server

MindIE MS服务端。

seceasy_encrypt

加密工具。

version

版本信息。

conf

config.json

配置文件。

infer_server.json

msctl.json

ms_server.json

include

sdk

头文件。

lib

libbackend_manager.so

推理服务so文件。

libboost_chrono.so.1.82.0

libboost_thread.so.1.82.0

libconfig_manager.so

libcrypto.so

libhse_authorization.so

libhse_cryption.so

libmindieserver_backend_model.so

libmindieserver_common.so

libmindieserver_endpoint.so

libmindieserver_engine.so

libmindieserver_ibis.so

libmindieservice_llm_engine.so

libmindieservice_tokenizer.so

libssl.so

logs

-

日志文件。

scripts

config_mindie_server_tls_cert.py

证书管理脚本。

utils

证书管理工具。

utils/cert_util.py

证书操作工具脚本。

utils/config_util.py

配置文件配置读取工具脚本。

utils/file_op.py

文件操作脚本。

utils/file_util.py

文件校验脚本。

utils/hseceasy_util.py

口令加密操作脚本。

utils/__init__.py

包模块声明。

utils/log_util.py

日志操作脚本。

utils/parameter.py

参数解析脚本。

utils/server_util.py

进程状态读取脚本。

security

ca

根证书目录。

certs

服务证书和服务证书吊销列表目录。

keys

服务证书私钥目录。

pass

密钥口令加密文件目录。

set_env.sh

-

设置环境变量脚本。

version.info

-

版本信息。

操作步骤

  1. 以安装用户执行以下命令进入MindIE安装目录。
    cd {MindIE安装目录}/latest
  2. 执行以下命令,修改软件安装文件权限。
    chmod 750 mindie-service
    chmod -R 550 mindie-service/bin
    chmod -R 500 mindie-service/bin/mindieservice_backend_connector
    chmod -R 550 mindie-service/lib
    chmod -R 550 mindie-service/include/
    chmod -R 550 mindie-service/scripts/
    chmod 750 mindie-service/logs
    chmod 750 mindie-service/conf
    chmod 640 mindie-service/conf/config.json
    chmod 700 mindie-service/security/
    chmod -R 700 mindie-service/security/*

    当前版本此步骤为必做步骤,如果跳过此步骤将会导致MindIE Server启动失败。

  3. 根据用户需要设置配置参数。
    1. 进入conf目录,打开“config.json”文件。
      cd mindie-service/conf
      vim config.json
    2. 按“i”进入编辑模式,根据用户需要修改配置参数,参数详情请参见MindIE Service开发指南中的快速开始 > 配置参数说明章节。

      配置文件config.json格式如下:

      {
          "OtherParam":
          {
              "ResourceParam" :
              {
                  "cacheBlockSize" : 128
              },
              "LogParam" :
              {
                  "logLevel" : "Info",
                  "logPath" : "logs/mindservice.log"
              },
              "ServeParam" :
              {
                  "ipAddress" : "127.0.0.1",
                  "managementIpAddress" : "127.0.0.2",
                  "port" : 1025,
                  "managementPort" : 1026,
                  "maxLinkNum" : 1000,
                  "httpsEnabled" : true,
                  "tlsCaPath" : "security/ca/",
                  "tlsCaFile" : ["ca.pem"],
                  "tlsCert" : "security/certs/server.pem",
                  "tlsPk" : "security/keys/server.key.pem",
                  "tlsPkPwd" : "security/pass/key_pwd.txt",
                  "tlsCrl" : "security/certs/server_crl.pem",
                  "managementTlsCaFile" : ["management_ca.pem"],
                  "managementTlsCert" : "security/certs/management/server.pem",
                  "managementTlsPk" : "security/keys/management/server.key.pem",
                  "managementTlsPkPwd" : "security/pass/management/key_pwd.txt",
                  "managementTlsCrl" : "security/certs/management/server_crl.pem",
                  "kmcKsfMaster" : "tools/pmt/master/ksfa",
                  "kmcKsfStandby" : "tools/pmt/standby/ksfb",
                  "multiNodesInferPort": 1120,
                  "interNodeTLSEnabled": true,
                  "interNodeTlsCaFile": "security/grpc/ca/ca.pem",
                  "interNodeTlsCert": "security/grpc/certs/server.pem",
                  "interNodeTlsPk": "security/grpc/keys/server.key.pem",
                  "interNodeTlsPkPwd": "security/grpc/pass/key_pwd.txt",
                  "interNodeKmcKsfMaster": "tools/pmt/master/ksfa",
                  "interNodeKmcKsfStandby": "tools/pmt/standby/ksfb"
              }
          },
          "WorkFlowParam":
          {
              "TemplateParam" :
              {
                  "templateType": "Standard",
                  "templateName" : "Standard_llama"
              }
          },
          "ModelDeployParam":
          {
              "engineName" : "mindieservice_llm_engine",
              "modelInstanceNumber" : 1,
              "tokenizerProcessNumber" : 8,
              "maxSeqLen" : 2560,
              "npuDeviceIds" : [[0,1,2,3]],
              "multiNodesInferEnabled" : false,
              "ModelParam" : [
                  {
                      "modelInstanceType": "Standard",
                      "modelName" : "llama_65b",
                      "modelWeightPath" : "/data/atb_testdata/weights/llama1-65b-safetensors",
                      "worldSize" : 4,
                      "cpuMemSize" : 5,
                      "npuMemSize" : 8,
                      "backendType": "atb",
                      "pluginParams" : ""
                  }
              ]
          },
          "ScheduleParam":
          {
              "maxPrefillBatchSize" : 50,
              "maxPrefillTokens" : 8192,
              "prefillTimeMsPerReq" : 150,
              "prefillPolicyType" : 0,
      
              "decodeTimeMsPerReq" : 50,
              "decodePolicyType" : 0,
      
              "maxBatchSize" : 200,
              "maxIterTimes" : 512,
              "maxPreemptCount" : 0,
              "supportSelectBatch" : false,
              "maxQueueDelayMicroseconds" : 5000
          }
      }
      • 如果不开启https通信(即“httpsEnabled=false时),会存在较高的网络安全风险。
      • “modelWeightPath”参数配置路径下的{modelWeightPath}/config.json文件,需保证其用户组和用户名与当前用户一致,并且为非软链接,文件权限不高于640,若不符合要求将会导致MindIE Server启动失败。
      • maxLinkNum默认值为1000,推荐设置为300。1000并发能力受模型性能影响受限支持,一般较小模型、较低序列长度下才可以使用1000并发。
    3. 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
  4. (可选)若开启了https认证(即“httpsEnabled=true时,默认开启)。
    1. 则使用Service的证书导入脚本导入证书,各证书信息如表2所示。
      表2 证书文件清单

      证书文件

      默认目标路径

      说明

      根证书

      mindie-service/security/ca/

      支持多个CA证书。

      开启https后必选。

      服务证书

      mindie-service/security/cert/

      开启https后必选。

      服务证书私钥

      mindie-service/security/keys/

      支持私钥文件加密场景。

      开启https后必选。

      服务证书吊销列表

      mindie-service/security/cert/

      开启https后可选。

    2. 修改证书文件的用户权限。
      chmod 400 mindie-service/security/ca/*
      chmod 400 mindie-service/security/cert/*
      chmod 400 mindie-service/security/keys/*
      chmod 400 mindie-service/security/pass/*
  5. 准备环境配置文件。
    1. 直接使用安装后的MindIE Service软件包中的环境变量。

      set_env.sh环境配置文件如下所示,详情请参见MindIE Service开发指南中“附录 > 环境变量”章节。

      • 样例是llama-65B的环境变量,请用户根据实际的模型设置环境变量。
      • 为避免安装和使用时容器不一致或用户不一致导致服务不能正常使用,建议在set_env.sh中添加以下三个环境变量:
        source /usr/local/Ascend/ascend-toolkit/set_env.sh                                 # CANN
        source /usr/local/Ascend/nnal/atb/set_env.sh                                       # ATB
        source /home/package/atb_models/set_env.sh                                         # ATB Models
      path="${BASH_SOURCE[0]}"
      mies_path=$(cd $(dirname $path); pwd )
      export MIES_INSTALL_PATH=${mies_path}
      export LD_LIBRARY_PATH=${MIES_INSTALL_PATH}/lib:${LD_LIBRARY_PATH}
      export MIES_CONTINUOUS_BATCHING=1
      
      export ATB_OPERATION_EXECUTE_ASYNC=1
      export TASK_QUEUE_ENABLE=1
      export HCCL_BUFFSIZE=120
      # 运行时日志
      export ASCEND_SLOG_PRINT_TO_STDOUT=0
      export ASCEND_GLOBAL_LOG_LEVEL=3
      export ASCEND_GLOBAL_EVENT_ENABLE=0
      # 加速库日志
      export ATB_LOG_TO_FILE=0
      export ATB_LOG_TO_FILE_FLUSH=0
      export ATB_LOG_TO_STDOUT=0
      export ATB_LOG_LEVEL=ERROR
      # 模型库日志
      export ASDOPS_LOG_TO_FILE=0
      export ASDOPS_LOG_TO_STDOUT=0
      export ASDOPS_LOG_LEVEL=ERROR
      # Python日志
      export MIES_PYTHON_LOG_TO_FILE=0
      export MIES_PYTHON_LOG_TO_STDOUT=0
      export MIES_PYTHON_LOG_PATH="${MIES_INSTALL_PATH}"/log/pythonlog.log
      export MIES_PYTHON_LOG_LEVEL=INFO
      # 触发重计算的阈值,不设置时默认0.5;阈值范围只能是[0,1),越大越容易触发
      export MIES_RECOMPUTE_THRESHOLD=0.5
      # 控制流式推理中增量token解码方式的环境变量,范围[0, 50],代表增量token id解码时参考前方多少个token id。
      # 数值越低流式推理性能越好,数值越高流式推理解码准确性越高。不设置时流式推理采用全量解码的方式,准确度最高但性能最低。
      # 当流式推理对比非流式推理性能没有显著劣化时无需关注此环境变量。
      export MIES_TOKENIZER_SLIDING_WINDOW_SIZE=5
    2. 按“i”进入编辑模式,拷贝5.a中的环境变量配置内容,并根据实际情况进行修改。
    3. 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
  6. 将模型权重文件(由用户自行准备)拷贝到3.b中模型配置参数“modelWeightPath”指定的目录下。
    cp 模型权重文件所在路径 /data/atb_testdata/weights/llama1-65b-safetensors
  7. 加载环境变量。
    source set_env.sh
  8. 启动服务。启动命令需在/{MindIE安装目录}/latest/mindie-service目录中执行。
    • (推荐)使用后台进程方式启动服务。
      nohup ./bin/mindieservice_daemon > output.log 2>&1 &

      在标准输出流捕获到的文件中,打印如下信息说明启动成功。

      Daemon start success!
    • 直接启动服务。
      ./bin/mindieservice_daemon

      回显如下则说明启动成功。

      Daemon start success!
    • Ascend-cann-toolkit工具会在执行服务启动的目录下生成kernel_meta_temp_xxxx目录,该目录为算子的cce文件保存目录。因此需要在当前用户拥有写权限目录下(例如Ascend-mindie-server_{version}_linux-{arch}目录,或者用户在Ascend-mindie-server_{version}_linux-{arch}目录下自行创建临时目录)启动推理服务。
    • 如需切换用户,请在切换用户后执行rm -f /dev/shm/*命令,删除由之前用户运行创建的共享文件。避免切换用户后,该用户没有之前用户创建的共享文件的读写权限,造成推理失败。
    • bin目录按照安全要求,目录权限为550,没有写权限,不能直接在bin启动mindieservice_daemon。
    • 标准输出流捕获到的文件output.log支持用户自定义文件和路径。
    • 使用MindIE Service组件时,请参考MindIE Service开发指南性能调优章节配置最优性能。