昇腾社区首页
EN
注册
开发者
下载

单机推理

前提条件

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

操作步骤

  1. 以安装用户进入MindIE安装目录。
    cd {MindIE安装目录}/latest
  2. 确认目录文件权限是否如下所示,若存在不匹配项,则参考以下命令修改权限。
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    chmod 750 mindie-service
    chmod -R 550 mindie-service/bin
    chmod -R 500 mindie-service/bin/mindie_llm_backend_connector
    chmod 550 mindie-service/lib
    chmod 440 mindie-service/lib/*
    chmod 550 mindie-service/lib/grpc
    chmod 440 mindie-service/lib/grpc/*
    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/*
    

    若文件权限不符合要求将会导致Server启动失败。

  3. 根据用户需要设置配置参数。

    配置前注意事项如下所示:

    • 如果不开启HTTPS通信(即“httpsEnabled=false时),会存在较高的网络安全风险。
    • “maxLinkNum”默认值为1000,推荐设置为300。1000并发能力受模型性能影响受限支持,一般较小模型、较低序列长度下才可以使用1000并发。
    • 若用户通过环境变量MIES_CONFIG_JSON_PATH提供此Server的配置文件,需要用户自行保障此配置文件的安全性。
    • “modelWeightPath”:模型权重路径。此路径下的所有文件由用户自行提供,需要用户自行保障此处所有文件的安全性;且该路径下的config.json文件需保证其用户组和用户名与当前用户一致,并且为非软链接,文件权限不高于750,若不符合要求将会导致Server启动失败。
    • “tlsCaFile”:业务面RESTful接口使用的CA证书文件列表。文件由用户提供,需要用户自行保障此部分所有文件的安全性。
    • “tlsCert”:业务面RESTful接口使用的服务证书文件。文件由用户提供,需要用户自行保障此文件的安全性。
    • “tlsPk”:业务面RESTful接口使用的服务证书私钥文件。建议用户使用加密后的私钥文件,文件由用户提供,需要用户自行保障此文件的安全性。
    • “tlsCrlFiles”:业务面RESTful接口使用的吊销列表文件列表。文件由用户提供,需要用户自行保障此部分所有文件的安全性。
    • “managementTlsCaFile”:管理面RESTful接口使用的CA证书文件列表。文件由用户提供,需要用户自行保障此部分所有文件的安全性。
    • “managementTlsCert”:管理面RESTful接口使用的服务证书文件。文件由用户提供,需要用户自行保障此文件的安全性。
    • “managementTlsPk”:管理面RESTful接口使用的服务证书私钥文件。建议用户使用加密后的私钥文件,文件由用户提供,需要用户自行保障此文件的安全性。
    • “managementTlsCrlFiles”:管理面RESTful接口使用的吊销列表文件列表。文件由用户提供,需要用户自行保障此部分所有文件的安全性。
    • “interCommTlsCaFiles”:PD分离场景下,PD节点间通信使用的CA证书文件列表。文件由用户提供,需要用户自行保障此部分所有文件的安全性。
    • “interCommTlsCert”:PD分离场景下,PD节点间通信使用的服务证书文件。文件由用户提供,需要用户自行保障此文件的安全性。
    • “interCommPk”:PD分离场景下,PD节点间通信使用的服务证书私钥文件。建议用户使用加密后的私钥文件,文件由用户提供,需要用户自行保障此文件的安全性。
    • “interCommTlsCrlFiles”:PD分离场景下,PD节点间通信使用的吊销列表文件列表。文件由用户提供,需要用户自行保障此部分所有文件的安全性。
    • “interNodeTlsCaFiles”:多机场景下,主从节点间通信使用的CA证书文件列表。文件由用户提供,需要用户自行保障此部分所有文件的安全性。
    • “interNodeTlsCert”:多机场景下,主从节点间通信使用的服务证书文件,文件由用户提供,需要用户自行保障此文件的安全性。
    • “interNodeTlsPk”:多机场景下,主从节点间通信使用的服务证书私钥文件。建议用户使用加密后的私钥文件,文件由用户提供,需要用户自行保障此文件的安全性。
    • “interNodeTlsCrlFiles”:多机场景下,主从节点间通信使用的吊销列表文件列表。文件由用户提供,需要用户自行保障此部分所有文件的安全性。
    1. 进入conf目录,打开“config.json”文件。
      cd mindie-service/conf
      vim config.json
    2. 按“i”进入编辑模式,根据用户需要修改配置参数,参数详情请参见《MindIE LLM开发指南》中的“核心概念与配置 >配置参数说明(服务化)”章节

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

        1
        2
        3
        4
        5
        6
        7
        8
        9
       10
       11
       12
       13
       14
       15
       16
       17
       18
       19
       20
       21
       22
       23
       24
       25
       26
       27
       28
       29
       30
       31
       32
       33
       34
       35
       36
       37
       38
       39
       40
       41
       42
       43
       44
       45
       46
       47
       48
       49
       50
       51
       52
       53
       54
       55
       56
       57
       58
       59
       60
       61
       62
       63
       64
       65
       66
       67
       68
       69
       70
       71
       72
       73
       74
       75
       76
       77
       78
       79
       80
       81
       82
       83
       84
       85
       86
       87
       88
       89
       90
       91
       92
       93
       94
       95
       96
       97
       98
       99
      100
      101
      102
      103
      104
      105
      106
      107
      108
      {
          "Version": "2.2.RC1",
          "ServerConfig" :
          {
              "ipAddress" : "127.0.0.1",
              "managementIpAddress": "127.0.0.2",
              "port" : 1025,
              "managementPort" : 1026,
              "metricsPort" : 1027,
              "allowAllZeroIpListening" : false,
              "maxLinkNum" : 1000,
              "httpsEnabled" : true,
              "fullTextEnabled" : false,
              "tlsCaPath" : "security/ca/",
              "tlsCaFile" : ["ca.pem"],
              "tlsCert" : "security/certs/server.pem",
              "tlsPk" : "security/keys/server.key.pem",
              "tlsPkPwd" : "security/pass/key_pwd.txt",
              "tlsCrlPath" : "security/certs/",
              "tlsCrlFiles" : ["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",
              "managementTlsCrlPath" : "security/management/certs/",
              "managementTlsCrlFiles" : ["server_crl.pem"],
              "kmcKsfMaster" : "tools/pmt/master/ksfa",
              "kmcKsfStandby" : "tools/pmt/standby/ksfb",
              "inferMode" : "standard",
              "interCommTLSEnabled" : true,
              "interCommPort" : 1121,
              "interCommTlsCaPath" : "security/grpc/ca/",
              "interCommTlsCaFiles" : ["ca.pem"],
              "interCommTlsCert" : "security/grpc/certs/server.pem",
              "interCommPk" : "security/grpc/keys/server.key.pem",
              "interCommPkPwd" : "security/grpc/pass/key_pwd.txt",
              "interCommTlsCrlPath" : "security/grpc/certs/",
              "interCommTlsCrlFiles" : ["server_crl.pem"],
              "openAiSupport" : "vllm",
              "tokenTimeout" : 600,
              "e2eTimeout" : 600,
              "distDPServerEnabled": false
          },
      
          "BackendConfig": {
              "backendName" : "mindieservice_llm_engine",
              "modelInstanceNumber" : 1,
              "npuDeviceIds" : [[0,1,2,3]],
              "tokenizerProcessNumber" : 8,
              "multiNodesInferEnabled": false,
              "multiNodesInferPort": 1120,
              "interNodeTLSEnabled": true,
              "interNodeTlsCaPath": "security/grpc/ca/",
              "interNodeTlsCaFiles": ["ca.pem"],
              "interNodeTlsCert": "security/grpc/certs/server.pem",
              "interNodeTlsPk": "security/grpc/keys/server.key.pem",
              "interNodeTlsPkPwd": "security/grpc/pass/mindie_server_key_pwd.txt",
              "interNodeTlsCrlPath" : "security/grpc/certs/",
              "interNodeTlsCrlfiles" : ["server_crl.pem"],
              "interNodeKmcKsfMaster": "tools/pmt/master/ksfa",
              "interNodeKmcKsfStandby": "tools/pmt/standby/ksfb",
              "ModelDeployConfig":
              {
                  "maxSeqLen" : 2560,
                  "maxInputTokenLen" : 2048,
                  "truncation" : false,
                  "ModelConfig" : [
                      {
                          "modelInstanceType": "Standard",
                          "modelName" : "llama_65b",
                          "modelWeightPath" : "/data/atb_testdata/weights/llama1-65b-safetensors",
                          "worldSize" : 4,
                          "cpuMemSize" : 5,
                          "npuMemSize" : -1,
                          "backendType": "atb",
                          "trustRemoteCode": false,
                          "async_scheduler_wait_time": 120,
                          "kv_trans_timeout" : 10,
                          "kv_link_timeout" : 1080
                      }
                  ]
              },
       
              "ScheduleConfig":
              {
                  "templateType": "Standard",
                  "templateName" : "Standard_LLM",
                  "cacheBlockSize" : 128,
                  "maxPrefillBatchSize" : 50,
                  "maxPrefillTokens" : 8192,
                  "prefillTimeMsPerReq" : 150,
                  "prefillPolicyType" : 0,
                  "decodeTimeMsPerReq" : 50,
                  "decodePolicyType" : 0,
                  "maxBatchSize" : 200,
                  "maxIterTimes" : 512,
                  "maxPreemptCount" : 0,
                  "supportSelectBatch" : false,
                  "maxQueueDelayMicroseconds" : 5000,
                  "maxFirstTokenWaitTime": 2500
              }
          },
          "LogConfig": {
              "dynamicLogLevel" : "",
              "dynamicLogLevelValidHours" : 2,
              "dynamicLogLevelValidTime" : ""
          }
      }
      
    3. 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
  4. (可选)若开启了HTTPS认证(即“httpsEnabled : true时,默认开启)。
    1. 则使用Service的证书导入脚本导入证书,各证书信息如表1所示。
      • HTTPS使用三面隔离时,HTTPS的业务面和管理面不建议使用同一套安全证书,使用同一套安全证书会存在较高的网络安全风险。
      • HTTPS和GRPC不建议使用同一套安全证书,使用同一套安全证书会存在较高的网络安全风险。
      • 导入证书时,对于用户导入CA证书的脚本权限要求为600,服务证书的脚本权限要求为600,私钥证书的脚本权限要求为400,吊销列表证书的脚本权限要求为600。
      • Service的证书导入脚本请参见《MindIE Motor开发指南》中的“配套工具 > MindIE Service Tools > CertTools”章节
      • 如果导入证书超时,请参考启动haveged服务处理。
      表1 证书文件清单

      证书文件

      默认目标路径

      说明

      根证书

      {MindIE安装目录}/latest/mindie-service/security/ca/

      支持多个CA证书。

      开启HTTPS后必选。

      服务证书

      {MindIE安装目录}/latest/mindie-service/security/certs/

      开启HTTPS后必选。

      服务证书私钥

      {MindIE安装目录}/latest/mindie-service/security/keys/

      支持私钥文件加密场景。

      开启HTTPS后必选。

      服务证书吊销列表

      {MindIE安装目录}/latest/mindie-service/security/certs/

      开启HTTPS后可选。

      服务证书私钥的加密口令

      {MindIE安装目录}/latest/mindie-service/security/pass/

      可选。

    2. {MindIE安装目录}/latest下执行以下命令修改证书文件的用户权限。
      1
      2
      3
      4
      chmod 400 mindie-service/security/ca/*
      chmod 400 mindie-service/security/certs/*
      chmod 400 mindie-service/security/keys/*
      chmod 400 mindie-service/security/pass/*
      
  5. 使用以下命令配置环境变量。
    1
    2
    3
    source /usr/local/Ascend/ascend-toolkit/set_env.sh                                 # CANN
    source /usr/local/Ascend/nnal/atb/set_env.sh                                       # ATB
    source /usr/local/Ascend/atb-models/set_env.sh                                # ATB Models
    
  6. 将模型权重文件(由用户自行准备)拷贝到3.b中模型配置参数“modelWeightPath”指定的目录下。
    cp -r {模型权重文件所在路径} /data/atb_testdata/weights/llama1-65b-safetensors
  7. 加载环境变量。
    1
    source mindie-service/set_env.sh
    
  8. 启动服务。启动命令需在/{MindIE安装目录}/latest/mindie-service目录中执行。

    拉起服务前,建议用户使用MindStudio的预检工具进行配置文件字段校验,辅助校验配置的合法性,详情请参见链接

    • (推荐)使用后台进程方式启动服务。
      1
      nohup ./bin/mindieservice_daemon > output.log 2>&1 &
      

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

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

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

      1
      Daemon start success!
      
    • Ascend-cann-toolkit工具会在执行服务启动的目录下生成kernel_meta_temp_xxxx目录,该目录为算子的cce文件保存目录。因此需要在当前用户拥有写权限目录下(例如Ascend-mindie-server_{version}_linux-{arch}_{abi}目录,或者用户在Ascend-mindie-server_{version}_linux-{arch}目录下自行创建临时目录)启动推理服务。
    • 如需切换用户,请在切换用户后执行rm -f /dev/shm/*命令,删除由之前用户运行创建的共享文件。避免切换用户后,该用户没有之前用户创建的共享文件的读写权限,造成推理失败。
    • bin目录按照安全要求,目录权限为550,没有写权限,不能直接在bin启动mindieservice_daemon。
    • 标准输出流捕获到的文件output.log支持用户自定义文件和路径。
    • 服务启动报缺失lib*.so依赖的错误时,处理方法请参见启动MindIE Motor服务时,出现找不到libboost_thread.so.1.82.0报错章节。
    • 不建议在同一容器中反复拉起服务,重复拉起前请清理容器“/dev/shm/”目录下的*llm_backend_*和llm_tokenizer_shared_memory_*文件,参考命令如下:
      1
      2
      find /dev/shm -name '*llm_backend_*' -type f -delete
      find /dev/shm -name 'llm_tokenizer_shared_memory_*' -type f -delete