网络精度问题(有怀疑算子)

现象

网络精度异常,有怀疑的算子,例如切换了新的模块实现/新的融合算子等。

思路

指定特定算子进行Dump,保存算子的输入输出排查。

配置

结合IR图指定算子全名,或使用正则匹配匹配算子。
“dump_mode”: 1, kernels字段生效。

  1. 指定算子全名,例如"Default/Conv-op12";

  2. 正则匹配,例如匹配某个类型的算子:“name-regex(.+FlashAttention.+)”。

  • 匹配通信算子: [“name-regex(.+AllGather.+)”, “name-regex(.+AllReduce.+)”, “name-regex(.+AlltoAll.+)”, “name-regex(.+AlltoAllV.+)”, “name-regex(.+ReduceScatter.+)”, “name-regex(.+Broadcast.+)”]

  • 匹配梯度:未融合场景,可以通过匹配clipgradnorm的mul,[“name-regex(Default/clip_grad_norm-ClipGradNorm/Mul-*)”],Mul算子input 0是clip之前的梯度,input 1是clip的norm,输出是clip后的梯度;融合场景,匹配溢出检测算子,“name-regex(.+AllFinite.+)”,溢出检测算子输入是梯度;

{
    "common_dump_settings": {
        "op_debug_mode": 0,
        "dump_mode": 1,
        "path": "/absolute_path",
        "net_name": "ResNet50",
        "iteration": "all",
        "saved_data": "statistic",
        "input_output": 0,
        "kernels": ["Default/Conv-op12"],
        "support_device": [0,1,2,3,4,5,6,7],
        "statistic_category": ["max", "min", "l2norm"]
    },
    "e2e_dump_settings": {
        "stat_calc_mode": "device"
    }
}

性能

与指定的算子数量有关,大约在1-2倍。

资源占用

显存

使用device算子计算统计信息会引入额外的显存申请,如果显存占用很极限,可能导致显存OOM。如果开启dump发生OOM,可以把统计信息计算调整为低精度,“device_stat_precision_mode”: “low” 。

磁盘

跟指定算子数量相关,支持统计信息和原始数据保存,统计信息占用小,原始数据占用很大。