使用内存检测

启用内存检测

运行mssanitizer工具时,默认启用内存检测工具memcheck

./<kernel_name>_npu为NPU侧可执行文件所在路径,可配置为相对路径或绝对路径。

可在自定义算子调用脚本test_ops_custom.py所在路径执行命令,或者配置为脚本的相对路径或绝对路径。

  • 启动工具后,将会在当前目录下自动生成工具操作日志文件mssanitizer__{timestamp}_XXX.log。
  • 当用户程序运行完成后,界面将会打印异常报告,异常的具体含义请参见内存异常报告解析
  • 当用户使用pytorch等框架接入算子时,框架内部可能会通过内存池管理GM内存,而内存池通常会一次性分配大量GM内存,并在运行过程中复用。此时,若用户对算子进行检测并记录GM上所有内存分配和释放的信息,会因为内存池的内存管理方式导致检测信息不准确。因此检测工具提供了手动上报GM内存分配信息的接口,方便用户在算子调用时手动上报该算子应当使用的GM内存范围,详细接口介绍请参见SanitizerReportMallocSanitizerReportFree

内存异常报告解析

内存检测异常报告会输出多种不同类型的异常信息,以下将对一些简单的异常信息示例进行说明,帮助用户解读异常报告中的信息。

内存异常报告具有以下级别:
  • WARNNING:此级别被定义为不确定性的风险,可能出现的异常现象由实际情况决定。如多核踩踏风险涉及多个核对同一块内存的操作,高阶用户可以通过核间同步的手段来规避此风险,初阶用户遇到此类异常,应该将其视为危险源。
  • ERROR:最高严重级别的异常,涉及针对内存操作的确定性错误,如非法读写、内存泄漏、非对齐访问等。强烈建议用户检查此严重级别的异常。