使用前准备
添加编译选项
要启用算子检测功能时,需要在算子代码的编译阶段增加 --cce-enable-sanitizer 选项,链接阶段增加 --cce-enable-sanitizer --cce-aicore-arch={ARCH} 选项,其中 {ARCH} 需要与编译时使用的芯片类型一致。为了在异常报告输出时能显示异常发生的具体位置,需要在编译选项中增加 -g 使编译器生成定位信息,从而在报告中显示文件名行号等信息。
硬件型号 |
算子类型 |
---|---|
Atlas A2训练系列产品/Atlas 800I A2推理产品 |
Vector算子 |
Cube算子 |
|
Mix融合算子 |
|
Atlas 推理系列产品 |
- |
不同算子工程添加编译选项的位置不同,下面以内核调用符场景和msOpGen算子工程编译场景准备为例进行介绍:
- 内核调用符场景
- 算子代码的编译选项需添加 -g --cce-enable-sanitizer。
编辑样例工程目录下的“cmake/npu/CMakeLists.txt”文件,单击LINK参考核函数开发和运行验证的完整样例。
1 2 3 4 5 6
target_compile_options(${smoke_testcase}_npu PRIVATE -O2 -std=c++17 --cce-enable-sanitizer -g )
增加 --cce-enable-sanitizer 选项代表使能异常检测。
增加 -g 选项使编译器生成定位信息,将会在异常报告输出时显示异常发生的具体位置(文件名、行号以及调用栈等信息)。
- --cce-enable-sanitizer和-O0同时开启的情况下,需要增加编译选项 --cce-ignore-always-inline=false。
- 添加 -g 编译选项会在生成的二进制文件中附带调试信息,建议限制带有调试信息的用户程序的访问权限,确保只有授权人员可以访问该二进制文件。
- 因 llvm-symbolizer开源软件限制,调用栈的异常信息可能会获取失败。此时,用户可再次执行检测命令,就可以获取调用栈的异常信息。
- 链接阶段需增加target_link_options选项,主要配置--cce-enable-sanitizer和--cce-aicore-arch={ARCH} 。
编辑样例工程目录下的“cmake/npu/CMakeLists.txt”文件。
1 2 3 4 5
target_link_options(${smoke_testcase}_npu PRIVATE --cce-fatobj-link --cce-enable-sanitizer --cce-aicore-arch={ARCH} # 此处{ARCH}需替换为实际使用的硬件型号和算子类型对应的编译选项 )
- 启用msSanitizer检测工具时需要加载NPU侧可执行文件<kernel_name>_npu,该文件的获取可参考核函数运行验证简介。
- 算子代码的编译选项需添加 -g --cce-enable-sanitizer。
- msOpGen算子工程编译场景
- op_kernel侧编译选项中添加-sanitizer选项,具体请参考支持自定义编译选项。
- 编辑样例工程目录下的“op_kernel/CMakeLists.txt”文件。
add_ops_compile_options(ALL OPTIONS -sanitizer)
父主题: 异常检测(msSanitizer)