昇腾社区首页
中文
注册

首step loss不一致(或同权重推理不一致)

在进行工具定位前,请优先排除Checklist检查中的配置项问题和问题复现中的随机性问题。

案例:某语音模型首step就loss对不齐。

图1 loss对不齐

定位方法:使用msprobe的精度采集dump工具采集第0步mix级别数据,config.json配置如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
{
    "task": "statistics",
    "dump_path": "/home/data_dump",
    "rank": [],
    "step": [0],
    "level": "mix",
    "enable_dataloader": false,
    "statistics": {
        "scope": [], 
        "list": [],
        "data_mode": ["all"],
        "summary_mode": "statistics"
    }
}
  1. dump工具在代码中插入方法可参考如下方式:
    图2 dump工具插入代码的方式
  2. 通过分级可视化工具分析差异。
    可视化的compare.json文件内容为:
    1
    2
    3
    4
    5
    {
        "npu_path": "./npu_dump",
        "bench_path": "./bench_dump",
        "is_print_compare_log": true
    }
    
    可视化命令为:
    msprobe -f pytorch graph -i ./compare.json -o ./output

    在输出目录中可以看到生成的vis后缀文件,用tensorboard打开可视化界面:

    图3 可视化比对结果

    可以看到gelu算子标红,算子精度可疑。

  3. 也可通过精度比对工具进行比对,精度比对compare.json配置如下:
    1
    2
    3
    4
    5
    6
    {
        "npu_path": "./npu_dump/dump.json",
        "bench_path": "./bench_dump/dump.json",
        "stack_path": "./npu_dump/stack.json",
        "is_print_compare_log": true
    }
    

    此处可直接比对单卡结果,精确到dump.json文件,若多卡则精确到步数。

    运行如下比对命令得到比对的csv表格:
    msprobe -f pytorch compare -i ./compare.json -o ./output -s

    分析表格发现gelu算子输入差异较小,输出差异较大。

    图4 精度比对结果

解决方案:

将gelu算子计算转CPU,精度问题解决,明确该问题为gelu算子导致,但转CPU会影响性能。

后续联系算子支撑人员提供了PTA的gelu修复包。

结果:用修复包后不转CPU也精度达标。