昇腾社区首页
中文
注册

算子精度预检

当定位到可能存在精度问题的算子后,可以使用msit llm opcheck工具对算子的精度进行预检,判断加速库算子精度是否达标。msit llm opcheck工具的使用方法和可选参数内容请参见opcheck单算子精度预检功能使用指南

  1. 对LinearOperation算子做精度预检。

    示例如下,其中CHECK_PATH是预检结果数据保存路径。

    msit llm opcheck -i {GOLDEN_DUMP_ALL_PATH}/msit_dump_{TIMESTAMP}/tensors/{device_id}_{PID}/{TID}/ -ids 50_2_4_0 -opname LinearOperation  -o {CHECK_PATH}

    其中ids为指定预检的tensor索引,取其父目录的前缀,如果tensor路径为:

    {GOLDEN_DUMP_ALL_PATH}/msit_dump_{TIMESTAMP}/tensors/{device_id}_{PID}/3/50_Decoder_layer/2_MlpGateUpWeightPack/4_LinearNoQuant/0_LinearOperation/after/outtensor0.bin,那么其ids为50_2_4_0。

  2. 检测结果如图1所示。
    图1 检测结果

    并保存预检结果至1中指定的预检结果数据保存路径,打开预检结果文件,数据如图2所示。

    图2 预检结果数据
  3. 确认算子精度是否达标,算子精度标准请参见精度标准
    • 如果算子精度达标,表明是标杆与NPU算子输入差异导致的误差,可以通过修改模型推理计算时的数据类型,提高模型的数据精度。
    • 如果算子精度不达标
      1. 检查算子输出tensor是否存在数值较小的问题(例如SelfAttentionOperation和PagedAttentionOperation),这类算子通常会使得计算出来的相对误差值偏大,导致精度比对结果不通过。这种情况推荐使用-metric指定其他指标综合判断算子精度情况。
      2. 检查并对齐算子入参,如果依旧不满足实际的使用需求,通常需要具有算子开发相关经验的人员进行分析,开发者可参考AscendCL应用开发指南 (C&C++)中的“精度/性能优化 > 模型推理精度提升建议 > 算子精度导致推理结果不达标 > 问题定位流程章节内容来尝试解决。