Name | msprechecker JSON |
Version |
0.1.0
JSON |
| download |
home_page | None |
Summary | MindStudio Prechecker |
upload_time | 2025-08-08 07:44:20 |
maintainer | None |
docs_url | None |
author | None |
requires_python | >=3.7 |
license | Apache-2.0 |
keywords |
ms
prechecker
|
VCS |
|
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
# MS Prechecker
- [MS Prechecker](#ms-prechecker)
- [基本功能](#基本功能)
- [环境要求](#环境要求)
- [安装性能预检工具](#安装性能预检工具)
- [预检](#预检)
- [预检快速使用](#预检快速使用)
- [落盘和比对](#落盘和比对)
- [落盘快速使用](#落盘快速使用)
- [落盘文件介绍](#落盘文件介绍)
- [比对快速使用](#比对快速使用)
- [比对结果说明](#比对结果说明)
- [自定义检查项配置](#自定义检查项配置)
- [自定义检查项配置使用说明](#自定义检查项配置使用说明)
- [字段引用](#字段引用)
- [版本引用](#版本引用)
- [参数列表](#参数列表)
- [通用参数](#通用参数)
- [precheck 额外参数](#precheck-额外参数)
- [dump 额外参数](#dump-额外参数)
- [compare 参数](#compare-参数)
# 基本功能
预检工具是一个帮助用户快速部署服务,快速复现基线,快速定位问题的工具。能提供推理前预检,推理中落盘和推理后比对的功能。
- [**预检**](#预检快速使用):检测各种可能会影响服务部署或者性能的组件,包括但不限于:
- 通用检查:检测 CPU 高性能是否开启,透明大页状态,是否为虚拟机,内核版本或昇腾驱动版本是否过低等
- PD 混部场景:检测环境变量,检测部署服务的 config.json 字段是否合理,检测均通过百分百可以部署成功
- PD 分离场景:检测 `user_config.json` 和 `mindie_env.json` 字段是否合理,检测均通过百分百可以部署成功
- 模型权重检查:检测权重数量、权重哈希、以及 config.json 中的 `transformers_version` 字段是否小于当前机器的 `transformers` 版本
- 网络检查:根据 `rank table`,检测各机器芯片之间的连通性,检测各机器相互之间能否 ping 通等
- [**落盘**](#落盘和比对):收集各种环境结果并保存到指定路径中,包括但不限于:
- `env`:环境变量信息
- `conf`:配置文件字段全量收集,如 `user_config.json` 等
- `sys`:系统信息收集,如内核版本等
- [**比对**](#落盘和比对):根据不同机器落盘结果进行比对,便于快速发现差异点
# 环境要求
- Python 版本要求 >= 3.7
- 第三方依赖包括:`psutil`, `pyyaml` 和 `importlib_metadata`
- 相关检测项支持:`800I A2`, `800I A3` 和 `G8600`
# 安装性能预检工具
**以下方式选择一种即可**
- **PyPI 安装(推荐)**
```sh
pip install msprechecker
```
- **离线安装**
- 在能够访问网络的机器上,访问 [PyPI 官方源](https://pypi.org/project/msprechecker/#files)
- 左侧点击 `Download files`,随后点击 `Built Distribution` 下方链接进行下载,如下图所示:

- 下载完成后,上传到服务器中
- 假设 wheel 包存放路径为 `whl_path`,输入下列命令进行安装
```bash
pip install whl_path
```
- 终端输入 `msprechecker` 校验是否安装成功
# 预检
## 预检快速使用
- 默认进行环境变量、系统配置的校验
```sh
msprechecker precheck
```
随后会在终端出现打印信息,如果有环境变量的检查项,则在当前目录下生成配置建议环境变量的 `msprechecker_env.sh` 文件
- K8S 部署时指定 user_config.json 检查和 mindie_env.json 的检查
```sh
msprechecker precheck -user user_config.json --mindie_env_config_path mindie_env.json
```
- 双机 DS model 检查
```sh
msprechecker precheck -ch model --weight_dir <权重路径>
```
- 双机 DS hccl 检查
```sh
msprechecker precheck -ch hccl --ranktable <rank table 路径>
```
- cpu 和 npu 压测
```sh
msprechecker precheck -ch hardware
```
- cpu 和 npu 压测,以及多机网络连接状态检查
```sh
msprechecker precheck -ch hardware --ranktable <rank table 路径>
```
# 落盘和比对
## 落盘快速使用
- 推理过程中,如果出现 **异常** 或者 **性能不及预期**,可以使用 **落盘** 功能,将环境相关信息进行落盘,方便后续比对。推理结束后,性能预检工具支持比对推理中落盘的环境变量和配置项,帮助快速发现可能影响性能的差异点,实现问题快速定位
- 使用落盘功能只需在终端中输入
```bash
msprechecker dump -d abc
# msprechecker_logger - INFO - dump file saved to: abc
```
其中 `dump` 表明我们使用落盘功能。通过 `--dump_file_path` 或缩写 `-d` 参数指定自定义落盘文件路径。运行结束后会在当前目录下落盘环境变量信息文件 `abc`
## 落盘文件介绍
- 落盘文件内容结构如下:

- 第一块为 MindIE 服务化配置,即当前环境 MindIE 服务化 config.json 参数
- 第二块为环境变量,为当前终端所有环境变量值
- 第三块为网络配置,包括 HCCL 连通校验的信息
- 第四块为系统配置,包括系统信息、内核发行版、CANN 驱动信息、是否为虚拟机以及是否开启 CPU 高性能
## 比对快速使用
- 在进行比对前,请确保使用预检工具落盘两个或多个文件,单个文件无法比对。以下示例假设存在两个落盘文件,路径为 `path_a` 和 `path_b`,则您可以使用如下命令进行比对
```bash
msprechecker compare -d path_a path_b
```
其中 `compare` 表明我们使用比对功能,`-d` 为参数 `--dump_file_path` 的缩写,也可以使用 `--dump_file_path` 进行比对,后接两个或多个文件路径,性能预检工具会一起执行比对,展示差异
## 比对结果说明
- 如果两个或多个落盘文件没有差异,则会在终端出现如下打印信息:
```bash
msprechecker_logger - INFO - == compare start ==
msprechecker_logger - INFO - No difference found
msprechecker_logger - INFO - == compare end ==
```
- 如果两个或多个落盘文件存在差异,则会在终端展示差异项。比如,展示内容为:
```bash
- key .Env.CPU_AFFINITY_CONF diffs
* b:
type<NoneType> : None
* c:
type<str> : 2
* d:
type<str> : 2
* e:
type<str> : 2
```
表明环境变量 `CPU_AFFINITY_CONF` 在四个文件 `b`, `c`, `d`, `e` 中存在差异。其中 `b` 文件中,该环境变量的值为 `None`,即没有设置该环境变量;而 `c`, `d`, `e` 均设置为 2
***
# 自定义检查项配置
## 自定义检查项配置使用说明
在进行 precheck 预检时,支持自定义配置校验项。目前仅支持 `user_config.json` 和 `mindie_env.json` 的配置校验,后续开放环境变量的自定义校验。
假设需要校验 `a.b` 的值是否符合要求,那么自定义配置语法如下
```sh
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{}` 以及权限符号 `FilePerm{}`
- `reason` 支持任意字符串
- `severity` 支持:`low`, `medium`, `high`,不填写默认 `high`。其中,`low` 显示为 `[RECOMMEND]`;`medium` 显示为 `[WARNING]`;`high` 显示为 `[NOK]`
### 字段引用
对于比较嵌套较深的配置文件,遇到不同字段相互关联的场景时,创建校验规则是一个挑战。预检工具支持 **字段引用** 语法,允许用户通过 `${}` 的语法来引用其他位置的字段值。比如,有如下配置文件
```json
{
"a": {
"b": "value of b",
"c": "value of c"
}
}
```
如果希望 `a.b` 的值和 `a.c` 的值相等,则校验规则如下:
```yaml
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}` 是绝对引用;对于大型嵌套的配置文件尤其好用。
### 版本引用
如果校验涉及到版本比较,比如低于多少版本时会导致有问题,可以使用版本引用。比如 `transformers_version` 版本需要大于 `4.33`,则可以写为
```yaml
transformers_version:
expected:
type: gt
value: Version{4.33}
reason: xx
severity: xx
```
内置了 `Version` 的比较规则,目前是 `8.0.0 > 8.0.rc2 > 8.0.rc1 > 8.0.rc1.b020`。对于 T 版本暂不支持校验,因为 T 版本没有规律
# 参数列表
- 子功能包括 `precheck` / `dump` / `compare`
- 通过 `msprechecker -h` 获取子功能列表,以及 `msprechecker {子功能} -h` 获取对应子功能的参数列表
## 通用参数
<a id="1"></a>
以下通用参数适用于 `msprechecker precheck` 和 `msprechecker dump`,不适用于 `msprechecker compare`
| 参数名 | 参数描述 | 是否必选 |
| ------------------------------- | ----------------------------------------------------------------------------------------------- | ------------------------------------------- |
| -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` 字段路径 |
| -blocknum, --sha256_blocknum | int 值,计算模型权重 sha256sum 值时的采样块数,值越大采样越多,计算速度越慢 | 否,默认 1000 |
| -add, --additional_checks_yaml | 字符串值,yaml 文件,额外的自定义配置项,指定后将覆盖默认检查项中的值 | 否,默认 None |
| -l {...}, --log_level {...} | 日志级别,可选值 debug,info,warning,error,fatal,critical | 否,默认 info |
- `basic` 表示检查环境变量以及基本系统信息
- `hccl` 表示检查 NPU 之间通过 hccl 连接的状态
- `model` 表示检查或比对模型大小以及 sha256sum 值
- `hardware` 表示检查 CPU / NPU 计算能力,以及网络连接状态
- `all` 表示检查全部
## precheck 额外参数
| 参数名 | 参数描述 | 是否必选 |
| -------------- | ---------------------------------------------------- | ------------------------------ |
| -s, --save_env | 字符串值,指定环境变量需要优化时,输出的 sh 文件路径 | 否,默认为 msprechecker_env.sh |
## dump 额外参数
| 参数名 | 参数描述 | 是否必选 |
| -------------------- | ---------------------------------- | --------------------------------------------------- |
| -d, --dump_file_path | 字符串值,指定 dump 数据的保存路径 | 否,默认为 /tmp/msprechecker_dump_{time_stamp}.json |
## compare 参数
| 参数名 | 参数描述 | 是否必选 |
| --------------------------- | -------------------------------------------------------- | -------------- |
| dump_file_paths | **位置参数**,字符串列表值,指定 dump 的多份数据 | 是,且应为多个 |
| -l {...}, --log_level {...} | 日志级别,可选值 debug,info,warning,error,fatal,critical | 否,默认 info |
Raw data
{
"_id": null,
"home_page": null,
"name": "msprechecker",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.7",
"maintainer_email": null,
"keywords": "ms, prechecker",
"author": null,
"author_email": null,
"download_url": "https://files.pythonhosted.org/packages/61/75/01bc916e91e596f6b3177585278ce30cfaafaa0354f892549520f65d0eea/msprechecker-0.1.0.tar.gz",
"platform": null,
"description": "# MS Prechecker\n- [MS Prechecker](#ms-prechecker)\n- [\u57fa\u672c\u529f\u80fd](#\u57fa\u672c\u529f\u80fd)\n- [\u73af\u5883\u8981\u6c42](#\u73af\u5883\u8981\u6c42)\n- [\u5b89\u88c5\u6027\u80fd\u9884\u68c0\u5de5\u5177](#\u5b89\u88c5\u6027\u80fd\u9884\u68c0\u5de5\u5177)\n- [\u9884\u68c0](#\u9884\u68c0)\n - [\u9884\u68c0\u5feb\u901f\u4f7f\u7528](#\u9884\u68c0\u5feb\u901f\u4f7f\u7528)\n- [\u843d\u76d8\u548c\u6bd4\u5bf9](#\u843d\u76d8\u548c\u6bd4\u5bf9)\n - [\u843d\u76d8\u5feb\u901f\u4f7f\u7528](#\u843d\u76d8\u5feb\u901f\u4f7f\u7528)\n - [\u843d\u76d8\u6587\u4ef6\u4ecb\u7ecd](#\u843d\u76d8\u6587\u4ef6\u4ecb\u7ecd)\n - [\u6bd4\u5bf9\u5feb\u901f\u4f7f\u7528](#\u6bd4\u5bf9\u5feb\u901f\u4f7f\u7528)\n - [\u6bd4\u5bf9\u7ed3\u679c\u8bf4\u660e](#\u6bd4\u5bf9\u7ed3\u679c\u8bf4\u660e)\n- [\u81ea\u5b9a\u4e49\u68c0\u67e5\u9879\u914d\u7f6e](#\u81ea\u5b9a\u4e49\u68c0\u67e5\u9879\u914d\u7f6e)\n - [\u81ea\u5b9a\u4e49\u68c0\u67e5\u9879\u914d\u7f6e\u4f7f\u7528\u8bf4\u660e](#\u81ea\u5b9a\u4e49\u68c0\u67e5\u9879\u914d\u7f6e\u4f7f\u7528\u8bf4\u660e)\n - [\u5b57\u6bb5\u5f15\u7528](#\u5b57\u6bb5\u5f15\u7528)\n - [\u7248\u672c\u5f15\u7528](#\u7248\u672c\u5f15\u7528)\n- [\u53c2\u6570\u5217\u8868](#\u53c2\u6570\u5217\u8868)\n - [\u901a\u7528\u53c2\u6570](#\u901a\u7528\u53c2\u6570)\n - [precheck \u989d\u5916\u53c2\u6570](#precheck-\u989d\u5916\u53c2\u6570)\n - [dump \u989d\u5916\u53c2\u6570](#dump-\u989d\u5916\u53c2\u6570)\n - [compare \u53c2\u6570](#compare-\u53c2\u6570)\n\n# \u57fa\u672c\u529f\u80fd\n \u9884\u68c0\u5de5\u5177\u662f\u4e00\u4e2a\u5e2e\u52a9\u7528\u6237\u5feb\u901f\u90e8\u7f72\u670d\u52a1\uff0c\u5feb\u901f\u590d\u73b0\u57fa\u7ebf\uff0c\u5feb\u901f\u5b9a\u4f4d\u95ee\u9898\u7684\u5de5\u5177\u3002\u80fd\u63d0\u4f9b\u63a8\u7406\u524d\u9884\u68c0\uff0c\u63a8\u7406\u4e2d\u843d\u76d8\u548c\u63a8\u7406\u540e\u6bd4\u5bf9\u7684\u529f\u80fd\u3002\n - [**\u9884\u68c0**](#\u9884\u68c0\u5feb\u901f\u4f7f\u7528)\uff1a\u68c0\u6d4b\u5404\u79cd\u53ef\u80fd\u4f1a\u5f71\u54cd\u670d\u52a1\u90e8\u7f72\u6216\u8005\u6027\u80fd\u7684\u7ec4\u4ef6\uff0c\u5305\u62ec\u4f46\u4e0d\u9650\u4e8e\uff1a\n - \u901a\u7528\u68c0\u67e5\uff1a\u68c0\u6d4b CPU \u9ad8\u6027\u80fd\u662f\u5426\u5f00\u542f\uff0c\u900f\u660e\u5927\u9875\u72b6\u6001\uff0c\u662f\u5426\u4e3a\u865a\u62df\u673a\uff0c\u5185\u6838\u7248\u672c\u6216\u6607\u817e\u9a71\u52a8\u7248\u672c\u662f\u5426\u8fc7\u4f4e\u7b49\n - PD \u6df7\u90e8\u573a\u666f\uff1a\u68c0\u6d4b\u73af\u5883\u53d8\u91cf\uff0c\u68c0\u6d4b\u90e8\u7f72\u670d\u52a1\u7684 config.json \u5b57\u6bb5\u662f\u5426\u5408\u7406\uff0c\u68c0\u6d4b\u5747\u901a\u8fc7\u767e\u5206\u767e\u53ef\u4ee5\u90e8\u7f72\u6210\u529f\n - PD \u5206\u79bb\u573a\u666f\uff1a\u68c0\u6d4b `user_config.json` \u548c `mindie_env.json` \u5b57\u6bb5\u662f\u5426\u5408\u7406\uff0c\u68c0\u6d4b\u5747\u901a\u8fc7\u767e\u5206\u767e\u53ef\u4ee5\u90e8\u7f72\u6210\u529f\n - \u6a21\u578b\u6743\u91cd\u68c0\u67e5\uff1a\u68c0\u6d4b\u6743\u91cd\u6570\u91cf\u3001\u6743\u91cd\u54c8\u5e0c\u3001\u4ee5\u53ca config.json \u4e2d\u7684 `transformers_version` \u5b57\u6bb5\u662f\u5426\u5c0f\u4e8e\u5f53\u524d\u673a\u5668\u7684 `transformers` \u7248\u672c\n - \u7f51\u7edc\u68c0\u67e5\uff1a\u6839\u636e `rank table`\uff0c\u68c0\u6d4b\u5404\u673a\u5668\u82af\u7247\u4e4b\u95f4\u7684\u8fde\u901a\u6027\uff0c\u68c0\u6d4b\u5404\u673a\u5668\u76f8\u4e92\u4e4b\u95f4\u80fd\u5426 ping \u901a\u7b49\n - [**\u843d\u76d8**](#\u843d\u76d8\u548c\u6bd4\u5bf9)\uff1a\u6536\u96c6\u5404\u79cd\u73af\u5883\u7ed3\u679c\u5e76\u4fdd\u5b58\u5230\u6307\u5b9a\u8def\u5f84\u4e2d\uff0c\u5305\u62ec\u4f46\u4e0d\u9650\u4e8e\uff1a\n - `env`\uff1a\u73af\u5883\u53d8\u91cf\u4fe1\u606f\n - `conf`\uff1a\u914d\u7f6e\u6587\u4ef6\u5b57\u6bb5\u5168\u91cf\u6536\u96c6\uff0c\u5982 `user_config.json` \u7b49\n - `sys`\uff1a\u7cfb\u7edf\u4fe1\u606f\u6536\u96c6\uff0c\u5982\u5185\u6838\u7248\u672c\u7b49\n - [**\u6bd4\u5bf9**](#\u843d\u76d8\u548c\u6bd4\u5bf9)\uff1a\u6839\u636e\u4e0d\u540c\u673a\u5668\u843d\u76d8\u7ed3\u679c\u8fdb\u884c\u6bd4\u5bf9\uff0c\u4fbf\u4e8e\u5feb\u901f\u53d1\u73b0\u5dee\u5f02\u70b9\n\n# \u73af\u5883\u8981\u6c42\n - Python \u7248\u672c\u8981\u6c42 >= 3.7\n - \u7b2c\u4e09\u65b9\u4f9d\u8d56\u5305\u62ec\uff1a`psutil`, `pyyaml` \u548c `importlib_metadata`\n - \u76f8\u5173\u68c0\u6d4b\u9879\u652f\u6301\uff1a`800I A2`, `800I A3` \u548c `G8600`\n\n# \u5b89\u88c5\u6027\u80fd\u9884\u68c0\u5de5\u5177\n**\u4ee5\u4e0b\u65b9\u5f0f\u9009\u62e9\u4e00\u79cd\u5373\u53ef**\n - **PyPI \u5b89\u88c5\uff08\u63a8\u8350\uff09**\n ```sh\n pip install msprechecker\n ```\n - **\u79bb\u7ebf\u5b89\u88c5**\n - \u5728\u80fd\u591f\u8bbf\u95ee\u7f51\u7edc\u7684\u673a\u5668\u4e0a\uff0c\u8bbf\u95ee [PyPI \u5b98\u65b9\u6e90](https://pypi.org/project/msprechecker/#files)\n - \u5de6\u4fa7\u70b9\u51fb `Download files`\uff0c\u968f\u540e\u70b9\u51fb `Built Distribution` \u4e0b\u65b9\u94fe\u63a5\u8fdb\u884c\u4e0b\u8f7d\uff0c\u5982\u4e0b\u56fe\u6240\u793a\uff1a\n\n \n - \u4e0b\u8f7d\u5b8c\u6210\u540e\uff0c\u4e0a\u4f20\u5230\u670d\u52a1\u5668\u4e2d\n - \u5047\u8bbe wheel \u5305\u5b58\u653e\u8def\u5f84\u4e3a `whl_path`\uff0c\u8f93\u5165\u4e0b\u5217\u547d\u4ee4\u8fdb\u884c\u5b89\u88c5\n ```bash\n pip install whl_path\n ```\n - \u7ec8\u7aef\u8f93\u5165 `msprechecker` \u6821\u9a8c\u662f\u5426\u5b89\u88c5\u6210\u529f\n\n# \u9884\u68c0\n## \u9884\u68c0\u5feb\u901f\u4f7f\u7528\n - \u9ed8\u8ba4\u8fdb\u884c\u73af\u5883\u53d8\u91cf\u3001\u7cfb\u7edf\u914d\u7f6e\u7684\u6821\u9a8c\n ```sh\n msprechecker precheck\n ```\n \u968f\u540e\u4f1a\u5728\u7ec8\u7aef\u51fa\u73b0\u6253\u5370\u4fe1\u606f\uff0c\u5982\u679c\u6709\u73af\u5883\u53d8\u91cf\u7684\u68c0\u67e5\u9879\uff0c\u5219\u5728\u5f53\u524d\u76ee\u5f55\u4e0b\u751f\u6210\u914d\u7f6e\u5efa\u8bae\u73af\u5883\u53d8\u91cf\u7684 `msprechecker_env.sh` \u6587\u4ef6\n - K8S \u90e8\u7f72\u65f6\u6307\u5b9a user_config.json \u68c0\u67e5\u548c mindie_env.json \u7684\u68c0\u67e5\n ```sh\n msprechecker precheck -user user_config.json --mindie_env_config_path mindie_env.json\n ```\n - \u53cc\u673a DS model \u68c0\u67e5\n ```sh\n msprechecker precheck -ch model --weight_dir <\u6743\u91cd\u8def\u5f84>\n ```\n - \u53cc\u673a DS hccl \u68c0\u67e5\n ```sh\n msprechecker precheck -ch hccl --ranktable <rank table \u8def\u5f84>\n ```\n - cpu \u548c npu \u538b\u6d4b\n ```sh\n msprechecker precheck -ch hardware\n ```\n - cpu \u548c npu \u538b\u6d4b\uff0c\u4ee5\u53ca\u591a\u673a\u7f51\u7edc\u8fde\u63a5\u72b6\u6001\u68c0\u67e5\n ```sh\n msprechecker precheck -ch hardware --ranktable <rank table \u8def\u5f84>\n ```\n\n# \u843d\u76d8\u548c\u6bd4\u5bf9\n## \u843d\u76d8\u5feb\u901f\u4f7f\u7528\n - \u63a8\u7406\u8fc7\u7a0b\u4e2d\uff0c\u5982\u679c\u51fa\u73b0 **\u5f02\u5e38** \u6216\u8005 \u200b**\u6027\u80fd\u4e0d\u53ca\u9884\u671f**\u200b\uff0c\u53ef\u4ee5\u4f7f\u7528 \u200b**\u843d\u76d8** \u529f\u80fd\u200b\uff0c\u5c06\u73af\u5883\u76f8\u5173\u4fe1\u606f\u8fdb\u884c\u843d\u76d8\uff0c\u65b9\u4fbf\u540e\u7eed\u6bd4\u5bf9\u3002\u63a8\u7406\u7ed3\u675f\u540e\uff0c\u6027\u80fd\u9884\u68c0\u5de5\u5177\u652f\u6301\u6bd4\u5bf9\u63a8\u7406\u4e2d\u843d\u76d8\u7684\u73af\u5883\u53d8\u91cf\u548c\u914d\u7f6e\u9879\uff0c\u5e2e\u52a9\u5feb\u901f\u53d1\u73b0\u53ef\u80fd\u5f71\u54cd\u6027\u80fd\u7684\u5dee\u5f02\u70b9\uff0c\u5b9e\u73b0\u95ee\u9898\u5feb\u901f\u5b9a\u4f4d\n - \u4f7f\u7528\u843d\u76d8\u529f\u80fd\u53ea\u9700\u5728\u7ec8\u7aef\u4e2d\u8f93\u5165\n ```bash\n msprechecker dump -d abc\n # msprechecker_logger - INFO - dump file saved to: abc\n ```\n \u5176\u4e2d `dump` \u8868\u660e\u6211\u4eec\u4f7f\u7528\u843d\u76d8\u529f\u80fd\u3002\u901a\u8fc7 `--dump_file_path` \u6216\u7f29\u5199 `-d` \u53c2\u6570\u6307\u5b9a\u81ea\u5b9a\u4e49\u843d\u76d8\u6587\u4ef6\u8def\u5f84\u3002\u8fd0\u884c\u7ed3\u675f\u540e\u4f1a\u5728\u5f53\u524d\u76ee\u5f55\u4e0b\u843d\u76d8\u73af\u5883\u53d8\u91cf\u4fe1\u606f\u6587\u4ef6 `abc`\n\n## \u843d\u76d8\u6587\u4ef6\u4ecb\u7ecd\n - \u843d\u76d8\u6587\u4ef6\u5185\u5bb9\u7ed3\u6784\u5982\u4e0b\uff1a\n\n \n\n - \u7b2c\u4e00\u5757\u4e3a MindIE \u670d\u52a1\u5316\u914d\u7f6e\uff0c\u5373\u5f53\u524d\u73af\u5883 MindIE \u670d\u52a1\u5316 config.json \u53c2\u6570\n - \u7b2c\u4e8c\u5757\u4e3a\u73af\u5883\u53d8\u91cf\uff0c\u4e3a\u5f53\u524d\u7ec8\u7aef\u6240\u6709\u73af\u5883\u53d8\u91cf\u503c\n - \u7b2c\u4e09\u5757\u4e3a\u7f51\u7edc\u914d\u7f6e\uff0c\u5305\u62ec HCCL \u8fde\u901a\u6821\u9a8c\u7684\u4fe1\u606f\n - \u7b2c\u56db\u5757\u4e3a\u7cfb\u7edf\u914d\u7f6e\uff0c\u5305\u62ec\u7cfb\u7edf\u4fe1\u606f\u3001\u5185\u6838\u53d1\u884c\u7248\u3001CANN \u9a71\u52a8\u4fe1\u606f\u3001\u662f\u5426\u4e3a\u865a\u62df\u673a\u4ee5\u53ca\u662f\u5426\u5f00\u542f CPU \u9ad8\u6027\u80fd\n## \u6bd4\u5bf9\u5feb\u901f\u4f7f\u7528\n - \u5728\u8fdb\u884c\u6bd4\u5bf9\u524d\uff0c\u8bf7\u786e\u4fdd\u4f7f\u7528\u9884\u68c0\u5de5\u5177\u843d\u76d8\u4e24\u4e2a\u6216\u591a\u4e2a\u6587\u4ef6\uff0c\u5355\u4e2a\u6587\u4ef6\u65e0\u6cd5\u6bd4\u5bf9\u3002\u4ee5\u4e0b\u793a\u4f8b\u5047\u8bbe\u5b58\u5728\u4e24\u4e2a\u843d\u76d8\u6587\u4ef6\uff0c\u8def\u5f84\u4e3a `path_a` \u548c `path_b`\uff0c\u5219\u60a8\u53ef\u4ee5\u4f7f\u7528\u5982\u4e0b\u547d\u4ee4\u8fdb\u884c\u6bd4\u5bf9\n ```bash\n msprechecker compare -d path_a path_b\n ```\n \u5176\u4e2d `compare` \u8868\u660e\u6211\u4eec\u4f7f\u7528\u6bd4\u5bf9\u529f\u80fd\uff0c`-d` \u4e3a\u53c2\u6570 `--dump_file_path` \u7684\u7f29\u5199\uff0c\u4e5f\u53ef\u4ee5\u4f7f\u7528 `--dump_file_path` \u8fdb\u884c\u6bd4\u5bf9\uff0c\u540e\u63a5\u4e24\u4e2a\u6216\u591a\u4e2a\u6587\u4ef6\u8def\u5f84\uff0c\u6027\u80fd\u9884\u68c0\u5de5\u5177\u4f1a\u4e00\u8d77\u6267\u884c\u6bd4\u5bf9\uff0c\u5c55\u793a\u5dee\u5f02\n## \u6bd4\u5bf9\u7ed3\u679c\u8bf4\u660e\n - \u5982\u679c\u4e24\u4e2a\u6216\u591a\u4e2a\u843d\u76d8\u6587\u4ef6\u6ca1\u6709\u5dee\u5f02\uff0c\u5219\u4f1a\u5728\u7ec8\u7aef\u51fa\u73b0\u5982\u4e0b\u6253\u5370\u4fe1\u606f\uff1a\n ```bash\n msprechecker_logger - INFO - == compare start ==\n msprechecker_logger - INFO - No difference found\n msprechecker_logger - INFO - == compare end ==\n ```\n - \u5982\u679c\u4e24\u4e2a\u6216\u591a\u4e2a\u843d\u76d8\u6587\u4ef6\u5b58\u5728\u5dee\u5f02\uff0c\u5219\u4f1a\u5728\u7ec8\u7aef\u5c55\u793a\u5dee\u5f02\u9879\u3002\u6bd4\u5982\uff0c\u5c55\u793a\u5185\u5bb9\u4e3a\uff1a\n ```bash\n - key .Env.CPU_AFFINITY_CONF diffs\n * b:\n type<NoneType> : None\n * c:\n type<str> : 2\n * d:\n type<str> : 2\n * e:\n type<str> : 2\n ```\n \u8868\u660e\u73af\u5883\u53d8\u91cf `CPU_AFFINITY_CONF` \u5728\u56db\u4e2a\u6587\u4ef6 `b`, `c`, `d`, `e` \u4e2d\u5b58\u5728\u5dee\u5f02\u3002\u5176\u4e2d `b` \u6587\u4ef6\u4e2d\uff0c\u8be5\u73af\u5883\u53d8\u91cf\u7684\u503c\u4e3a `None`\uff0c\u5373\u6ca1\u6709\u8bbe\u7f6e\u8be5\u73af\u5883\u53d8\u91cf\uff1b\u800c `c`, `d`, `e` \u5747\u8bbe\u7f6e\u4e3a 2\n***\n\n# \u81ea\u5b9a\u4e49\u68c0\u67e5\u9879\u914d\u7f6e\n## \u81ea\u5b9a\u4e49\u68c0\u67e5\u9879\u914d\u7f6e\u4f7f\u7528\u8bf4\u660e\n\u5728\u8fdb\u884c precheck \u9884\u68c0\u65f6\uff0c\u652f\u6301\u81ea\u5b9a\u4e49\u914d\u7f6e\u6821\u9a8c\u9879\u3002\u76ee\u524d\u4ec5\u652f\u6301 `user_config.json` \u548c `mindie_env.json` \u7684\u914d\u7f6e\u6821\u9a8c\uff0c\u540e\u7eed\u5f00\u653e\u73af\u5883\u53d8\u91cf\u7684\u81ea\u5b9a\u4e49\u6821\u9a8c\u3002\n\u5047\u8bbe\u9700\u8981\u6821\u9a8c `a.b` \u7684\u503c\u662f\u5426\u7b26\u5408\u8981\u6c42\uff0c\u90a3\u4e48\u81ea\u5b9a\u4e49\u914d\u7f6e\u8bed\u6cd5\u5982\u4e0b\n```sh\na:\n b:\n expected:\n type: eq\n value: 1 + 2\n reason: a.b \u7684\u503c\u5e94\u8be5\u7b49\u4e8e 3\n severity: high\n```\n\u4e0a\u8ff0\u914d\u7f6e\u8868\u793a\uff0c`a.b` \u7684\u503c\u5e94\u8be5\u7b49\u4e8e 3\uff0c\u5176\u4e25\u91cd\u7a0b\u5ea6\u4e3a high\uff0c\u5982\u679c\u8be5\u5b57\u6bb5\u4e0d\u7b26\u5408\u9884\u671f\uff0c\u4f1a\u663e\u793a `[NOK]`\n\n\u76ee\u524d\uff0c\n- `type` \u652f\u6301\uff1a`eq`, `lt`, `le`, `gt`, `ge`, `ne` \u6216\u8005 `==`, `<`, `<=`, `>`, `>=`, `!=`\n- `value` \u652f\u6301\uff1a`+`, `-`, `*`, `/`, `//`, `**`, `()`\uff0c\u8fd8\u652f\u6301\u5b57\u6bb5\u5f15\u7528 `${}`, \u7248\u672c\u7b26\u53f7 `Version{}` \u4ee5\u53ca\u6743\u9650\u7b26\u53f7 `FilePerm{}`\n- `reason` \u652f\u6301\u4efb\u610f\u5b57\u7b26\u4e32\n- `severity` \u652f\u6301\uff1a`low`, `medium`, `high`\uff0c\u4e0d\u586b\u5199\u9ed8\u8ba4 `high`\u3002\u5176\u4e2d\uff0c`low` \u663e\u793a\u4e3a `[RECOMMEND]`\uff1b`medium` \u663e\u793a\u4e3a `[WARNING]`\uff1b`high` \u663e\u793a\u4e3a `[NOK]`\n\n### \u5b57\u6bb5\u5f15\u7528\n\u5bf9\u4e8e\u6bd4\u8f83\u5d4c\u5957\u8f83\u6df1\u7684\u914d\u7f6e\u6587\u4ef6\uff0c\u9047\u5230\u4e0d\u540c\u5b57\u6bb5\u76f8\u4e92\u5173\u8054\u7684\u573a\u666f\u65f6\uff0c\u521b\u5efa\u6821\u9a8c\u89c4\u5219\u662f\u4e00\u4e2a\u6311\u6218\u3002\u9884\u68c0\u5de5\u5177\u652f\u6301 **\u5b57\u6bb5\u5f15\u7528** \u8bed\u6cd5\uff0c\u5141\u8bb8\u7528\u6237\u901a\u8fc7 `${}` \u7684\u8bed\u6cd5\u6765\u5f15\u7528\u5176\u4ed6\u4f4d\u7f6e\u7684\u5b57\u6bb5\u503c\u3002\u6bd4\u5982\uff0c\u6709\u5982\u4e0b\u914d\u7f6e\u6587\u4ef6\n```json\n{\n \"a\": {\n \"b\": \"value of b\",\n \"c\": \"value of c\"\n }\n}\n```\n\u5982\u679c\u5e0c\u671b `a.b` \u7684\u503c\u548c `a.c` \u7684\u503c\u76f8\u7b49\uff0c\u5219\u6821\u9a8c\u89c4\u5219\u5982\u4e0b\uff1a\n```yaml\na:\n b:\n expected:\n type: eq\n value: ${.c}\n reason: a.b \u7684\u503c\u7b49\u4e8e a.c\n severity: high\n c:\n expected:\n type: eq\n value: ${a.b}\n reason: a.c \u7684\u503c\u7b49\u4e8e a.b\n severity: high\n```\n\u5176\u4e2d `${.c}` \u662f\u76f8\u5bf9\u5f15\u7528, `${a.b}` \u662f\u7edd\u5bf9\u5f15\u7528\uff1b\u5bf9\u4e8e\u5927\u578b\u5d4c\u5957\u7684\u914d\u7f6e\u6587\u4ef6\u5c24\u5176\u597d\u7528\u3002\n\n### \u7248\u672c\u5f15\u7528\n\u5982\u679c\u6821\u9a8c\u6d89\u53ca\u5230\u7248\u672c\u6bd4\u8f83\uff0c\u6bd4\u5982\u4f4e\u4e8e\u591a\u5c11\u7248\u672c\u65f6\u4f1a\u5bfc\u81f4\u6709\u95ee\u9898\uff0c\u53ef\u4ee5\u4f7f\u7528\u7248\u672c\u5f15\u7528\u3002\u6bd4\u5982 `transformers_version` \u7248\u672c\u9700\u8981\u5927\u4e8e `4.33`\uff0c\u5219\u53ef\u4ee5\u5199\u4e3a\n```yaml\ntransformers_version:\n expected:\n type: gt\n value: Version{4.33}\n reason: xx\n severity: xx\n```\n\u5185\u7f6e\u4e86 `Version` \u7684\u6bd4\u8f83\u89c4\u5219\uff0c\u76ee\u524d\u662f `8.0.0 > 8.0.rc2 > 8.0.rc1 > 8.0.rc1.b020`\u3002\u5bf9\u4e8e T \u7248\u672c\u6682\u4e0d\u652f\u6301\u6821\u9a8c\uff0c\u56e0\u4e3a T \u7248\u672c\u6ca1\u6709\u89c4\u5f8b\n\n# \u53c2\u6570\u5217\u8868\n - \u5b50\u529f\u80fd\u5305\u62ec `precheck` / `dump` / `compare`\n - \u901a\u8fc7 `msprechecker -h` \u83b7\u53d6\u5b50\u529f\u80fd\u5217\u8868\uff0c\u4ee5\u53ca `msprechecker {\u5b50\u529f\u80fd} -h` \u83b7\u53d6\u5bf9\u5e94\u5b50\u529f\u80fd\u7684\u53c2\u6570\u5217\u8868\n## \u901a\u7528\u53c2\u6570\n<a id=\"1\"></a>\n\u4ee5\u4e0b\u901a\u7528\u53c2\u6570\u9002\u7528\u4e8e `msprechecker precheck` \u548c `msprechecker dump`\uff0c\u4e0d\u9002\u7528\u4e8e `msprechecker compare`\n | \u53c2\u6570\u540d | \u53c2\u6570\u63cf\u8ff0 | \u662f\u5426\u5fc5\u9009 |\n | ------------------------------- | ----------------------------------------------------------------------------------------------- | ------------------------------------------- |\n | -ch {...}, --checkers {...} | *\u5b57\u7b26\u4e32\u5217\u8868\u503c\uff0c\u53ef\u9009\u503c basic,hccl,model,hardware,all\uff0c\u6307\u5b9a\u68c0\u67e5\u9879\uff0c\u53ef\u6307\u5b9a\u591a\u4e2a\uff0call \u8868\u793a\u5168\u90e8 | \u5426\uff0c\u9ed8\u8ba4\u503c basic |\n | -service, --service_config_path | \u5b57\u7b26\u4e32\u503c\uff0cMINDIE service \u8def\u5f84\u6216 config json \u6587\u4ef6\u8def\u5f84\uff0c\u4f18\u5148\u7ea7\u9ad8\u4e8e\u73af\u5883\u53d8\u91cf\u7684 MIES_INSTALL_PATH \u503c | \u5426\uff0c\u9ed8\u8ba4\u4f7f\u7528\u73af\u5883\u53d8\u91cf\u7684 MIES_INSTALL_PATH \u503c |\n | -user, --user_config_path | \u5b57\u7b26\u4e32\u503c\uff0cjson \u6587\u4ef6\uff0ck8s user_config.json \u6587\u4ef6\uff0c\u4e0d\u6307\u5b9a\u5219\u4e0d\u68c0\u67e5 | \u5426\uff0c\u9ed8\u8ba4 None |\n | --mindie_env_config_path | \u5b57\u7b26\u4e32\u503c\uff0cjson \u6587\u4ef6\uff0ck8s mindie_env.json \u6587\u4ef6\uff0c\u4e0d\u6307\u5b9a\u5219\u4e0d\u68c0\u67e5 | \u5426\uff0c\u9ed8\u8ba4 None |\n | -ranktable, --ranktable_file | \u5b57\u7b26\u4e32\u503c\uff0cjson \u6587\u4ef6\uff0c\u624b\u52a8\u6307\u5b9a ranktable \u6587\u4ef6\uff0c\u4f18\u5148\u7ea7\u9ad8\u4e8e\u73af\u5883\u53d8\u91cf\u7684 RANKFILETABLE | \u5426\uff0c\u9ed8\u8ba4\u4f7f\u7528\u73af\u5883\u53d8\u91cf\u7684 RANKFILETABLE \u503c |\n | --weight_dir | \u6a21\u578b\u6743\u91cd\u76ee\u5f55\u8def\u5f84 | \u5426\uff0c\u9ed8\u8ba4\u4f7f\u7528 config.json \u4e2d\u7684 `modelWeightPath` \u5b57\u6bb5\u8def\u5f84 |\n | -blocknum, --sha256_blocknum | int \u503c\uff0c\u8ba1\u7b97\u6a21\u578b\u6743\u91cd sha256sum \u503c\u65f6\u7684\u91c7\u6837\u5757\u6570\uff0c\u503c\u8d8a\u5927\u91c7\u6837\u8d8a\u591a\uff0c\u8ba1\u7b97\u901f\u5ea6\u8d8a\u6162 | \u5426\uff0c\u9ed8\u8ba4 1000 |\n | -add, --additional_checks_yaml | \u5b57\u7b26\u4e32\u503c\uff0cyaml \u6587\u4ef6\uff0c\u989d\u5916\u7684\u81ea\u5b9a\u4e49\u914d\u7f6e\u9879\uff0c\u6307\u5b9a\u540e\u5c06\u8986\u76d6\u9ed8\u8ba4\u68c0\u67e5\u9879\u4e2d\u7684\u503c | \u5426\uff0c\u9ed8\u8ba4 None |\n | -l {...}, --log_level {...} | \u65e5\u5fd7\u7ea7\u522b\uff0c\u53ef\u9009\u503c debug,info,warning,error,fatal,critical | \u5426\uff0c\u9ed8\u8ba4 info |\n\n - `basic` \u8868\u793a\u68c0\u67e5\u73af\u5883\u53d8\u91cf\u4ee5\u53ca\u57fa\u672c\u7cfb\u7edf\u4fe1\u606f\n - `hccl` \u8868\u793a\u68c0\u67e5 NPU \u4e4b\u95f4\u901a\u8fc7 hccl \u8fde\u63a5\u7684\u72b6\u6001\n - `model` \u8868\u793a\u68c0\u67e5\u6216\u6bd4\u5bf9\u6a21\u578b\u5927\u5c0f\u4ee5\u53ca sha256sum \u503c\n - `hardware` \u8868\u793a\u68c0\u67e5 CPU / NPU \u8ba1\u7b97\u80fd\u529b\uff0c\u4ee5\u53ca\u7f51\u7edc\u8fde\u63a5\u72b6\u6001\n - `all` \u8868\u793a\u68c0\u67e5\u5168\u90e8\n## precheck \u989d\u5916\u53c2\u6570\n | \u53c2\u6570\u540d | \u53c2\u6570\u63cf\u8ff0 | \u662f\u5426\u5fc5\u9009 |\n | -------------- | ---------------------------------------------------- | ------------------------------ |\n | -s, --save_env | \u5b57\u7b26\u4e32\u503c\uff0c\u6307\u5b9a\u73af\u5883\u53d8\u91cf\u9700\u8981\u4f18\u5316\u65f6\uff0c\u8f93\u51fa\u7684 sh \u6587\u4ef6\u8def\u5f84 | \u5426\uff0c\u9ed8\u8ba4\u4e3a msprechecker_env.sh |\n## dump \u989d\u5916\u53c2\u6570\n | \u53c2\u6570\u540d | \u53c2\u6570\u63cf\u8ff0 | \u662f\u5426\u5fc5\u9009 |\n | -------------------- | ---------------------------------- | --------------------------------------------------- |\n | -d, --dump_file_path | \u5b57\u7b26\u4e32\u503c\uff0c\u6307\u5b9a dump \u6570\u636e\u7684\u4fdd\u5b58\u8def\u5f84 | \u5426\uff0c\u9ed8\u8ba4\u4e3a /tmp/msprechecker_dump_{time_stamp}.json |\n## compare \u53c2\u6570\n | \u53c2\u6570\u540d | \u53c2\u6570\u63cf\u8ff0 | \u662f\u5426\u5fc5\u9009 |\n | --------------------------- | -------------------------------------------------------- | -------------- |\n | dump_file_paths | **\u4f4d\u7f6e\u53c2\u6570**\uff0c\u5b57\u7b26\u4e32\u5217\u8868\u503c\uff0c\u6307\u5b9a dump \u7684\u591a\u4efd\u6570\u636e | \u662f\uff0c\u4e14\u5e94\u4e3a\u591a\u4e2a |\n | -l {...}, --log_level {...} | \u65e5\u5fd7\u7ea7\u522b\uff0c\u53ef\u9009\u503c debug,info,warning,error,fatal,critical | \u5426\uff0c\u9ed8\u8ba4 info |\n",
"bugtrack_url": null,
"license": "Apache-2.0",
"summary": "MindStudio Prechecker",
"version": "0.1.0",
"project_urls": {
"documentation": "https://gitee.com/ascend/msit/tree/master/msprechecker",
"source": "https://gitee.com/ascend/msit/tree/master/msprechecker",
"tracker": "https://gitee.com/ascend/msit/issues"
},
"split_keywords": [
"ms",
" prechecker"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "db1a930fb7bde1f7569bdbda8cfbfb067a1c050306dbf03c33be1b4c7ed3da67",
"md5": "bb5d642cdc69d67883721b10e73a1127",
"sha256": "0fc1ee3eb3606fb1d0b2357f3e039b5658c9962b9046bcd88d45f97729cee6ae"
},
"downloads": -1,
"filename": "msprechecker-0.1.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "bb5d642cdc69d67883721b10e73a1127",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.7",
"size": 105552,
"upload_time": "2025-08-08T07:44:19",
"upload_time_iso_8601": "2025-08-08T07:44:19.181043Z",
"url": "https://files.pythonhosted.org/packages/db/1a/930fb7bde1f7569bdbda8cfbfb067a1c050306dbf03c33be1b4c7ed3da67/msprechecker-0.1.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "617501bc916e91e596f6b3177585278ce30cfaafaa0354f892549520f65d0eea",
"md5": "2d3a95e1510e54e1f4901ad6c37a7d1c",
"sha256": "32eb961eedc20d39110b7ec2ea8435896f730e64501da7589a60d0f9832d7b4e"
},
"downloads": -1,
"filename": "msprechecker-0.1.0.tar.gz",
"has_sig": false,
"md5_digest": "2d3a95e1510e54e1f4901ad6c37a7d1c",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.7",
"size": 62918,
"upload_time": "2025-08-08T07:44:20",
"upload_time_iso_8601": "2025-08-08T07:44:20.767817Z",
"url": "https://files.pythonhosted.org/packages/61/75/01bc916e91e596f6b3177585278ce30cfaafaa0354f892549520f65d0eea/msprechecker-0.1.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-08-08 07:44:20",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "msprechecker"
}