多机推理
单个模型权重过大,单台推理机显存有限,无法容纳整个模型权重参数时,需要采用多个节点进行多机推理。
前提条件
- MindIE Server对于Python的环境要求为Python3.10,如果环境中的Python3.10不是默认版本,需要参考如下方法添加环境变量(Python路径根据实际路径进行修改)。
export LD_LIBRARY_PATH=/usr/local/python3.10.13/lib:$LD_LIBRARY_PATH export PATH=/usr/local/python3.10.13/bin:$PATH
- 服务器或容器环境上已经安装好驱动和固件、CANN包、PyTorch、ATB Models和MindIE。
- 若开启https双向认证或多机通信认证,需要提前准备好服务证书、服务器私钥、验签证书等,详情请参见《MindIE Service开发指南》中的 章节。
软件包文件清单
与单机推理的软件包文件清单一致,请参见软件包文件清单。
使用限制
- 多机推理仅支持llama-65b稠密模型。仅支持Atlas 800I A2推理产品环境,最大支持2机16卡的多机推理;不支持Atlas 300I Duo 推理卡环境。
- “maxLinkNum”默认值为1000,推荐设置为300。1000并发能力受模型性能影响受限支持,一般较小模型、较低序列长度下才可以使用1000并发。
相关环境变量
参数名称 |
参数说明 |
---|---|
MIES_CONTAINER_IP |
容器部署时,请设置成容器的IP地址(如果容器与裸机共用IP地址,应当配置为裸机IP地址),会用于多机间GRPC(Google Remote Procedure Call)通信和EndPoint业务面接收请求。 裸机部署时,不配置。 |
HOST_IP |
裸机部署时(不建议使用裸机部署),请设置成机器的物理机或虚拟机的IP地址。 容器部署时不配置。 |
RANKTABLEFILE |
ranktable json文件的绝对路径。
|
MIES_CONFIG_JSON_PATH |
config.json文件的路径。
|

MindIE Server启动时,会根据“multiNodesInferEnabled”参数判断是单机推理还是多机推理:
- “multiNodesInferEnabled”=false代表单机推理,MindIE Server在启动过程中不会读取“RANKTABLEFILE”环境变量,但是底层模型加速库初始化时,会尝试读取该环境变量。所以在单机推理场景中,如果设置了该环境变量,请保证文件内容值的正确性(即:server_count=1、节点IP、device_ip和rank_id等必须正确)。
- “multiNodesInferEnabled”=true代表多机推理,MindIE Server在启动过程中,会读取“RANKTABLEFILE”环境变量,并判断ranktable文件内容是否有效。
- rank_id=0的节点为Master节点,其余为Slave节点。
- Master服务实例,可以接收用户推理请求;Slave实例无法接收用户推理请求。

当开启多机推理时,config.json中的“npuDeviceIds”和“worldSize”将失效,具体使用卡号及总体Rank数,将根据ranktable文件确定。
ranktable文件样例
ranktable.json文件根据以下样例进行配置即可。(该文件需要用户自行编写)
{ "version": "1.0", "server_count": "2", "server_list": [ { "server_id": "Master节点IP地址", "container_ip": "Master节点容器IP地址", "device": [ { "device_id": "0", "device_ip": "10.20.0.2", "rank_id": "0" }, { "device_id": "1", "device_ip": "10.20.0.3", "rank_id": "1" }, { "device_id": "2", "device_ip": "10.20.0.4", "rank_id": "2" }, { "device_id": "3", "device_ip": "10.20.0.5", "rank_id": "3" }, { "device_id": "4", "device_ip": "10.20.0.6", "rank_id": "4" }, { "device_id": "5", "device_ip": "10.20.0.7", "rank_id": "5" }, { "device_id": "6", "device_ip": "10.20.0.8", "rank_id": "6" }, { "device_id": "7", "device_ip": "10.20.0.9", "rank_id": "7" } ] }, { "server_id": "Slave节点IP地址", "container_ip": "Slave节点容器IP地址", "device": [ { "device_id": "0", "device_ip": "10.20.0.10", "rank_id": "8" }, { "device_id": "1", "device_ip": "10.20.0.11", "rank_id": "9" }, { "device_id": "2", "device_ip": "10.20.0.12", "rank_id": "10" }, { "device_id": "3", "device_ip": "10.20.0.13", "rank_id": "11" }, { "device_id": "4", "device_ip": "10.20.0.14", "rank_id": "12" }, { "device_id": "5", "device_ip": "10.20.0.15", "rank_id": "13" }, { "device_id": "6", "device_ip": "10.20.0.16", "rank_id": "14" }, { "device_id": "7", "device_ip": "10.20.0.17", "rank_id": "15" } ] } ], "status": "completed" }
参数说明:
- Master/Slave节点IP地址:请根据实际情况进行修改。
- Master/Slave节点容器IP地址:一般与Master节点IP地址一致,请根据实际情况进行修改。
- device_id:表示在实际节点上的第几个NPU设备。
- device_ip:表示NPU设备的IP地址,可通过hccn_tool进行配置。
- rank_id:表示推理进程Rank编号。
操作步骤

Master节点和Slave节点上均需执行以下操作。
- 执行单机推理的1~2。
- 根据用户需要设置配置参数。
- 进入conf目录,打开“config.json”文件。
cd ../conf vim config.json
- 按“i”进入编辑模式,设置“multiNodesInferEnabled”=true开启多机推理,并根据用户需要修改表1的参数,参数详情请参见《MindIE Service开发指南》中的 章节。
表1 多机推理相关配置 配置项
配置说明
multiNodesInferPort
跨机通信的端口号。
interNodeTLSEnabled
跨机通信是否开启证书安全认证。
- true:开启证书安全认证。
- false:关闭证书安全认证。若关闭证书安全认知,可忽略以下参数。
interNodeTlsCaFile
根证书名称路径。“interNodeTLSEnabled”=true生效。
interNodeTlsCert
服务证书文件路径。“interNodeTLSEnabled”=true生效。
interNodeTlsPk
服务证书私钥文件路径。“interNodeTLSEnabled”=true生效。
interNodeTlsPkPwd
服务证书私钥加密密钥文件路径。“interNodeTLSEnabled”=true生效。
interNodeKmcKsfMaster
KMC密钥库文件路径。“interNodeTLSEnabled”=true生效。
interNodeKmcKsfStandby
KMC密钥库备份文件路径。“interNodeTLSEnabled”=true生效。
- 如果不开启https通信(即“httpsEnabled”=false时),会存在较高的网络安全风险。
- “modelWeightPath”参数配置路径下的{modelWeightPath}/config.json文件,需保证其用户组和用户名与当前用户一致,并且为非软链接,文件权限不高于640。
- 在数据中心内部,如果不需要开启跨机通信安全认证,请配置“interNodeTLSEnabled”=false,若关闭跨机通信安全认证(即“interNodeTLSEnabled”=false),会存在较高的网络安全风险。
- 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
- 进入conf目录,打开“config.json”文件。
- (可选)若开启了grpc双向认证(即“interNodeTLSEnabled”=true时)。
- 使用证书管理工具导入证书,证书管理工具的使用请参见《MindIE Service开发指南》中的 章节。
表2 证书文件信息 证书文件
默认目标路径
说明
根证书
mindie-service/security/grpc/ca/。
开启“interNodeTLSEnabled”=true后必选。
服务证书
mindie-service/security/grpc/certs/。
开启“interNodeTLSEnabled”=true后必选。
服务证书私钥
mindie-service/security/grpc/keys/。
支持私钥文件加密场景。
开启“interNodeTLSEnabled”=true后必选。
服务证书吊销列表
mindie-service/security/grpc/certs/。
可选。
- 修改证书文件的用户权限。
chmod 400 mindie-service/security/grpc/ca/* chmod 400 mindie-service/security/grpc/certs/* chmod 400 mindie-service/security/grpc/keys/* chmod 400 mindie-service/security/grpc/certs/*
- 使用证书管理工具导入证书,证书管理工具的使用请参见《MindIE Service开发指南》中的 章节。
- 执行单机推理的5~7。
- 配置环境变量“RANKTABLEFILE”和“MIES_CONTAINER_IP”(以ranktable文件样例中的ranktable为例)。
- Master节点容器中
export MIES_CONTAINER_IP=Master节点IP地址 export RANKTABLEFILE=${path}/ranktable.json
- Slave节点容器中
export MIES_CONTAINER_IP=Slave节点IP地址 export RANKTABLEFILE=${path}/ranktable.json
- Master节点容器中
- 启动服务,启动命令需在/{MindIE安装目录}/latest/mindie-service目录中执行。此操作在Master节点容器和Slave节点容器中均需执行。
- 进行性能测试。
./bin/llm_engine_test ${数据集文件路径}
数据集文件由用户自行准备,格式为csv。
- 进行功能推理。
- (推荐)使用后台进程方式启动。
nohup ./bin/mindieservice_daemon > output.log 2>&1 &
在标准输出流捕获到的文件中,打印如下信息说明启动成功
Daemon start success!
- 直接启动。
./bin/mindieservice_daemon
回显如下则说明启动成功。
Daemon start success!
- (推荐)使用后台进程方式启动。
- bin目录按照安全要求,目录权限为550,没有写权限,不能直接在bin启动mindieservice_daemon和llm_engine_test。
- 标准输出流捕获到的文件output.log支持用户自定义文件和路径。
- 进行性能测试。