AI开发平台MODELARTS-分离部署推理服务:步骤五 生成ranktable

时间:2024-12-17 18:06:51

步骤五 生成ranktable

介绍如何生成ranktable,以1p1d-tp2分离部署模式为例。当前1p1d分离部署模式,全量节点和增量节点分别占用2张卡,一共使用4张卡。

  • 配置tools工具根目录环境变量

    使用AscendCloud-LLM发布版本进行推理,基于AscendCloud-LLM包的解压路径配置tool工具根目录环境变量:

    export LLM_TOOLS_PATH=${root_path_of_AscendCloud-LLM}/llm_tools

    其中,`${root_path_of_AscendCloud-LLM}`为AscendCloud-LLM包解压后的根路径。

    当使用昇腾云的官方指导文档制作推理镜像时,可直接基于该固定路径配置环境变量:

    export LLM_TOOLS_PATH=/home/ma-user/AscendCloud/AscendCloud-LLM/llm_tools
  • 获取每台机器的rank_table

    在每个机器生成global rank_table信息与local rank_table信息。

    python ${LLM_TOOLS_PATH}/PD_separate/pd_ranktable_tools.py --mode gen --prefill-server-list 4,5 --decode-server-list 6,7 --api-server --save-dir ./save_dir

    执行后,会生成一个global_ranktable.json文件和使用实例个数的local_ranktable.json文件;如果指定了`--api-server`,还会生成一个local_ranktable_host.json文件用于确定服务入口实例。

    ./save_dir 生成ranktable文件如下(假设本地主机ip为10.**.**.18)。

    global_ranktable_10.**.**.18.json      # global rank_table
    local_ranktable_10.**.**.18_45.json    # 全量节点local rank_table
    local_ranktable_10.**.**.18_67.json    # 增量节点local rank_table
    local_ranktable_10.**.**.18_host.json  # api-server

    如果要启动多P多D服务,则需要修改--prefill-server-list和--decode-server-list参数,每个实例之间用空格隔开,例如2p2d-tp2:

    python ${LLM_TOOLS_PATH}/PD_separate/pd_ranktable_tools.py --mode gen --prefill-server-list 0,1 2,3 --decode-server-list 4,5 6,7 --api-server --save-dir ./save_dir
  • 合并不同机器的global rank_table(可选)

    如果分离部署在多台机器,获取每台机器的rank_table后,合并各个机器的global rank_table得到完整的global rank_table。

    python ${LLM_TOOLS_PATH}/PD_separate/pd_ranktable_tools.py --mode merge --global-ranktable-list ./ranktable/global_ranktable_0.0,0,0.json ./ranktable/global_ranktable_1.1.1.1.json --save-dir ./save_dir

    pd_ranktable_tools.py的入参说明如下。

    • --mode:脚本的处理模式,可选值为gen或者merge。gen模式表示生成rank_table文件,merge模式表示合并global rank_table文件。
    • --save-dir:保存生成的rank_table文件的根目录,默认为当前目录。
    • --api-server:仅在`gen`模式有效,可选输入,当存在该输入时,表示分离部署的服务入口在该机器。注意,在多台机器启动分离部署时,只能有一台机器存在服务入口。当存在该输入时,会生成local_ranktable_xx_host.json文件,用于在启动推理服务时确定服务入口实例。
    • --prefill-server-list:仅在`gen`模式有效,可选输入,后续入参表示若干个vllm全量实例,使用空格隔开,每个vllm实例的数字表示使用的昇腾卡device_id,使用多个昇腾卡时,device_id之间使用`,`分隔开。当存在该输入时,会生成对应全量实例个数的local_ranktable_xx_yy.json文件,用于在启动推理服务时确定全量实例。
    • --decode-server-list:仅在`gen`模式有效,可选输入,后续入参表示若干个vllm增量实例,使用空格隔开,每个vllm实例的数字表示使用的昇腾卡device_id,使用多个昇腾卡时,device_id之间使用`,`分隔开。当存在该输入时,会生成对应增量实例个数的local_ranktable_xx_yy.json文件,用于在启动推理服务时确定增量实例。
    • --global-ranktable-list:仅在`merge`模式有效,必选输入,后续入参表示需要合并的global rank_table,使用空格分隔开。

    执行后,会生成完成合并的global_ranktable_merge.json文件。

  • global_rank_table.json格式说明

    server_group_list的长度必须为3,第一个元素(group_id="0")代表Scheduler实例的ip信息,只能有一个实例。

    第二个元素(group_id="1")代表全量实例信息,长度即为全量实例个数。其中需要配置每个全量实例的ip信息以及使用的device信息。rank_id为逻辑卡号,必然从0开始计算,device_id为物理卡号,device_ip则通过上面的hccn_tool获取。

    第三个元素(group_id="2")代表增量实例信息,长度即为增量实例个数。其余信息和全量类似。

    global_rank_table.json具体示例如下:
    {
        "version": "1.0",
        "status": "completed",
        "server_group_list": [
            {
                "group_id": "0",
                "server_count": "1",
                "server_list": [
                    {
                        "server_id": "localhost", 
                        "server_ip": "localhost"
                    }
                ]
            },
            {
                "group_id": "1",
                "server_count": "1",
                "server_list": [
                    {
                        "server_id": "localhost", 
                        "server_ip": "localhost",
                        "device": [
                            {
                                "device_id": "4",
                                "device_ip": "10.**.**.22",
                                "rank_id": "0"
                            },
                            {
                                "device_id": "5",
                                "device_ip": "10.**.**.23",
                                "rank_id": "1"
                            }
                        ]
                    }
                ]
            },
            {
                "group_id": "2",
                "server_count": "1",
                "server_list": [
                    {
                        "server_id": "localhost",
                        "server_ip": "localhost",
                        "device": [
                            {
                                "device_id": "6",
                                "device_ip": "29.**.**.56",
                                "rank_id": "0"
                            },
                            {
                                "device_id": "7",
                                "device_ip": "29.**.**.72",
                                "rank_id": "1"
                            }
                        ]
                    }
                ]
            }
        ]
    }
    ```
  • local_rank_table.json格式说明
    每个全量/增量实例都需要local_rank_table.json。下面以某一个增量实例为例,需要和global_rank_table.json中的增量信息完全对应,group_id为0。
    ```
    {
        "version": "1.0",
        "status": "completed",
        "group_id": "0",
        "server_count": "1",
        "server_list": [
            {
                "server_id": "localhost",
                "server_ip": "localhost",
                "device": [
                    {
                        "device_id": "6",
                        "device_ip": "29.**.**.56",
                        "rank_id": "0"
                    },
                    {
                        "device_id": "7",
                        "device_ip": "29.**.**.72",
                        "rank_id": "1"
                    }
                ]
            }
        ]
    }
    ```
support.huaweicloud.com/bestpractice-modelarts/modelarts_llm_infer_91104.html