大语言模型推理性能PD配比仿真
acs-advisor基于python simpy实现了对vllm的轻量化仿真,支持针对PD混合、PD分离两类部署形态进行性能仿真,在给定请求负载和SLO约束下仿真出最优的实例数(混合实例、预填充推理实例,增量推理实例)。acs-advisor中实现了vllm内部的请求调度逻辑,从而近似还原了vllm中请求组batch的情况。对于模型执行耗时,acs-advisor中基于vllm服务的真实打点数据构建模型单步推理耗时的预测模型,从而屏蔽掉不同模型推理耗时对仿真的影响。注意,仿真工具当前没有适配前缀缓存,针对开了前缀缓存的场景,prefill实例的TTFT仿真偏差会较大。
安装acs-advisor工具
昇腾云6.5.910及以后版本的配套镜像中默认已经安装acs-advisor工具的whl包acs_advisor-xxx-py3-none-any.whl,无需单独安装。
可以通过如下命令查看是否已经安装acs-advisor工具。
pip show acs-advisor
如果需要安装acs-advisor工具,请参考以下步骤执行。
- 获取acs-advisor工具的whl包。whl包存放在软件包AscendCloud-LLM-xxx.zip > llm_tools目录中。acs-advisor工具安装在具备python的环境即可。
- 在已经安装python的环境中如windows机器(打开Windows PowerShell)或者linux服务器中,执行如下命令安装acs-advisor工具。(可选)
pip install llm_tools/acs_advisor-*-py3-none-any.whl
获取仿真数据源
使用acs-advisor进行实例数或者PD配比仿真,需要提前获取到vllm服务的真实service profiler打点数据作为工具输入。因此需要真实启动vllm服务,然后基于acs-bench工具 触发性能测试并导出服务的性能打点数据。样本量较少时会导致仿真得出的TTFT/TPOT等指标偏差较大,建议使用acs-bench采集性能打点数据时确保请求数在200以上。
仿真工具参数说明
acs-advisor simulate infer -i {{仿真数据源文件路径}} -ttft 3000 -tpot 50 -pmax 4 -pmin 1 -dmax 2 -dmin 1 -percent 90 -dt service_profiler -ds pd-disagg acs-advisor simulate infer -i {{仿真数据源文件路径}} -ttft 3000 -tpot 50 -mmax 4 -mmin 1 -percent 90 -dt service_profiler -ds pd-mix | 字段 | 是否必填 | 可选值 | 说明 |
|---|---|---|---|
| -i/--input_path | 是 | 无 | service profiler文件夹路径 |
| -dt/--datasource-type | 是 | 默认为metrics,可选值包括service_profiler和metrics | service_profiler,需要先启动服务,基于acs-bench和service profiler采集服务内部信息,然后基于该数据进行仿真。离线使用acs-advisor工具进行仿真时需要使用service_profiler数据源。 metrics为vllm的metrics指标,通常在在线扩缩容场景使用,当前暂不支持。 |
| -ttft/--slo-ttft | 是 | 任意正整数 | 期望的首token时延,单位为毫秒ms |
| -tpot/--slo-tpot | 是 | 任意正整数 | 期望的token间时延,单位为毫秒ms |
| -percent/--slo-percent | 是 | -1或者1到100的任意正整数 | 当取值为正整数时表示百分比,如90表示百分之90(P90)的请求。-1表示所有请求的指标取均值。 |
| -ds/--deployment-strategy | 否 | 默认为pd-disagg,可选值包括pd-disagg和pd-mix | 仿真 "PD分离" 或者 "PD混合" |
| -pmax/--prefill-max-replicas | 否 | 默认为1,任意正整数 | prefill 最大实例数 |
| -pmin/--prefill-min-replicas | 否 | 默认为1,任意正整数 | prefill最小实例数 |
| -dmax/-decode-max-replicas | 否 | 默认为1,任意正整数 | decode最大实例数 |
| -dmin/--decode-min-replicas | 否 | 默认为1,任意正整数 | decode最小实例数 |
| -mmax/--mix-max-replicas | 否 | 默认为1,任意正整数 | mix最大实例数(非PD分离) |
| -mmin/--mix-min-replicas | 否 | 默认为1,任意正整数 | mix最小实例数(非PD分离) |
| -rdt/--rate-distribution-type | 否 | 默认为None,可选值包括poisson或者uniform | 默认不指定请求分布,将采集的请求负载信息在仿真系统中重放。仅当指定rdt时,-rc / -r / -il / -ol 参数才生效 |
| -rc/--request-count | 否 | 默认为300,可选值为任意正整数 | 仿真请求数,默认将采集的请求负载信息在仿真系统中重放。仅当指定 -rdt 参数时 -rc 参数才会生效 |
| -r/--request-rate | 否 | 默认为5,可选值为任意正整数 | 默认值为-1表示不指定请求速率,将采集的请求负载信息在仿真系统中重放。仅当指定 -rdt 参数时 -r 参数才会生效 |
| -il/--input-length | 否 | 默认为1024,可选值为任意正整数 | 仿真时请求的输入token长度,默认将采集的请求负载信息在仿真系统中重放。仅当指定-rdt参数时 -il参数才会生效 |
| -ol/--output-length | 否 | 默认为512,可选值为任意正整数 | 仿真时请求的输出token长度,默认将采集的请求负载信息在仿真系统中重放。仅当指定-rdt参数时 -ol参数才会生效 |
| -pdp/--prefill-dp-size | 否 | 默认为-1,可选值为任意正整数 | 默认为-1表示使用service profiler数据中采集到的dp参数,注意ascend-vllm v0版本中必须手动指定该参数。prefill实例的数据并行参数,在当前vllm的部署形态中,Prefill的数据并行通常为1 |
| -ddp/--decode-dp-size | 否 | 默认为-1,可选值为任意正整数 | 默认为-1表示使用service profiler数据中采集到的dp参数,注意ascend-vllm v0版本中必须手动指定该参数。decode实例的数据并行参数,在当前vllm的部署形态中,decode的数据并行通常为16/32/64 |
| -cb/--communication-bandwidth | 否 | 默认为20,可选值为任意正整数 | PD分离部署形态时,decode pull kv cache的带宽大小,单位为GB/s,这个参数会轻微影响时延。通常使用默认值即可。 |
| -vv/--vllm-version | 否 | 默认为v1,可选值包括v0和v1 | 默认为vllm v1版本。不同版本的vllm,其调度逻辑不一样,会影响ttft和tpot。 |
| -mtpar/--mtp-accept-rate | 否 | 默认为0,可选值为0到1之间的任意浮点数 | mtp接收率,deepseek通常为0.8,不同模型需要评估对应的mtp接受率。指定该参数后,仿真过程中会概率性一次生成2个token。 |
| -nss/--num-scheduler-steps | 否 | 默认为1,可选值为1-8之间的正整数 | 调度一次前向推理多次,在ascend-vllm v1中通常为4。 |
| -profile/--profile | 否 | 默认为False,bool类型参数。 | 指定该参数表示生成仿真系统内部的trace图,可用于白盒化展示仿真系统的内部逻辑。指定该参数时会导致仿真速度变慢,因此通常仅debug阶段打开。 |
| -l/--lite-mode | 否 | 默认为False,bool类型参数 | 对于data-parallel-size大于1的场景,仿真耗时会随data-parallel-size参数增加而线性增加。指定该参数时将会使能轻量化仿真,即仅针对部分dp实际触发仿真任务,从而减少耗时,使用该参数后可能导致tpot的偏差增大1ms左右。 |
| -seed/--seed | 否 | 默认为3,可选值为任意正整数 | 仿真时,工具内部生成请求速率和机器学习模型的随机种子 |
| 字段 | 是否必填 | 可选值 | 说明 |
|---|---|---|---|
| ADVISOR_LOG_LEVEL | 否 | 默认为info,debug, info, warning, error, critical | advisor工具日志等级。 |
| MAX_PADDING_LIMITS | 否 | 默认为50000,可选值为任意正整数 | ascend-vllm v0中特有环境变量。这个参数会影响请求调度逻辑,需要根据ascend-vllm v0部署服务的参数配置确定。 |
| PREFILL_STOP_SCHEDULE_TOKENS | 否 | 默认为-1,可选值为任意正整数 | ascend-vllm v1中特有环境变量。这个参数会影响请求调度逻辑,需要根据ascend-vllm v1部署服务的参数配置确定。 |
输出示例
下述截图为工具输出示例,表示不同P实例(预填充推理)和D实例(增量推理)数量下的TTFT、TPOT和输出吞吐,以及在P90 TTFT不超过5000ms且P90 TPOT不超过50ms下的有效输出吞吐-goodput。最后给出最佳的PD实例数为3P1D。

仿真系统可视化
当指定--profile参数时,会在当前路径下生成simulate_profile文件夹,文件夹中包含不同配比下的仿真可视化文件。拖拽下述任意json文件至chrome://tracing(浏览器中输入该地址)中即可可视化仿真系统内部请求的推理过程。

可视化示例如下所示:
