多机推理

单个模型权重过大,单台推理机显存有限,无法容纳整个模型权重参数时,需要采用多个节点进行多机推理。

前提条件

软件包文件清单

与单机推理的软件包文件清单一致,请参见软件包文件清单

使用限制

相关环境变量

参数名称

参数说明

MIES_CONTAINER_IP

容器部署时,请设置成容器的IP地址(如果容器与裸机共用IP地址,应当配置为裸机IP地址),会用于多机间GRPC(Google Remote Procedure Call)通信和EndPoint业务面接收请求。

裸机部署时,不配置。

HOST_IP

裸机部署时(不建议使用裸机部署),请设置成机器的物理机或虚拟机的IP地址。

容器部署时不配置。

RANKTABLEFILE

ranktable json文件的绝对路径。

  • 多机推理必须配置。
  • 单机推理建议取消该环境变量(取消命令:unset RANKTABLEFILE)。如果设置该环境变量,文件内容必须正确有效(节点IP地址和device_ip必须正确),否则会导致模型初始化失败。

MIES_CONFIG_JSON_PATH

config.json文件的路径。

  • 如果该环境变量存在,则读取该值。
  • 如果不存在,则读取${MIES_INSTALL_PATH}/conf/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节点上均需执行以下操作。

  1. 执行单机推理的1~2
  2. 根据用户需要设置配置参数。

    1. 进入conf目录,打开“config.json”文件。
      cd ../conf
      vim config.json
    2. 按“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),会存在较高的网络安全风险。
    3. 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。

  3. (可选)若开启了grpc双向认证(即“interNodeTLSEnabled”=true时)。

    1. 使用证书管理工具导入证书,证书管理工具的使用请参见MindIE Service开发指南中的MindIE Server > 证书管理工具 > config_mindie_server_tls_cert.py章节。
      表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/。

      可选。

    2. 修改证书文件的用户权限。
      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/*

  4. 执行单机推理的5~7
  5. 配置环境变量“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

  6. 启动服务,启动命令需在/{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支持用户自定义文件和路径。