
# 精度比对
精度比对功能主要针对两类场景的问题：
1. 同一模型，从CPU或GPU移植到NPU中存在精度下降问题，对比NPU芯片中的API计算数值与CPU或GPU芯片中的API计算数值，进行问题定位。
2. 同一模型，进行迭代（模型、框架版本升级或设备硬件升级）时存在的精度下降问题，对比相同模型在迭代前后版本的API计算数值，进行问题定位。
首先通过在PyTorch训练脚本中插入dump接口，跟踪计算图中算子的前向传播与反向传播时的输入与输出，然后再使用子命令compare进行比对生成比对表格。当前比对结果支持计算Cosine（余弦相似度）、MaxAbsErr（最大绝对误差）和MaxRelativeErr（最大相对误差）、One Thousandth Err Ratio（双千分之一）和Five Thousandths Err Ratio（双千分之五）这几种评价指标，工具通过阈值过滤筛选出不达标API的输入输出提示用户进行重点关注。使用步骤如下：
1. 通过pip安装msprobe工具。 
   ```
   # shell
   pip install mindstudio-probe
   ```
   
   
2. 获取NPU和标杆的dump数据。
   
   PyTorch训练脚本插入dump接口方式如下：
   ```
   from msprobe.pytorch import PrecisionDebugger
   debugger = PrecisionDebugger(config_path='./config.json')
   ...
   debugger.start() # 一般在训练循环开头启动工具。
   ... # 循环体
   debugger.stop() # 一般在训练循环末尾结束工具。
   debugger.step() # 在训练循环的最后需要重置工具，非循环场景不需要。
   ```
   具体的config.json的配置要求请参见[介绍](https://gitee.com/ascend/mstt/blob/master/debug/accuracy_tools/msprobe/docs/02.config_introduction.md)。
   
   
3. 创建比对compare.json文件。
   
   - 单卡场景
     ```
     {
     "npu_path": "./npu_dump/dump.json",
     "bench_path": "./bench_dump/dump.json",
     "stack_path": "./npu_dump/stack.json",
     "is_print_compare_log": true
     }
     ```
     
   
   - 多卡场景
     ```
     { 
     "npu_path": "./npu_dump/step0",
     "bench_path": "./bench_dump/step0",
     "is_print_compare_log": true
     }
     ```
     
   
   
   单卡场景npu_path、bench_path、stack_path分别表示从[步骤2]中NPU环境所生成的dump.json、标杆环境生成的dump.json及NPU环境生成的stack.json文件，is_print_compare_log配置是否开启日志打屏。
   多卡场景区别于单卡场景会在[步骤2]按rank标号信息生成多个rank的dump文件结果，npu_path指定NPU环境生成包含多rank目录，gpu_path指定标杆环境包含多rank目录，is_print_compare_log配置是否开启日志打屏。
   
   
4. 精度比对生成比对报告 
   ```
   msproe -f pytorch compare -i ./compare.json -o ./output -s
   ```
   这里-i指定[步骤3]所创建compare.json文件，-o指定比对结果文件存盘目录，-s配置是否生成堆栈信息。生成结果为advisor_{timestamp}.txt和compare_result_{timestamp}.xlsx文件，advisor_{timestamp}.txt列出了可能存在精度问题的API的专家建议，compare_result_{timestamp}.xlsx文件列出了所有执行精度比对的API详细信息和比对结果。
   
   
详细工具的使用指导请参考[Pytorch精度比对](https://gitee.com/ascend/mstt/blob/master/debug/accuracy_tools/msprobe/docs/10.accuracy_compare_PyTorch.md#1-)介绍。
