配置推理业务故障恢复
在一体机混部或无K8s的场景下,推理进程异常后,没有有效的恢复手段。本章节提供了推理业务故障后自动恢复的示例。示例中启动脚本作为容器entrypoint,自动拉起推理进程,监控推理进程状态,并在异常后重新拉起推理进程。
- 支持MindIE Server单机推理。
- 不支持MindIE Server多机推理。仅重启其中一个容器中的推理进程,业务无法恢复。
操作步骤
以下配置过程以Qwen3-1.7B模型为例。
- 获取MindIE容器镜像。
- 在节点上查看MindIE镜像。
docker images |grep mindie
回显示例如下:
… swr.cn-south-1.myhuaweicloud.com/ascendhub/mindie 2.1.RC2-800I-A2-py311-openeuler24.03-lts a4708118cd12 6 weeks ago 16GB …
- 获取Qwen3-1.7B模型权重。
# 创建模型权重保存目录 mkdir -p /data/atlas_dls/public/infer/model_weight cd /data/atlas_dls/public/infer/model_weight/ # 若未安装git-lfs,需要先安装git-lfs。git-lfs是一个Git扩展,专门用于管理大文件和二进制文件 yum install -y git-lfs # git启用lfs git lfs install # 权重下载 git clone https://www.modelscope.cn/Qwen/Qwen3-1.7B.git # 修改权重文件权限 chmod -R 750 Qwen3-1.7B/ # (可选)如果使用普通用户镜像,权重路径所属应为镜像内默认的1000用户 chown -R 1000:1000 Qwen3-1.7B/
- 从MindIE容器内复制配置文件config.json到节点目录。
- 在节点上创建目录。
mkdir -p /data/atlas_dls/public/infer/script/Qwen3-1.7B
- 启动容器,将目录“/data/atlas_dls/public/infer/script/Qwen3-1.7B”挂载到容器中。
docker run --rm -it \ -v /data/atlas_dls/public/infer/script/Qwen3-1.7B:/data/atlas_dls/public/infer/script/Qwen3-1.7B \ <mindie image:tag> /bin/bash
请用户将<mindie image:tag>替换为实际镜像名和tag。
- 在容器内,将config.json复制到“/data/atlas_dls/public/infer/script/Qwen3-1.7B”中。
cp $MIES_INSTALL_PATH/conf/config.json /data/atlas_dls/public/infer/script/Qwen3-1.7B/
容器内环境变量MIES_INSTALL_PATH为MindIE Server的安装路径,默认为“/usr/local/Ascend/mindie/latest/mindie-service”,请用户替换为实际安装路径。
- 退出容器。
exit
- 在节点的“/data/atlas_dls/public/infer/script/Qwen3-1.7B”目录中查看config.json文件。
ll
回显示例如下:
… -rw-r----- 1 root root 3920 11月 8 11:53 config.json …
- 在节点上创建目录。
- 修改config.json文件。
- 打开config.json文件。
vi /data/atlas_dls/public/infer/script/Qwen3-1.7B/config.json
- 按“i”进入编辑模式,按实际使用情况修改如下参数。参数说明详细请参见《MindIE LLM开发指南》中的“核心概念与配置 > 配置参数说明(服务化)”章节。
{ … "ServerConfig" : { "ipAddress" : "127.0.0.1", "managementIpAddress" : "127.0.0.2", "port" : 1025, "managementPort" : 1026, "metricsPort" : 1027, … "httpsEnabled" : false, … }, "BackendConfig" : { … "npuDeviceIds" : [[0,1]], … "ModelDeployConfig" : { … "truncation" : false, "ModelConfig" : [ { … "modelName" : "qwen3", "modelWeightPath" : "/job/model_weight/", "worldSize" : 2, … } ] }, … } }其中,modelWeightPath为挂载到容器中的模型权重路径。
- 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
- 打开config.json文件。
- 进入“mindcluster-deploy”仓库,根据mindcluster-deploy开源仓版本说明进入版本对应分支,获取“samples/inference/without-k8s/”目录下的启动脚本infer_start.sh,放在节点目录“/data/atlas_dls/public/infer/script/Qwen3-1.7B/”下,并对infer_start.sh脚本进行编辑。
- 打开infer_start.sh脚本。
vi /data/atlas_dls/public/infer/script/Qwen3-1.7B/infer_start.sh
- 按“i”进入编辑模式,按实际情况修改脚本中的相关配置。
… if [[ -z "${MIES_INSTALL_PATH}" ]]; then export MIES_INSTALL_PATH=/usr/local/Ascend/mindie/latest/mindie-service # 镜像中MindIE Server安装目录,若安装路径不一致,请用户自行修改 fi … mkdir -p /job/script/alllog/ INFER_LOG_PATH=/job/script/alllog/output_$(date +%Y%m%d_%H%M%S).log # 日志落盘路径 # config.json export MIES_CONFIG_JSON_PATH=/job/script/config.json # 推理任务启动配置文件路径,容器启动时挂载进容器 # (可选)其他用户自定义步骤 … - 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
- 增加脚本可执行权限。
chmod +x infer_start.sh
“/data/atlas_dls/public/infer/”的目录结构如下:
├── model_weight │ └── Qwen3-1.7B └── script └── Qwen3-1.7B ├── config.json └── infer_start.sh - 打开infer_start.sh脚本。
- 启动容器,拉起MindIE任务。
- 使用Ascend Docker Runtime挂载芯片和设备
docker run -it -d --net=host --shm-size=1g \ --name <container-name> \ -e ASCEND_VISIBLE_DEVICES=0,1 \ -v /usr/local/Ascend/driver:/usr/local/Ascend/driver:ro \ -v /usr/local/sbin:/usr/local/sbin:ro \ -v /data/atlas_dls/public/infer/script/Qwen3-1.7B/:/job/script/ \ -v /data/atlas_dls/public/infer/model_weight/Qwen3-1.7B/:/job/model_weight/ \ --entrypoint /job/script/infer_start.sh <mindie image:tag> <restart_times>
- <container-name>表示容器名称。
- 请用户将<mindie image:tag>替换为实际镜像名和tag。
- <restart_times>作为参数传入infer_start.sh中,表示服务重启次数,需替换为数字,不填默认为0。超过重启次数会退出容器。
- 请用户按需自行修改环境变量ASCEND_VISIBLE_DEVICES的值,以挂载不同数量芯片。芯片ID需要与config.json中npuDeviceIds字段包含的芯片ID保持一致。
- 不使用Ascend Docker Runtime挂载芯片和设备
docker run -it -d --net=host --shm-size=1g \ --name <container-name> \ --device=/dev/davinci0:rwm \ --device=/dev/davinci1:rwm \ --device=/dev/davinci_manager:rwm \ --device=/dev/devmm_svm:rwm \ --device=/dev/hisi_hdc:rwm \ -v /usr/local/sbin/npu-smi:/usr/local/sbin/npu-smi \ -v /usr/local/Ascend/driver:/usr/local/Ascend/driver:ro \ -v /usr/local/sbin:/usr/local/sbin:ro \ -v /data/atlas_dls/public/infer/script/Qwen3-1.7B/:/job/script/ \ -v /data/atlas_dls/public/infer/model_weight/Qwen3-1.7B/:/job/model_weight/ \ --entrypoint /job/script/infer_start.sh <mindie image:tag> <restart_times>
请用户自行增删“--device”参数,以挂载不同数量芯片和设备。芯片ID需要与config.json中npuDeviceIds字段包含的芯片ID保持一致。
- 使用Ascend Docker Runtime挂载芯片和设备
- 查看容器日志。
docker logs -f <container-name>
若显示如下信息,说明容器启动成功。
… Daemon start success! …
- 新建终端窗口,输入以下命令,访问服务。若请求成功返回,表示推理服务部署成功。
curl -H "Accept: application/json" \ -H "Content-Type: application/json" \ -X POST -d '{ "model": "<model_name>", "messages": [ {"role": "system", "content": "you are a helpful assistant."}, { "role": "user", "content": "How many r are in the word \"strawberry\"" } ], "max_tokens": 256, "stream": false, "do_sample": true, "ignore_eos": true, "temperature": 0.6, "top_p": 0.95, "top_k": 20, "stream": false }' \ http://<ipAddress>:<port>/v1/chat/completions
- <model_name>需替换为config.json中modelName字段的值。
- <ipAddress>需替换为config.json中ipAddress字段的值。
- <port>需替换为config.json中port字段的值。
- 测试服务故障后是否自动重启。
- 在节点上构造服务故障。
# 查询NPU卡上的进程信息,包含进程号 npu-smi info # 杀进程,构造故障,请将<process_id>替换为进程号 kill -9 <process_id>
- 查看容器日志。
docker logs -f <container-name>
若显示如下信息,说明重启成功。
Daemon is killing... … [EntryPoint Script Log]running job failed. exit code: 137 [EntryPoint Script Log]restart mindie service daemon, cur: 0, max: 1 … Daemon start success!
- 在节点上构造服务故障。
- 停止容器。
docker stop <container-name>
父主题: 一体机特性指南