多机推理
单个模型权重过大,单台推理机显存有限,无法容纳整个模型权重参数时,需要采用多个节点进行多机推理。
前提条件
- 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
- 服务器或容器环境上已经安装好必要的驱动、CANN包和固件。
- 若使用容器化部署启动,要求共享内存设置不小于1GB。
- 若开启https双向认证或多机通信认证,需要提前准备好服务证书、服务器私钥、验签证书等,详情请参见《MindIE Service开发指南》的“集群服务部署 > 单机(非分布式)服务部署 > 安装部署 > 使用Deployer部署服务示例 > 部署Deployer服务端 > 准备TLS证书”章节。
软件包文件清单
与单机推理的软件包文件清单一致,请参见软件包文件清单。
使用限制
- 仅支持
Atlas 800I A2 推理产品 环境,最大支持双机16卡的多机推理;不支持Atlas 300I Duo 推理卡环境。 - 当前双机推理支持的模型为LLaMa-65B(FP16)、LLaMa3.1-405B(BF16)和DeepSeek-V2-236B(BF16)。
- “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文件权限需要设置为640,详细内容请根据以下样例进行配置。(该文件需要用户自行编写)
{ "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/Slave节点IP地址一致,如果启动容器时使用了--net=host,则需要与宿主机IP地址一致,请根据实际情况进行修改。
- device_id:表示在实际节点上的第几个NPU设备。
- device_ip:表示NPU设备的IP地址,可通过hccn_tool进行配置。
- rank_id:表示推理进程Rank编号。
操作步骤

Master节点和Slave节点上均需执行以下操作。
- 执行单机推理的1~2。
- 创建并启动Docker容器,此处以8卡昇腾环境为例。
以下启动命令仅供参考,可根据需求自行修改。
docker run -it -d --net=host --shm-size=1g \ --name container_name --device=/dev/davinci_manager \ --device=/dev/hisi_hdc \ --device=/dev/devmm_svm \ --device=/dev/davinci0 \ --device=/dev/davinci1 \ --device=/dev/davinci2 \ --device=/dev/davinci3 \ --device=/dev/davinci4 \ --device=/dev/davinci5 \ --device=/dev/davinci6 \ --device=/dev/davinci7 \ -v /usr/local/Ascend/driver:/usr/local/Ascend/driver:ro \ -v /usr/local/sbin:/usr/local/sbin:ro \ -v /path-to-weights:/path-to-weights:ro \ mindie:1.0.RC3-800I-A2-aarch64
- container_name:新启动的容器名称,请根据实际情况进行修改。
- --net=host:测试验证时,请设置容器网络为主机网络,以保证Docker容器间可以通信。
- --shm-size=1g:指定容器的共享内存段的大小。
- --device:将宿主机上的设备(如硬件设备或文件)映射到Docker容器中。
- /usr/local/Ascend:昇腾固件驱动安装目录,请根据实际安装目录设置。
- path-to-weights:权重挂载目录,请根据实际目录进行修改。
- mindie:1.0.RC3-800I-A2-aarch64:新启动的容器镜像名称,请根据实际情况进行修改。
- 在容器中,根据用户需要设置配置参数。
- 进入conf目录,打开“config.json”文件。
cd ../conf vim config.json
- 按“i”进入编辑模式,设置“multiNodesInferEnabled”=true开启多机推理,并根据用户需要修改表1的参数,参数详情请参见《MindIE Service开发指南》的“MindIE Service组件 > MindIE Server > 配置参数说明”章节。
表1 多机推理相关配置 配置项
配置说明
multiNodesInferPort
跨机通信的端口号。
interNodeTLSEnabled
跨机通信是否开启证书安全认证。
- true:开启证书安全认证。
- false:关闭证书安全认证。若关闭证书安全认证,可忽略以下参数。
interNodeTlsCaFile
根证书名称路径。“interNodeTLSEnabled” : true生效。
interNodeTlsCert
服务证书文件路径。“interNodeTLSEnabled” : true生效。
interNodeTlsPk
服务证书私钥文件路径。“interNodeTLSEnabled” : true生效。
interNodeTlsPkPwd
服务证书私钥加密密钥文件路径。“interNodeTLSEnabled” : true生效。
interNodeTlsCrl
服务证书吊销列表文件路径。“interNodeTLSEnabled”: true生效。
interNodeKmcKsfMaster
KMC密钥库文件路径。“interNodeTLSEnabled” : true生效。
interNodeKmcKsfStandby
KMC密钥库备份文件路径。“interNodeTLSEnabled” : true生效。
- 如果不开启https通信(即“httpsEnabled” : false时),会存在较高的网络安全风险。
- “modelWeightPath”参数配置路径下的config.json文件,需保证其用户组和用户名与当前用户一致,并且为非软链接,文件权限不高于640,若不符合要求将会导致启动失败。
- 在数据中心内部,如果不需要开启跨机通信安全认证,请配置“interNodeTLSEnabled” : false,若关闭跨机通信安全认证(即“interNodeTLSEnabled” : false),会存在较高的网络安全风险。
- 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
- 进入conf目录,打开“config.json”文件。
- (可选)若开启了grpc双向认证(即“interNodeTLSEnabled”=true时)。
- 使用证书管理工具导入证书,证书管理工具的使用请参见《MindIE Service开发指南》的“MindIE Service组件 > MindIE Service Tools > CertTools”章节。
- HTTPS使用三面隔离时,HTTPS的业务面和管理面不建议使用同一套安全证书,使用同一套安全证书会存在较高的网络安全风险。
- HTTPS和GRPC不建议使用同一套安全证书,使用同一套安全证书会存在较高的网络安全风险。
- 导入证书时,对于用户导入的CA文件证书工具要求的权限为600,服务证书文件证书工具要求的权限为600,私钥文件证书工具要求的权限要求为400,吊销列表证书工具要求的权限为600。
- 各证书文件信息如表2所示。
- 如果导入证书超时,请参考启动haveged服务处理。
表2 证书文件信息 证书文件
默认目标路径
说明
根证书
{MindIE安装目录}/security/grpc/ca/
开启“interNodeTLSEnabled” : true后必选。
服务证书
{MindIE安装目录}/security/grpc/certs/
开启“interNodeTLSEnabled” : true后必选。
服务证书私钥
{MindIE安装目录}/security/grpc/keys/
支持私钥文件加密场景。
开启“interNodeTLSEnabled” : true后必选。
服务证书吊销列表
{MindIE安装目录}/security/grpc/certs/
必选。
服务证书私钥的加密口令
软件包解压目录/security/pass/
必选。
- 在{MindIE安装目录}下执行以下命令修改证书文件的用户权限。
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/pass/*
- 使用证书管理工具导入证书,证书管理工具的使用请参见《MindIE Service开发指南》的“MindIE Service组件 > MindIE Service Tools > CertTools”章节。
- 执行单机推理的4.a~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安装目录}为例,用户可自行选择启动目录。此操作在Master节点容器和Slave节点容器中均需执行。
- (推荐)使用后台进程方式启动。
nohup ./bin/mindieservice_daemon > output.log 2>&1 &
在标准输出流捕获到的文件中,打印如下信息说明启动成功
Daemon start success!
- 直接启动。
./bin/mindieservice_daemon
回显如下则说明启动成功。
Daemon start success!
- bin目录按照安全要求,目录权限为550,没有写权限,但在执行推理过程中,算子会在当前目录生成kernel_meta 文件夹,此操作需要写权限,因此不能直接在bin启动mindieservice_daemon和llm_engine_test。
- 标准输出流捕获到的文件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
- (推荐)使用后台进程方式启动。