Skip to main content

MindStudio Prechecker

Project description

MindStudio 预检工具

MindStudio 预检工具(MindStudio Prechecker Tool)是一个帮助用户快速部署服务,快速复现基线,快速定位问题的工具。能提供推理前预检,推理中落盘和推理后比对的功能。

  • 预检: 检测各种可能会影响服务部署或者性能的组件,支持 VLLM-Ascend 和 MindIE 框架,DeepSeek 与其他模型的部署校验,包括但不限于:
    • 通用检查:检测 CPU 高性能是否开启,透明大页状态,是否为虚拟机,内核版本或昇腾驱动版本是否过低等
    • PD 混部场景:检测环境变量,检测部署服务的 config.json 字段是否合理,检测均通过百分百可以部署成功
    • 单机、双机 PD 分离场景:检测 confdeployment 目录下的配置文件,确保用户需要修改的字段会进行二次确认
    • 大 EP 场景:检测 user_config.jsonmindie_env.json 字段是否合理,检测均通过百分百可以部署成功
    • 模型检查:检测 config.json 中的 transformers_version 字段是否小于当前机器的 transformers 版本、torch_dtype 是否符合当前模型要求等
    • 网络检查:根据 rank table,检测各机器芯片之间的连通性,检测各机器相互之间能否 ping 通等
    • CPU、NPU 压测:检测当前机器上是否存在某个核的算力明显低于其他核的情况
  • 落盘: 收集各种环境结果并保存到指定路径中,包括但不限于:
    • env:环境变量信息
    • conf:配置文件字段全量收集,如 user_config.json
    • sys:系统信息收集,如内核版本等
  • 比对: 根据不同机器落盘结果进行比对,便于快速发现差异点

版本配套关系

MindStudio 预检工具 VLLM MindIE
依赖版本 v0.9.1 ≥ MindIE 2.2.RC1

环境要求

  • Python 版本要求 >= 3.7
  • 第三方依赖包括:psutil, pyyamlimportlib_metadata
  • 相关检测项支持:
    • 机器:800I A2, 800I A3G8600
    • 框架:MindIE, VLLM-Ascend
    • 模型:DeepSeek,非 DeepSeek 模型

安装预检工具

以下方式选择一种即可

注意:如果当前用户不是 root,请在安装前执行 umask 0027,否则会出现一些安全防护的权限问题,导致使用不便

  • PyPI 安装(推荐)
    pip install msprechecker
    
  • 离线安装
    • 在能够访问网络的机器上,访问 PyPI 官方源

    • 左侧单击 Download files,随后单击 Built Distribution 下方链接进行下载,如下图所示:

      image

    • 下载完成后,上传到服务器中

    • 假设 wheel 包存放路径为 whl_path,输入下列命令进行安装

      pip install whl_path
      
    • 终端输入 msprechecker 校验是否安装成功

  • 源码安装 在能够访问网络的机器上,执行下列命令即可
    git clone https://gitcode.com/Ascend/msit.git
    pip install -e msit/msprechecker
    

预检

在部署 PD 分离场景和 PD 混部场景时,大量的配置文件需要用户手动修改,极易出错,且难以定位。预检工具支持 PD 混部和 PD 分离场景的各个配置文件的校验,对于异常的配置,工具通过终端提示错误内容,配置文件会直接展示需要关注的行号,提高部署效率。

工具支持 MindIE 和 VLLM-Ascend 框架(v0.9.1-dev)的预检,以下分不同框架进行介绍。

MindIE 框架

MindIE 框架不同场景的部署需要修改不同的配置文件,因此以下介绍按照场景进行区分。

PD 混部场景

msprechecker precheck --mies-config-path <mindie-service-config>

其中,<mindie-service-config>mindie-service 的配置文件 config.json,通常路径为 /usr/local/Ascend/mindie/latest/mindie-service/conf/config.json

混部校验针对 DeepSeek 模型有单独的要求,如果 <mindie-service-config> 文件中的 modelWeightPath 路径存在,且该目录下的 config.json 中的 model_type 字段是 deepseek 开头,那么工具会触发 DeepSeek 模型混部校验。如果该路径不存在,用户仍可以通过 --weight-dir 将权重目录传入,工具会判断该目录下的 config.json 中的 model_type 字段是否为 deepseek 开头,从而触发 DeepSeek 相关校验。

预检工具会对当前终端和配置文件字段进行校验,校验等级分为 NOK, WARNINGRECOMMEND,如果当前终端存在环境变量不符合最佳配置要求,则会在当前目录下输出 msprechecker_env.sh 文件,便于一键更改配置。校验等级可以通过 --severity-level [low|medium|high] 来进行对应更改

注意:部分环境变量需要用户自行进行确认,工具无法自动推荐最佳值。比如环境变量 RANK_TABLE_FILE,需要用户确认其不仅路径存在,且符合 rank table 规范。这种环境变量无法直接通过 source 来进行一键修改。

另外,如果是多机混部 PD 场景,则需要在多台机器上 手动执行 预检命令,工具 不支持 一台机器控制多台机器执行

只有 PD 混部场景才会校验环境变量配置,MindIE 其他部署模式都是通过 k8s 的方式进行 pod 中的环境变量设置,校验配置文件即可

单机、多机 PD 分离场景

msprechecker precheck --scene <deploy-mode> --config-parent-dir <kubernetes-dir>

其中,<deploy-mode> 支持两种选项:

  • pd_disaggregation: 多机 PD 分离场景
  • pd_disaggregation_single_container: 单机 PD 分离场景

<kubernetes-dir> 为官方要求用户需要修改的 conf/*.jsondeployments/*.yaml 的父目录,一般目录命名为 kubernetes_deploy_scripts。工具会对父目录所有官方指南中期望用户修改的文件进行确认,如果存在字段填写问题,会进行输出。

如果只提供了 <deploy-mode>,但是没有提供 <kubernetes-dir>,工具会进行如下提示:

$ msprechecker precheck --scene pd_disaggregation
Passing '--scene' without providing '--config-parent-dir' will not take any effect!

注意:目前多机 PD 分离仅支持 800I A2 机器

大 EP 场景

msprechecker precheck --user-config-path <user-config> --mindie-env-path <mindie-env>

其中 <user-config> 为大 EP 场景下需要手动配置的 user_config.json 文件;<mindie-env> 为管理 Pod 拉起之后的环境变量文件 mindie_env.json。用户通过命令行的方式将路径传入即可触发校验。

VLLM-Ascend 框架

VLLM-Ascend 框架的配置通过命令行参数进行管理。预检工具提供针对不同部署场景的专项检查,确保环境配置的正确性和最佳性能。

通用场景

针对 VLLM-Ascend 的单机、多机 PD 场景,PD 混部场景

msprechecker precheck --scene vllm

相比默认场景新增校验:

  • 环境相关校验:
    • OpenMP 多线程绑核配置性能
    • HCCL 通信缓存等
    • LD_PRELOAD 中有没有生效 Jemalloc
  • 系统相关校验
    • 新增 Jemalloc 是否安装判断

PD 分离场景

msprechecker precheck --scene vllm,ep

相比 VLLM-Ascend 通用场景 新增校验:

  • 昇腾相关校验:
    • 校验当前机器的昇腾驱动版本是否大于 25.0
  • 环境相关校验:
    • 新增 PD 分离场景相关校验

默认场景

msprechecker precheck

不带任何参数的运行预检模式,会触发三个默认校验:

  • 系统相关校验:
    • 校验当前机器的 CPU 高性能模式是否开启
    • 校验当前机器的透明大页是否开启
    • 校验当前机器的 Linux 内核版本是否大于 5.10
  • 昇腾相关校验:
    • 校验当前机器的昇腾驱动版本是否大于 24.1

其他校验

msprechecker precheck --hardware --threshold <threshold> --weight-dir <weight-dir> --rank-table-path <rank-table-path>

上述命令除了包含默认场景校验项之外,额外包含四个校验:

  • --hardware 触发 CPU、NPU 压测;--threshold 用于设置压测筛选阈值,便于自定义筛选有问题的 CPU 核或者 NPU 卡
  • <weight-dir> 为权重目录,用于检测权重目录下的 config.json 的字段
  • <rank-table-path>rank table 路径,用于触发 hccn_tool 相关的校验,以及多机之间的连通性测试,并且会对配置文件字段进行检查

须知: 不同框架和硬件型号(如 MindIE 与 VLLM-Ascend,或 800I A2 与 800I A3)所使用的 rank table 格式存在差异。 工具通过 --scene 参数来识别并解析对应框架的 rank table 格式。若未指定 --scene,工具将默认按 MindIE 框架的格式进行解析。

落盘

推理过程中,如果出现 异常 或者 ​性能不及预期​,可以使用 ​落盘 功能​,将环境相关信息进行落盘,方便后续比对。推理结束后,性能预检工具支持比对推理中落盘的环境变量和配置项,帮助快速发现可能影响性能的差异点,实现问题快速定位

注意:目前落盘功能不具备落盘多机 PD 分离、单机 PD 分离配置文件的能力

使用落盘功能只需在终端中输入 msprechecker dump --output-path <output-path>,其中 <output-path> 为用户指定的输出路径;如不指定,则默认保存在当前目录下,名为 ./msprechecker_dumped.json。示例如下:

$ msprechecker dump
Error occurred while collecting 'hccl': 宿主机上没有找到 'hccn_tool' 命令
All information has been saved in: './msprechecker_dumped.json'. You can use '--output-path' to specify the save location.
What's Next?
        You may now use 'msprechecker compare' to compare two or more dumped files for discrepancies!

其中的 Error 字段表示在落盘过程中出现的一些问题,不会影响其他数据的落盘。上述错误表明在落盘 HCCL 相关数据时,由于当前宿主机上没有 hccn_tool 命令,因此不会收集。

随后工具会提示落盘位置,和如何更改落盘位置,以及后续可以如何操作落盘文件。

比对

在进行比对前,请确保使用预检工具落盘两个或多个文件,单个文件无法比对。如果只传入单个文件路径,会出现报错提示:

$ msprechecker compare msprechecker_dumped.json
You need two or more files to compare!

假设我在家里落盘了一个基线文件 baseline.json,在客户现场落盘了一个现场文件 dumped.json,那么我可以将这两个文件放在当前目录下执行如下命令进行比对

msprechecker compare baseline.json dumped.json

预检工具会将不同内容,分段进行展示,如果没有差异会提示 There is no difference found. 有差异内容会展示如下:

============================= SYSTEM DIFF REPORT ==============================
{
  "high_performance": {
    "baseline.json": false,
    "dumped.json": true
  },
  "transparent_hugepage": {
    "baseline.json": "madvise",
    "dumped.json": "always"
  },
  "virtual_machine": {
    "baseline.json": true,
    "dumped.json": false
  }
}

自定义检查项配置

在进行预检时,工具支持自定义配置校验项。用户可以传入自定义的规则 yaml 文件,通过 --custom-config-path 参数传递给工具从而完成自定义校验。

假设需要校验 a.b 的值是否符合要求,那么自定义配置语法如下

a:
  b:
    expected:
      type: eq
      value: 1 + 2
    reason: a.b 的值应该等于 3
    severity: high

上述配置表示,a.b 的值应该等于 3,其严重程度为 high,如果该字段不符合预期,会显示 [NOK]

目前,

  • type 支持:eq, lt, le, gt, ge, ne 或者 ==, <, <=, >, >=, !=
  • value 支持:+, -, *, /, //, **, (),还支持字段引用 ${} 和版本符号 Version{}
  • reason 支持任意字符串
  • severity 支持:low, medium, high,不填写默认 high。其中,low 显示为 [RECOMMEND]medium 显示为 [WARNING]high 显示为 [NOK]

注意:目前自定义配置文件只支持用户自定义配置 环境变量 相关校验,且 不支持 PD 单机分离和 PD 多机分离的场景

字段引用

对于比较嵌套较深的配置文件,遇到不同字段相互关联的场景时,创建校验规则是一个挑战。预检工具支持 字段引用 语法,允许用户通过 ${} 的语法来引用其他位置的字段值。比如,有如下配置文件

{
  "a": {
    "b": "value of b",
    "c": "value of c"
  }
}

如果希望 a.b 的值和 a.c 的值相等,则校验规则如下:

a:
  b:
    expected:
      type: eq
      value: ${.c}
    reason: a.b 的值等于 a.c
    severity: high
  c:
  expected:
      type: eq
      value: ${a.b}
    reason: a.c 的值等于 a.b
    severity: high

其中 ${.c} 是相对引用, ${a.b} 是绝对引用;对于大型嵌套的配置文件尤其好用。

参数列表

预检工具于 2025年8月1日迎来了一次大规模重构,参数采用 - 分割而不是 _ 分割,方便用户输入(不再需要额外的 shift 键参与)。部分不常用参数移除,其他的遗留参数进行了向后兼容,但是工具会在使用时给出 deprecation 提示。

子功能包括 precheck / dump / compare,用户可以通过 msprechecker -h 获取子功能列表,以及 msprechecker {子功能} -h 获取对应子功能的参数列表

precheck 参数

Legacy 参数

以下参数为遗留参数,为了向后兼容

参数名 参数描述 是否必选
-ch {...}, --checkers {...} *字符串列表值,可选值 basic,hccl,model,hardware,all,指定检查项,可指定多个,all 表示全部 否,默认值 basic
-service, --service_config_path 字符串值,MINDIE service 路径或 config json 文件路径,优先级高于环境变量的 MIES_INSTALL_PATH 值 否,默认使用环境变量的 MIES_INSTALL_PATH 值
-user, --user_config_path 字符串值,json 文件,k8s user_config.json 文件,不指定则不检查 否,默认 None
--mindie_env_config_path 字符串值,json 文件,k8s mindie_env.json 文件,不指定则不检查 否,默认 None
-ranktable, --ranktable_file 字符串值,json 文件,手动指定 ranktable 文件,优先级高于环境变量的 RANKFILETABLE 否,默认使用环境变量的 RANKFILETABLE 值
--weight_dir 模型权重目录路径 否,默认使用 config.json 中的 modelWeightPath 字段路径
-add, --additional_checks_yaml 字符串值,yaml 文件,额外的自定义配置项,指定后将覆盖默认检查项中的值 否,默认 None
-d, --dump_file_path 字符串值,指定 dump 数据的保存路径 否,默认为 msprechecker_dumped.json
  • basic 表示检查环境变量以及基本系统信息
  • hccl 表示检查 NPU 之间通过 hccl 连接的状态
  • model 表示检查或比对模型大小以及 sha256sum 值
  • hardware 表示检查 CPU / NPU 计算能力,以及网络连接状态
  • all 表示检查全部

除了 Legacy 参数外,precheck 功能提供以下额外参数:

PD 分离选项

参数名 参数描述 是否必选
--scene 指定框架和 PD 部署策略。该参数有两种输入模式,一种是为了向前兼容,一种是后续推荐输入方式:
  • 【向前兼容】如果输入 pd_disaggregation, pd_disaggregation_single_container 则表明框架为 mindie,场景依次为单机 PD 分离或者多机 PD 分离;如果输入 mindie 或者 vllm,则表明框架依次为 mindie 或者 vllm,PD 部署策略为 PD 混部
  • 【推荐】如果输入 <framework>,<deploy-mode>,逗号前的内容会被解析为框架,逗号后的内容会被解析为 PD 部署策略。
    • 框架:目前支持选择 mindie 或者 vllm
    • PD 部署策略:目前支持 pd_disaggregation, pd_disaggregation_single_container, ep 或者 pd_mix

注意:如果 PD 部署策略为单机 PD 分离或者多机 PD 分离,需要同时提供 --config-parent-dir 方能进行校验。
--user-config-path 指定大 EP 场景下的 user_config.json 路径。其对应的 Legacy 参数为 -user, --user_config_path
--mindie-env-path 指定大 EP 场景下的 mindie_env.json 路径。其对应的 Legacy 参数为 --mindie_env_config_path
--config-parent-dir 指定 PD 分离场景下,所有配置文件的父目录,通常名为 kubernetes_deploy_scripts。这个参数需要和 --scene 一起使用

PD 混部选项

参数名 参数描述 是否必选
--mies-config-path 指定 PD 混部模式所需要修改的 config.json 路径,通常路径为 /usr/local/Ascend/mindie/latest/mindie-service/conf/config.json。 其对应的 Legacy 参数为 -service, --service_config_path

Network 选项

参数名 参数描述 是否必选
--rank-table-path 指定 rank table 路径,用于进行 hccn_tool 测试、多机连通性测试和文件字段检查。其对应的 Legacy 参数为 -ranktable, --ranktable_file

Model 选项

参数名 参数描述 是否必选
--weight-dir 指定模型权重目录路径,用于进行权重目录下的 config.json 检查。其对应的 Legacy 参数为 --weight_dir

压力测试选项

参数名 参数描述 是否必选
--hardware 是否开启 CPU、NPU 的压测,输入则开启。默认不开启。其对应的 Legacy 使用方式为 -ch hardware 否,默认 False
--threshold int,0-100 之间,单位为 %,用于控制压测筛选阈值,某个核的计算时间超过平均值的比例大于该阈值,则被认定为异常 否,默认 20

其他校验选项

参数名 参数描述 是否必选
--custom-config-path 用户自定义规则路径。其对应的 Legacy 参数为 -add, --additional_checks_yaml
-l, --severity-level 用于指定校验严重度等级,只可能选择 low, medium 或者 high。其中 low 全部显示,high 只显示 NOK 否,默认 low

dump 额外参数

Legacy 参数

以下参数为遗留参数,为了向后兼容

参数名 参数描述 是否必选
-ch {...}, --checkers {...} *字符串列表值,可选值 basic,hccl,model,hardware,all,指定检查项,可指定多个,all 表示全部 否,默认值 basic
-service, --service_config_path 字符串值,MINDIE service 路径或 config json 文件路径,优先级高于环境变量的 MIES_INSTALL_PATH 值 否,默认使用环境变量的 MIES_INSTALL_PATH 值
-user, --user_config_path 字符串值,json 文件,k8s user_config.json 文件,不指定则不检查 否,默认 None
--mindie_env_config_path 字符串值,json 文件,k8s mindie_env.json 文件,不指定则不检查 否,默认 None
-ranktable, --ranktable_file 字符串值,json 文件,手动指定 ranktable 文件,优先级高于环境变量的 RANKFILETABLE 否,默认使用环境变量的 RANKFILETABLE 值
--weight_dir 模型权重目录路径 否,默认使用 config.json 中的 modelWeightPath 字段路径
-add, --additional_checks_yaml 字符串值,yaml 文件,额外的自定义配置项,指定后将覆盖默认检查项中的值 否,默认 None
-d, --dump_file_path 字符串值,指定 dump 数据的保存路径 否,默认为 msprechecker_dumped.json
  • basic 表示检查环境变量以及基本系统信息
  • hccl 表示检查 NPU 之间通过 hccl 连接的状态
  • model 表示检查或比对模型大小以及 sha256sum 值
  • hardware 表示检查 CPU / NPU 计算能力,以及网络连接状态
  • all 表示检查全部

除了 Legacy 参数外,dump 功能提供以下额外参数:

参数名 参数描述 是否必选
--output-path 指定落盘路径。其对应的 Legacy 参数为 -d, --dump_file_path 否,默认 msprechecker_dumped.json

|

其他参数

参数名 参数描述 是否必选
--filter 是否只落盘跟昇腾相关的环境变量。开启该选项则 不会 落盘如 LD_LIBRARY_PATH 的环境变量,因为与昇腾研发的环境变量无关 否,默认 False
--user-config-path 额外落盘大 EP 场景下的 user_config.json 路径。其对应的 Legacy 参数为 -user, --user_config_path
--mindie-env-path 额外落盘大 EP 场景下的 mindie_env.json 路径。其对应的 Legacy 参数为 --mindie_env_config_path
--mies-config-path 额外落盘 PD 混部模式所需要修改的 config.json 路径,通常路径为 /usr/local/Ascend/mindie/latest/mindie-service/conf/config.json。 其对应的 Legacy 参数为 -service, --service_config_path
--rank-table-path 额外落盘 rank table 文件。其对应的 Legacy 参数为 -ranktable, --ranktable_file
--weight-dir 额外落盘模型权重目录下的 config.json 和所有 *.safetensors 权重 sha256sum 哈希值。其对应的 Legacy 参数为 --weight_dir
--chunk-size int,单位为 MB,指定在计算权重哈希时,每次读取文件的大小,只支持 32, 64, 128 或者 256。默认为 32

compare 参数

compare 功能只有如下参数:

参数名 参数描述 是否必选
FILE 位置参数,依次指定工具 dump 的多份数据路径,路径之间空格分割 是,且应为两个或两个以上

废弃参数

参数名 参数描述 废弃原因
-blocknum, --sha256_blocknum int 值,计算模型权重 sha256sum 值时的采样块数,值越大采样越多,计算速度越慢 预检对权重哈希进行校验,由于缺乏标准,没有意义,目前将此功能转移到落盘模式中,通过 --chunk-size,将 --weight-dir 下的权重的哈希值进行落盘,方便比对
-l {...}, --log_level {...} 日志级别,可选值 debug,info,warning,error,fatal,critical 预检工具不需要控制日志级别,只需要控制校验严重性级别,目前通过 --severity-level 进行控制,该参数废弃
-s, --save_env 字符串值,指定环境变量需要优化时,输出的 sh 文件路径 预检工具在预检过程需要用户指定输出路径很奇怪,且随着校验项逐步增多,工具可能无法再提供一键修改全部环境变量。并且输出一个文件进行 source 存在潜在安全风险,待后续进一步评估,目前先移除指定落盘位置功能

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

msprechecker-0.1.4.tar.gz (86.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

msprechecker-0.1.4-py3-none-any.whl (135.1 kB view details)

Uploaded Python 3

File details

Details for the file msprechecker-0.1.4.tar.gz.

File metadata

  • Download URL: msprechecker-0.1.4.tar.gz
  • Upload date:
  • Size: 86.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.4

File hashes

Hashes for msprechecker-0.1.4.tar.gz
Algorithm Hash digest
SHA256 61c77d76627003d1665a8f863685897d1f4e9200f2113616e367227a5016f3b8
MD5 e52b2f0b07f22f033149d65064435703
BLAKE2b-256 61aa61542ec51206c46082443b9e4c88ab8ac334f34abd92af792d19fc52215f

See more details on using hashes here.

File details

Details for the file msprechecker-0.1.4-py3-none-any.whl.

File metadata

  • Download URL: msprechecker-0.1.4-py3-none-any.whl
  • Upload date:
  • Size: 135.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.4

File hashes

Hashes for msprechecker-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 f500968a84a70b2f3f3e67b6950bedf7c840fe66df494dde1dec65abedae92e4
MD5 32ab6469d5b57ffedc9312beb5e1301f
BLAKE2b-256 21c211a77fd7bfd5cc70f6d5cd55ebb2f6ad110c5ff0c5513820b7c089f3df7f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page