PD分离部署使用说明

2025-08-12 19:01:18 7051

步骤一:生成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 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"

}

]

}

]

}

```