服务化专家建议工具
简介
- 服务化专家建议工具(Service Profiling Advisor)基于 MindIE Service 服务化框架,及 benchmark 的输出结果,可以一键式给出调参建议,提供给用户作为调优参考。工具基于 benchmark 的 instance 输出结果、MindIE Service 的 config.json 配置、NPU显存情况、部署模型等信息,综合分析给出 config.json 中 maxBatchSize、maxPrefillBatchSize 等配置的调参建议,用于提高 TTFT / Throughput 等性能优化指标。
- 注意:由于 CPU、内存等硬件差异,网络环境等不同,以及模型参数配置的细节不同等,当前建议值不能保证性能一定有提升,需要实际修改后验证。
昇腾AI处理器支持情况
说明: AI处理器与昇腾产品的对应关系,请参见《昇腾产品形态说明》。
| AI处理器类型 | 是否支持 |
|---|---|
| Ascend 910C | x |
| Ascend 910B | √ |
| Ascend 310B | x |
| Ascend 310P | x |
| Ascend 910 | x |
须知: 针对Ascend 910B,当前仅支持该系列产品中的Atlas 800I A2 推理产品。
使用前准备
环境准备
-
准备一台昇腾Atlas 800I A2 推理系列的NPU服务器。
-
Python环境:需要Python 3.10或更高版本。
-
依赖包安装:
pip install scipy loguru pandas psutil # 安装必要的依赖
数据准备
- MindIE benchmark 结果输出正常,生成的instance文件夹放置路径为/your/path/instance/。
- MindIE Service config.json 文件配置正确,一般位于/usr/local/Ascend/mindie/latest/mindie-service/conf目录下。
工具安装
-
pip 安装
pip install -U msserviceprofiler -
离线安装
-
在能够访问网络的机器上,访问 PyPI 官方源,点击左侧
Download files下载。 -
下载完成后,上传到服务器中。
-
假设 wheel 包存放路径为
whl_path,输入下列命令进行安装。pip install whl_path -
终端输入
msserviceprofiler校验是否安装成功。
-
-
源码安装
git clone https://gitcode.com/Ascend/msit.git cd msit/msserviceprofiler export PYTHONPATH=$PWD:$PYTHONPATH python msserviceprofiler/__main__.py advisor -h
功能介绍
功能说明
- 使用场景一(根据 NPU 显存、输入输出长度、模型大小推荐 decode 的
maxBatchSize)- 需要提供
instance文件夹,或手动指定输入输出的 token 长度-in, --input_token_num以及-out, --output_token_num。 - 需要提供 MindIE Service config.json 文件,以获取模型路径。
- 需要 MindIE Service config.json 中配置的
npuDeviceIds对应的 NPU 显存占用贴近拉起 MindIE Service 前的实际占用情况,或显式指定 MindIE Service config.json 中的npuMemSize。
- 需要提供
- 使用场景二(根据 benchmark 输出的
instance结果,拟合数据并给出maxBatchSize以及maxPrefillBatchSize建议值)- 需要提供
instance文件夹,且其中样本量不少于1000条。 - 如果同时提供了
使用场景一需要的数据,其中的maxBatchSize会综合考虑使用场景一的建议值。
- 需要提供
注意事项
安全警告:请勿以 root 用户身份运行此工具。使用过高权限执行操作可能危及系统安全,建议使用普通用户账户运行。
命令格式
# 指定输入输出的 token 长度 `-in, --input_token_num` 以及 `-out, --output_token_num`
msserviceprofiler advisor -in 4096 -out 256
# 或提供 `instance` 文件夹
msserviceprofiler advisor -i /your/path/instance/
参数说明
| 参数 | 可选/必选 | 说明 |
|---|---|---|
| -i 或 --instance_path | 可选 | benchmark 输出的 instance 路径,不输入则默认不读取其中相关信息用于分析。 |
| -s 或 --service_config_path | 可选 | MindIE Service 路径或 config json 文件路径,默认值为 MindIE Service 的环境变量 MIES_INSTALL_PATH,如果均未配置则使用 /usr/local/Ascend/mindie/latest/mindie-service。 |
| -t 或 --target | 可选 | 调参指标。可选值: • ttft: 首token时延。 • firsttokentime: 首token时延。 • throughput:吞吐。 默认值为ttft。 |
| -m 或 --target_metrics | 可选 | 调参指标的具体项。可选值: • average:平均值。 • max:最大值。 • min:最小值。 • P75:百分之75分位值。 • P90:百分之90分位值。 • SLO_P90:满足特定SLO约束条件下百分之90的分位值。 • P99:百分之99分位值。 • N:百分之N分位值。 默认值为average。 |
| -l 或 --log_level | 可选 | 日志级别。可选值: • debug:调试级别日志。 • info:执行信息级别日志。 • warning:告警级别日志。 • error:错误级别日志。 • fatal:致命级别日志。 • critical:关键级别日志。 默认值为info。 |
| -in 或 --input_token_num | 可选 | 请求输入长度,需为正整数。不输入则默认从benchmark的instance结果中获取。 |
| -out 或 --output_token_num | 可选 | 请求输出长度,需为正整数。不输入则默认为 MindIE Service config.json的maxIterTimes值。 |
| -tp 或 --tp | 可选 | tp域大小,需为正整数。不输入则默认从 MindIE Service config.json文件中获取,未取到则默认为1。 |
使用示例
-
使用场景一
- 输入 -i 参数或 -in 参数,MindIE Service config.json中相关参数配置正确,并且满足服务化配置的可用NPU显存不为0(即上述功能说明-使用场景一的第三点)。
msserviceprofiler advisor -in 4096 -out 256 -
使用场景二
- 根据
-i, --instance_path指定的 benchmark 输出instance结果,拟合数据并给出maxBatchSize以及maxPrefillBatchSize建议值,其中maxBatchSize会综合考虑建议结果1的建议值。
msserviceprofiler advisor -i /your/path/instance/ - 根据
输出说明
专家建议命令执行完成后输出调参建议,结果如下:
-
使用场景一
- 结果表示根据当前可用显存信息、模型结构信息、MindIE Service config.json配置信息及请求输入输出长度等情况综合考虑,计算出当前 MindIE Service config.json中的maxBatchSize的建议取值范围。
- 建议用户根据下述提示,将 MindIE Service config.json中的maxBatchSize设置为平均值大小,maxPrefillBatchSize设置为maxBatchSize的一半,重新拉起服务化运行,观察性能是否提升。
- 若性能有提升,则可尝试逐渐向range中的最大值靠近,观察性能指标变化情况。
- 若maxBatchSize值设置过大,则会导致模型拉起失败,此时应当将该值向range中的最小值靠近,直到模型能成功拉起。
- maxPrefillBatchSize通常都设置为maxBatchSize的一半。
# msservice_advisor_logger - INFO - </think> # msservice_advisor_logger - INFO - # msservice_advisor_logger - INFO - <advice> # msservice_advisor_logger - INFO - [config] maxBatchSize # msservice_advisor_logger - INFO - [advice] 取值范围为 [xx, xx],平均值为 xx # msservice_advisor_logger - INFO - [reason] 经过对当前显存信息的计算,建议将maxBatchSize的值设置为平均值大小,并逐渐向范围最大值调整,以占满整个显存 # msservice_advisor_logger - INFO - </advice> -
使用场景二
- 结果给出
maxBatchSize以及maxPrefillBatchSize建议值,其中maxBatchSize会综合考虑建议结果1的建议值。 - 可尝试将该推荐值应用到
config.json中,并重新验证性能查看是否有所提升,如果结果不理想,可尝试只应用其中一个值,并验证推理性能。 - 该方式下同时会生成拟合数据图像,用于查看拟合数据是否合理。
# msservice_advisor_logger - INFO - 拟合画图路径:func_curv_031734.png # msservice_advisor_logger - INFO - <think> # ... # msservice_advisor_logger - INFO - </think> # msservice_advisor_logger - INFO - # msservice_advisor_logger - INFO - <advice> # msservice_advisor_logger - INFO - [config] maxBatchSize # msservice_advisor_logger - INFO - [advice] 尝试设置为 25,原值50 # msservice_advisor_logger - INFO - [reason] 经过当前不同batch的时延数据,通过函数拟合分析,建议最优batch_size # msservice_advisor_logger - INFO - # msservice_advisor_logger - INFO - [config] maxPrefillBatchSize # msservice_advisor_logger - INFO - [advice] 尝试设置为 50,原值100 # msservice_advisor_logger - INFO - [reason] 经过当前不同batch的时延数据,通过函数拟合分析,建议最优batch_size # msservice_advisor_logger - INFO - # msservice_advisor_logger - INFO - </advice> - 结果给出