From 85b931c905c6a6eb7ad04d4f5ffac65b2f56dfb2 Mon Sep 17 00:00:00 2001
From: wugengjun <451676383@qq.com>
Date: Tue, 11 Mar 2025 16:39:35 +0800
Subject: [PATCH 1/3] =?UTF-8?q?=E9=9D=99=E6=80=81=E5=9B=BEL0=E7=BA=A7?=
=?UTF-8?q?=E8=B7=A8=E6=A1=86=E6=9E=B6=E6=AF=94=E5=AF=B9=E9=80=82=E9=85=8D?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../docs/11.accuracy_compare_MindSpore.md | 28 ++++++++++---------
.../msprobe/mindspore/compare/ms_compare.py | 10 +++++--
2 files changed, 23 insertions(+), 15 deletions(-)
diff --git a/debug/accuracy_tools/msprobe/docs/11.accuracy_compare_MindSpore.md b/debug/accuracy_tools/msprobe/docs/11.accuracy_compare_MindSpore.md
index 1b1824a774..3cfa6c2f8e 100644
--- a/debug/accuracy_tools/msprobe/docs/11.accuracy_compare_MindSpore.md
+++ b/debug/accuracy_tools/msprobe/docs/11.accuracy_compare_MindSpore.md
@@ -16,8 +16,10 @@ msprobe精度比对工具主要用于如下场景:
- MindSpore与PyTorch跨框架比对
- 通过对同一个网络模型,在整网环境下分别在MindSpore动态图和PyTorch环境下获得API dump数据,以PyTorch数据作为标杆,进行自动比对,从而实现跨框架的精度对比。
- 通过对同一个网络模型,在整网环境下分别在MindSpore动态图和PyTorch环境下获得cell dump数据,由用户指定可以比对的cell list,以PyTorch数据作为标杆,进行自动比对,从而实现跨框架的精度对比。
+ - 通过对同一个网络模型,在整网环境下分别在MindSpore静态图和PyTorch环境下获得cell dump数据,由用户指定可以比对的cell list,以PyTorch数据作为标杆,进行自动比对,从而实现跨框架的精度对比。
- 通过对同一个网络模型,在整网环境下分别在MindSpore动态图和PyTorch环境下获得API或模块dump数据,由用户指定可以比对的API或模块,以PyTorch数据作为标杆,进行自动比对,从而实现跨框架的精度对比。
- 通过对同一个网络模型,在整网环境下分别在MindSpore动态图和PyTorch环境下获得API或模块dump数据,由用户指定可以比对的模型代码中的Layer层,以PyTorch数据作为标杆,进行自动比对,从而实现跨框架的精度对比。
+ - 通过对同一个网络模型,在整网环境下分别在MindSpore静态图和PyTorch环境下获得模块dump数据,由用户指定可以比对的模型代码中的Layer层,以PyTorch数据作为标杆,进行自动比对,从而实现跨框架的精度对比。
执行精度比对操作需要安装msprobe工具。详见《[MindStudio精度调试工具](../README.md)》的“工具安装”章节。
@@ -35,17 +37,17 @@ msprobe -f mindspore compare -i ./compare.json -o ./output -s
**完整参数说明**
-| 参数名 | 说明 | 是否必选 |
-| -------------------- | ------------------------------------------------------------ | -------- |
-| -i或--input_path | 指定比对文件。比对文件内容及示例请参见[比对文件](#31-比对文件)或[比对文件(kernel)](#32-比对文件kernel)(比对文件(kernel)仅[不同版本下的全量kernel比对](#23-不同版本下的全量kernel比对)场景支持)。 | 是 |
+| 参数名 | 说明 | 是否必选 |
+| -------------------- |-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -------- |
+| -i或--input_path | 指定比对文件。比对文件内容及示例请参见[比对文件](#31-比对文件)或[比对文件(kernel)](#32-比对文件kernel)(比对文件(kernel)仅[不同版本下的全量kernel比对](#23-不同版本下的全量kernel比对)场景支持)。 | 是 |
| -o或--output_path | 配置比对结果文件存盘目录,默认会在当前目录创建output目录。文件名称基于时间戳自动生成,格式为:
`compare_result_{timestamp}.xlsx`
`compare_result_{rank_id}_{step_id}_{timestamp}.xlsx`(仅[不同版本下的全量kernel比对](#23-不同版本下的全量kernel比对)场景支持)。 | 否 |
-| -s或--stack_mode | 比对结果展示调用栈信息(NPU_Stack_Info)的开关,bool 类型。单卡场景开启时,需要使用[比对文件](#31-比对文件)的单卡场景配置stack_path指定stack.json文件,才能生成详细调用栈信息,否则在比对时会报错;暂不支持多卡场景。通过直接配置该参数开启,默认未配置,表示关闭。 | 否 |
-| -c或--compare_only | 仅比对开关,bool 类型。该参数默认未配置,会启用自动精度分析,工具自动针对比对结果进行分析,识别到第一个精度可能不达标节点(在比对结果文件中的 Accuracy Reached or Not 列显示为 No),并给出问题可能产生的原因(打屏展示并生成 `advisor_{timestamp}.txt` 文件)。通过配置该参数取消自动精度分析,仅输出比对结果表格。 | 否 |
-| -f或--fuzzy_match | 模糊匹配。开启后,对于网络中同一层级且命名仅调用次数不同的API,可匹配并进行比对。通过直接配置该参数开启,默认未配置,表示关闭。 | 否 |
-| -am或--api_mapping | 跨框架比对。配置该参数时表示开启跨框架API比对功能,可以指定自定义映射文件*.yaml,不指定映射文件时按照msprobe定义的默认映射关系进行比对。自定义映射文件的格式请参见[自定义映射文件(api_mapping)](#33-自定义映射文件api_mapping)。仅[跨框架的API比对](#25-跨框架的api比对)场景需要配置。 | 否 |
-| -cm或--cell_mapping | 跨框架比对。配置该参数时表示开启跨框架cell模块比对功能,可以指定自定义映射文件*.yaml,不指定映射文件时按照msprobe定义的默认映射关系进行比对。自定义映射文件的格式请参见[自定义映射文件(cell_mapping)](#34-自定义映射文件cell_mapping)。仅[跨框架的cell模块比对](#26-跨框架的cell模块比对)场景需要配置。 | 否 |
-| -dm或--data_mapping | 同框架或跨框架比对。通过映射文件指定两个具体参数的对应关系,可以在L0、L1或mix采集场景下使用。配置该参数的同时需要指定自定义映射文件*.yaml。自定义映射文件的格式请参见[自定义映射文件(data_mapping)](#35-自定义映射文件data_mapping)。 | 否 |
-| -lm或--layer_mapping | 跨框架比对。配置该参数时表示开启跨框架Layer层的比对功能,指定模型代码中的Layer层后,可以识别对应dump数据中的模块或API。需要指定自定义映射文件*.yaml。自定义映射文件的格式请参见[自定义映射文件(Layer_mapping)](#36-自定义映射文件layer_mapping)。仅[跨框架的Layer层比对](#27-跨框架的layer层比对)场景需要配置。 | 否 |
+| -s或--stack_mode | 比对结果展示调用栈信息(NPU_Stack_Info)的开关,bool 类型。单卡场景开启时,需要使用[比对文件](#31-比对文件)的单卡场景配置stack_path指定stack.json文件,才能生成详细调用栈信息,否则在比对时会报错;暂不支持多卡场景。通过直接配置该参数开启,默认未配置,表示关闭。 | 否 |
+| -c或--compare_only | 仅比对开关,bool 类型。该参数默认未配置,会启用自动精度分析,工具自动针对比对结果进行分析,识别到第一个精度可能不达标节点(在比对结果文件中的 Accuracy Reached or Not 列显示为 No),并给出问题可能产生的原因(打屏展示并生成 `advisor_{timestamp}.txt` 文件)。通过配置该参数取消自动精度分析,仅输出比对结果表格。 | 否 |
+| -f或--fuzzy_match | 模糊匹配。开启后,对于网络中同一层级且命名仅调用次数不同的API,可匹配并进行比对;对于跨框架比对场景不再校验dtype与pytorch侧的一致性,可匹配并进行比对。通过直接配置该参数开启,默认未配置,表示关闭。 | 否 |
+| -am或--api_mapping | 跨框架比对。配置该参数时表示开启跨框架API比对功能,可以指定自定义映射文件*.yaml,不指定映射文件时按照msprobe定义的默认映射关系进行比对。自定义映射文件的格式请参见[自定义映射文件(api_mapping)](#33-自定义映射文件api_mapping)。仅[跨框架的API比对](#25-跨框架的api比对)场景需要配置。 | 否 |
+| -cm或--cell_mapping | 跨框架比对。配置该参数时表示开启跨框架cell模块比对功能,可以指定自定义映射文件*.yaml,不指定映射文件时按照msprobe定义的默认映射关系进行比对。自定义映射文件的格式请参见[自定义映射文件(cell_mapping)](#34-自定义映射文件cell_mapping)。仅[跨框架的cell模块比对](#26-跨框架的cell模块比对)场景需要配置。 | 否 |
+| -dm或--data_mapping | 同框架或跨框架比对。通过映射文件指定两个具体参数的对应关系,可以在L0、L1或mix采集场景下使用。配置该参数的同时需要指定自定义映射文件*.yaml。自定义映射文件的格式请参见[自定义映射文件(data_mapping)](#35-自定义映射文件data_mapping)。 | 否 |
+| -lm或--layer_mapping | 跨框架比对。配置该参数时表示开启跨框架Layer层的比对功能,指定模型代码中的Layer层后,可以识别对应dump数据中的模块或API。需要指定自定义映射文件*.yaml。自定义映射文件的格式请参见[自定义映射文件(Layer_mapping)](#36-自定义映射文件layer_mapping)。仅[跨框架的Layer层比对](#27-跨框架的layer层比对)场景需要配置。 | 否 |
动态图模式没有填写任何mapping时,按照同框架比对的方式进行比对,比对数据和标杆数据的Cell或Api名称需要完全相同才能匹配得上。
@@ -137,13 +139,13 @@ msprobe -f mindspore compare -i ./compare.json -o ./output -s
4. 执行如下示例命令进行比对:
```shell
- msprobe -f mindspore compare -i ./compare.json -o ./output -s -cm
+ msprobe -f mindspore compare -i ./compare.json -o ./output -s -f -cm
```
或
```shell
- msprobe -f mindspore compare -i ./compare.json -o ./output -s -cm cell_mapping.yaml
+ msprobe -f mindspore compare -i ./compare.json -o ./output -s -f -cm cell_mapping.yaml
```
cell_mapping.yaml文件配置请参见[自定义映射文件(cell_mapping)](#34-自定义映射文件cell_mapping)。
@@ -151,7 +153,7 @@ msprobe -f mindspore compare -i ./compare.json -o ./output -s
此外,也可以通过data_mapping.yaml文件实现具体参数的匹配,例:
```shell
- msprobe -f mindspore compare -i ./compare.json -o ./output -s -dm data_mapping.yaml
+ msprobe -f mindspore compare -i ./compare.json -o ./output -s -f -dm data_mapping.yaml
```
data_mapping.yaml的写法请参见[自定义映射文件(data_mapping)](#35-自定义映射文件data_mapping)。
diff --git a/debug/accuracy_tools/msprobe/mindspore/compare/ms_compare.py b/debug/accuracy_tools/msprobe/mindspore/compare/ms_compare.py
index 4f158512bb..7811227e59 100644
--- a/debug/accuracy_tools/msprobe/mindspore/compare/ms_compare.py
+++ b/debug/accuracy_tools/msprobe/mindspore/compare/ms_compare.py
@@ -269,13 +269,19 @@ class MSComparator(Comparator):
npu_df[CompareConst.COMPARE_SHAPE] = npu_df[Const.SHAPE]
bench_df[CompareConst.COMPARE_KEY] = bench_df[CompareConst.OP_NAME]
bench_df[CompareConst.COMPARE_SHAPE] = bench_df[Const.SHAPE]
- match_result = pd.merge(npu_df, bench_df, on=[CompareConst.COMPARE_KEY, CompareConst.COMPARE_SHAPE],
- how='outer')
+ if self.fuzzy_match:
+ match_result = pd.merge(npu_df, bench_df, on=[CompareConst.COMPARE_KEY], how='outer')
+ else:
+ match_result = pd.merge(npu_df, bench_df, on=[CompareConst.COMPARE_KEY, CompareConst.COMPARE_SHAPE],
+ how='outer')
match_result = match_result[match_result['op_name_x'].notna()].fillna(CompareConst.N_A)
def gen_dtype_condition():
npu_dtype = match_result['dtype_x']
bench_dtype = match_result['dtype_y']
+ if self.fuzzy_match:
+ true_condition = pd.Series(True, index=npu_dtype.index)
+ return true_condition
if self.cross_frame:
npu_dtype = npu_dtype.map(dtype_mapping).fillna(npu_dtype)
--
Gitee
From ed87c62ee682ebf6b75d99c9cddca62ab60e9934 Mon Sep 17 00:00:00 2001
From: wugengjun <451676383@qq.com>
Date: Wed, 12 Mar 2025 09:38:04 +0800
Subject: [PATCH 2/3] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=A3=80=E8=A7=86?=
=?UTF-8?q?=E6=84=8F=E8=A7=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../msprobe/mindspore/compare/ms_compare.py | 14 +++++---------
1 file changed, 5 insertions(+), 9 deletions(-)
diff --git a/debug/accuracy_tools/msprobe/mindspore/compare/ms_compare.py b/debug/accuracy_tools/msprobe/mindspore/compare/ms_compare.py
index 7811227e59..843afa1a98 100644
--- a/debug/accuracy_tools/msprobe/mindspore/compare/ms_compare.py
+++ b/debug/accuracy_tools/msprobe/mindspore/compare/ms_compare.py
@@ -269,19 +269,14 @@ class MSComparator(Comparator):
npu_df[CompareConst.COMPARE_SHAPE] = npu_df[Const.SHAPE]
bench_df[CompareConst.COMPARE_KEY] = bench_df[CompareConst.OP_NAME]
bench_df[CompareConst.COMPARE_SHAPE] = bench_df[Const.SHAPE]
- if self.fuzzy_match:
- match_result = pd.merge(npu_df, bench_df, on=[CompareConst.COMPARE_KEY], how='outer')
- else:
- match_result = pd.merge(npu_df, bench_df, on=[CompareConst.COMPARE_KEY, CompareConst.COMPARE_SHAPE],
- how='outer')
+ match_result = pd.merge(npu_df, bench_df, on=([CompareConst.COMPARE_KEY] if self.fuzzy_match
+ else [CompareConst.COMPARE_KEY, CompareConst.COMPARE_SHAPE]),
+ how='outer')
match_result = match_result[match_result['op_name_x'].notna()].fillna(CompareConst.N_A)
def gen_dtype_condition():
npu_dtype = match_result['dtype_x']
bench_dtype = match_result['dtype_y']
- if self.fuzzy_match:
- true_condition = pd.Series(True, index=npu_dtype.index)
- return true_condition
if self.cross_frame:
npu_dtype = npu_dtype.map(dtype_mapping).fillna(npu_dtype)
@@ -294,7 +289,8 @@ class MSComparator(Comparator):
)
return equal_condition | match_condition
- match_result.loc[~gen_dtype_condition(), [i + '_y' for i in bench_df.columns]] = CompareConst.N_A
+ if not self.fuzzy_match:
+ match_result.loc[~gen_dtype_condition(), [i + '_y' for i in bench_df.columns]] = CompareConst.N_A
return self.make_result_df(match_result)
def modify_compare_data_with_user_mapping(self, npu_df, bench_df):
--
Gitee
From 11e2616ffe48a70013344d90b9e97e3cbd38fdb7 Mon Sep 17 00:00:00 2001
From: wugengjun <451676383@qq.com>
Date: Wed, 12 Mar 2025 09:54:17 +0800
Subject: [PATCH 3/3] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=B5=84=E6=96=99?=
=?UTF-8?q?=E6=A3=80=E8=A7=86=E6=84=8F=E8=A7=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../msprobe/docs/11.accuracy_compare_MindSpore.md | 13 +++++++++----
1 file changed, 9 insertions(+), 4 deletions(-)
diff --git a/debug/accuracy_tools/msprobe/docs/11.accuracy_compare_MindSpore.md b/debug/accuracy_tools/msprobe/docs/11.accuracy_compare_MindSpore.md
index 3cfa6c2f8e..c4e50f82bb 100644
--- a/debug/accuracy_tools/msprobe/docs/11.accuracy_compare_MindSpore.md
+++ b/debug/accuracy_tools/msprobe/docs/11.accuracy_compare_MindSpore.md
@@ -43,7 +43,7 @@ msprobe -f mindspore compare -i ./compare.json -o ./output -s
| -o或--output_path | 配置比对结果文件存盘目录,默认会在当前目录创建output目录。文件名称基于时间戳自动生成,格式为:
`compare_result_{timestamp}.xlsx`
`compare_result_{rank_id}_{step_id}_{timestamp}.xlsx`(仅[不同版本下的全量kernel比对](#23-不同版本下的全量kernel比对)场景支持)。 | 否 |
| -s或--stack_mode | 比对结果展示调用栈信息(NPU_Stack_Info)的开关,bool 类型。单卡场景开启时,需要使用[比对文件](#31-比对文件)的单卡场景配置stack_path指定stack.json文件,才能生成详细调用栈信息,否则在比对时会报错;暂不支持多卡场景。通过直接配置该参数开启,默认未配置,表示关闭。 | 否 |
| -c或--compare_only | 仅比对开关,bool 类型。该参数默认未配置,会启用自动精度分析,工具自动针对比对结果进行分析,识别到第一个精度可能不达标节点(在比对结果文件中的 Accuracy Reached or Not 列显示为 No),并给出问题可能产生的原因(打屏展示并生成 `advisor_{timestamp}.txt` 文件)。通过配置该参数取消自动精度分析,仅输出比对结果表格。 | 否 |
-| -f或--fuzzy_match | 模糊匹配。开启后,对于网络中同一层级且命名仅调用次数不同的API,可匹配并进行比对;对于跨框架比对场景不再校验dtype与pytorch侧的一致性,可匹配并进行比对。通过直接配置该参数开启,默认未配置,表示关闭。 | 否 |
+| -f或--fuzzy_match | 模糊匹配。开启后,对于跨框架比对场景不再校验dtype与pytorch侧的一致性,可匹配并进行比对。通过直接配置该参数开启,默认未配置,表示关闭。 | 否 |
| -am或--api_mapping | 跨框架比对。配置该参数时表示开启跨框架API比对功能,可以指定自定义映射文件*.yaml,不指定映射文件时按照msprobe定义的默认映射关系进行比对。自定义映射文件的格式请参见[自定义映射文件(api_mapping)](#33-自定义映射文件api_mapping)。仅[跨框架的API比对](#25-跨框架的api比对)场景需要配置。 | 否 |
| -cm或--cell_mapping | 跨框架比对。配置该参数时表示开启跨框架cell模块比对功能,可以指定自定义映射文件*.yaml,不指定映射文件时按照msprobe定义的默认映射关系进行比对。自定义映射文件的格式请参见[自定义映射文件(cell_mapping)](#34-自定义映射文件cell_mapping)。仅[跨框架的cell模块比对](#26-跨框架的cell模块比对)场景需要配置。 | 否 |
| -dm或--data_mapping | 同框架或跨框架比对。通过映射文件指定两个具体参数的对应关系,可以在L0、L1或mix采集场景下使用。配置该参数的同时需要指定自定义映射文件*.yaml。自定义映射文件的格式请参见[自定义映射文件(data_mapping)](#35-自定义映射文件data_mapping)。 | 否 |
@@ -139,21 +139,26 @@ msprobe -f mindspore compare -i ./compare.json -o ./output -s
4. 执行如下示例命令进行比对:
```shell
- msprobe -f mindspore compare -i ./compare.json -o ./output -s -f -cm
+ msprobe -f mindspore compare -i ./compare.json -o ./output -s -cm
```
或
```shell
- msprobe -f mindspore compare -i ./compare.json -o ./output -s -f -cm cell_mapping.yaml
+ msprobe -f mindspore compare -i ./compare.json -o ./output -s -cm cell_mapping.yaml
```
cell_mapping.yaml文件配置请参见[自定义映射文件(cell_mapping)](#34-自定义映射文件cell_mapping)。
不传入cell_mapping.yaml的情况下仅将Cell改成Module后进行匹配;传入cell_mapping.yaml的情况下将按照cell_mapping.yaml的内容进行匹配。
+ 如果跨框架比对场景不需要考虑dtype与pytorch侧的一致性,匹配并进行比对,可以开启-f或--fuzzy_match选项,例:
+ ```shell
+ msprobe -f mindspore compare -i ./compare.json -o ./output -s -f -cm cell_mapping.yaml
+ ```
+
此外,也可以通过data_mapping.yaml文件实现具体参数的匹配,例:
```shell
- msprobe -f mindspore compare -i ./compare.json -o ./output -s -f -dm data_mapping.yaml
+ msprobe -f mindspore compare -i ./compare.json -o ./output -s -dm data_mapping.yaml
```
data_mapping.yaml的写法请参见[自定义映射文件(data_mapping)](#35-自定义映射文件data_mapping)。
--
Gitee