单机推理
前提条件
- 服务器或容器环境上已经安装好必要的驱动、CANN包和固件。
- 若开启HTTPS双向认证,需要提前准备好服务证书、服务器私钥和验签证书等。
- 若使用容器化部署启动,要求共享内存设置不小于1GB。
- MindIE Server对于Python的环境要求为Python3.10.x或者Python3.11.4。此处以Python3.10.13为例,如果环境中的Python3.10.13不是默认版本,需要参考如下方法添加环境变量(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所示。
目录/文件 |
文件 |
说明 |
---|---|---|
bin |
gen_cert |
CA证书生成工具。 |
http_client_ctl |
探针启动程序。 |
|
mies_tokenizer-{version}-py3-none-any.whl |
mies_tokenizer模块安装包。 |
|
mindie_llm_backend_connector |
进程间通信模块。 |
|
mindiebenchmark-{version}-py3-none-any.whl |
MindIE Benchmark工具安装包。 |
|
mindieclient-{version}-py3-none-any.whl |
MindIE Client工具安装包。 |
|
mindieservice_daemon |
主程序。 |
|
model_wrapper-{version}-py3-none-any.whl |
model_wrapper模块安装包。 |
|
ms_controller |
MindIE MS状态管理组件。 |
|
ms_coordinator |
MindIE MS负载均衡器。 |
|
ms_server |
MindIE MS服务端。 |
|
msctl |
MindIE MS客户端。 |
|
seceasy_encrypt |
加密工具。 |
|
version |
版本信息。 |
|
conf |
cert_config.json |
配置文件。 |
config.json |
||
gen_cert.json |
||
http_client_ctl.json |
||
infer_server.json |
||
machine_config/* |
||
model_config/* |
||
ms_controller.json |
||
ms_coordinator.json |
||
ms_coordinator_prefixcache.json |
||
ms_server.json |
||
msctl.json |
||
update_server.json |
||
include |
- |
SDK头文件。 |
lib |
grpc |
依赖的GRPC文件目录。 |
libbackend_manager.so |
推理服务so文件。 |
|
libboost_chrono.so.1.82.0 |
||
libboost_thread.so.1.82.0 |
||
libboundscheck.so |
||
libconfig_manager.so |
||
libcrypto.so |
||
libhse_cryption.so |
||
libkmc.so.22 |
||
libkmcext.so.22 |
||
libmie_digs.so |
||
libmie_role_manager.so |
||
libmindie_llm_backend_model.so |
||
libmindie_llm_ibis.so |
||
libmindieservice_common.so |
||
libmindieservice_endpoint.so |
||
libmindieservice_llm_engine.so |
||
libmindieservice_tokenizer.so |
||
libprometheus-cpp-core.so.1.1.0 |
||
libprometheus-cpp-pull.so.1.1.0 |
||
libsdp.so.22 |
||
libsec_easy_utils.a |
||
libssl.so |
||
logs |
- |
日志文件。 |
scripts |
config_mindie_server_tls_cert.py |
证书管理脚本。 |
utils |
Python工具目录。 |
|
http_client_ctl |
HTTP命令行客户端。 |
|
security |
ca |
根证书目录。 |
certs |
服务证书和服务证书吊销列表目录。 |
|
keys |
服务证书私钥目录。 |
|
pass |
密钥口令加密文件目录。 |
|
set_env.sh |
- |
设置环境变量脚本。 |
version.info |
- |
版本信息。 |
操作步骤
- 以安装用户进入MindIE安装目录。
cd {MindIE安装目录}/
- 确认目录文件权限是否如下所示,若存在不匹配项,则参考以下命令修改权限。
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/*
配置文件权限是必须操作,若文件权限不符合要求将会导致MindIE Server启动失败。
- 根据用户需要设置配置参数。
- 进入conf目录,打开“config.json”文件。
cd mindie-service/conf vim config.json
- 按“i”进入编辑模式,根据用户需要修改配置参数,参数详情请参见《MindIE Service开发指南》的“MindIE Service组件 > MindIE Server > 配置参数说明”章节。
配置文件config.json格式如下:
{ "Version": "1.0.0", "LogConfig" : { "logLevel" : "Info", "logFileSize" : 20, "logFileNum" : 20, "logPath" : "logs/mindservice.log" }, "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", "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", "inferMode" : "standard", "interCommTLSEnabled" : true, "interCommPort" : 1121, "interCommTlsCaFile" : "security/grpc/ca/ca.pem", "interCommTlsCert" : "security/grpc/certs/server.pem", "interCommPk" : "security/grpc/keys/server.key.pem", "interCommPkPwd" : "security/grpc/pass/key_pwd.txt", "interCommTlsCrl" : "security/grpc/certs/server_crl.pem", "openAiSupport" : "vllm" }, "BackendConfig": { "backendName" : "mindieservice_llm_engine", "modelInstanceNumber" : 1, "npuDeviceIds" : [[0,1,2,3]], "tokenizerProcessNumber" : 8, "multiNodesInferEnabled": false, "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/mindie_server_key_pwd.txt", "interNodeTlsCrl" : "security/grpc/certs/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" } ] }, "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 } } }
- 如果不开启https通信(即“httpsEnabled” : false时),会存在较高的网络安全风险。
- “modelWeightPath”参数配置路径下的config.json文件,需保证其用户组和用户名与当前用户一致,并且为非软链接,文件权限不高于640,若不符合要求将会导致MindIE Server启动失败。
- maxLinkNum默认值为1000,推荐设置为300。1000并发能力受模型性能影响受限支持,一般较小模型、较低序列长度下才可以使用1000并发。
- 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
- 进入conf目录,打开“config.json”文件。
- (可选)若开启了HTTPS认证(即“httpsEnabled” : true时,默认开启)。
- 则使用Service的证书导入脚本导入证书,各证书信息如表2所示。
- HTTPS使用三面隔离时,HTTPS的业务面和管理面不建议使用同一套安全证书,使用同一套安全证书会存在较高的网络安全风险。
- HTTPS和GRPC不建议使用同一套安全证书,使用同一套安全证书会存在较高的网络安全风险。
- 导入证书时,对于用户导入的CA文件证书工具要求的权限为600,服务证书文件证书工具要求的权限为600,私钥文件证书工具要求的权限要求为400,吊销列表证书工具要求的权限为600。
- Service的证书导入脚本请参见《MindIE Service开发指南》的“MindIE Service组件 > MindIE Service Tools > CertTools”章节。
- 如果导入证书超时,请参考启动haveged服务处理。
- 在{MindIE安装目录}下执行以下命令修改证书文件的用户权限。
chmod 400 mindie-service/security/ca/* chmod 400 mindie-service/security/certs/* chmod 400 mindie-service/security/keys/* chmod 400 mindie-service/security/pass/*
- 则使用Service的证书导入脚本导入证书,各证书信息如表2所示。
- 准备环境配置文件。
- 直接使用安装后的MindIE Service软件包中的环境变量,其环境变量配置文件路径为:/{MindIE安装目录}/mindie-service/set_env.sh。以安装用户执行以下命令修改set_env.sh权限。
chmod +w set_env.sh
环境配置文件如下所示,详情请参见《MindIE Service开发指南》的“附录 > 环境变量”章节。
- 样例是llama-65b的环境变量,请用户根据实际的模型设置环境变量。
- 为避免安装和使用时容器不一致或用户不一致导致服务不能正常使用,建议在set_env.sh中添加以下三个环境变量:(以root用户为例)
source /usr/local/Ascend/ascend-toolkit/set_env.sh # CANN source /usr/local/Ascend/nnal/atb/set_env.sh # ATB source /usr/local/Ascend/llm_model/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 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 # OCK后处理日志 export OCK_LOG_LEVEL=ERROR export OCK_LOG_TO_STDOUT=0 # 触发重计算的阈值,不设置时默认0.5;阈值范围只能是[0,1),越大越容易触发 export MIES_RECOMPUTE_THRESHOLD=0.5
- 按“i”进入编辑模式,拷贝5.a中的环境变量配置内容,并根据实际情况进行修改。
- 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
- 直接使用安装后的MindIE Service软件包中的环境变量,其环境变量配置文件路径为:/{MindIE安装目录}/mindie-service/set_env.sh。以安装用户执行以下命令修改set_env.sh权限。
- 将模型权重文件(由用户自行准备)拷贝到3.b中模型配置参数“modelWeightPath”指定的目录下。
cp -r {模型权重文件所在路径} /data/atb_testdata/weights/llama1-65b-safetensors
- 加载环境变量。
source mindie-service/set_env.sh
- 启动服务。以{MindIE安装目录}为例,用户可自行选择启动目录。
- (推荐)使用后台进程方式启动服务。
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支持用户自定义文件和路径。
- 服务启动报缺失lib*.so依赖的错误时,处理方法请参见启动MindIE Service服务时,出现找不到libboost_thread.so.1.82.0报错章节。
- 不建议在同一容器中反复拉起服务,重复拉起前请清理容器“/dev/shm/”目录下的*llm_backend_*和llm_tokenizer_shared_memory_*文件,参考命令如下:
find /dev/shm -name '*llm_backend_*' -type f -delete find /dev/shm -name 'llm_tokenizer_shared_memory_*' -type f -delete
- (推荐)使用后台进程方式启动服务。