openvino:https://github.com/openvinotoolkit/openvino
openvino version:[2023.3.0]
问题背景
我们从ubuntu18升级到ubuntu22,发现有一个模型会卡住,在gtest、onenode planner、orion 等不同的环境都会复现,这是一个cpu模型,在做模型推理的时候卡住,用gdb attach到进程中可以看到是这个堆栈,但是这个是没有符号表的。所以看不到有啥问题。

问题无法复现
首先我们编译openvino是在voy-sdk中的,在voy-sdk中会处理tbb的依赖关系,会先编译tbb再编译openvino。
在voy-sdk中的编译参数是:
cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON -DDNNL_GPU_RUNTIME="NONE" -DENABLE_CLDNN=OFF -DENABLE_CPPLINT=OFF -DENABLE_DATA=OFF -DENABLE_INTEL_GNA=OFF -DENABLE_INTEL_GPU=OFF -DENABLE_INTEL_MYRIAD_COMMON=OFF -DENABLE_INTEL_MYRIAD=OFF -DENABLE_NCC_STYLE=OFF -DENABLE_ONEDNN_FOR_GPU=OFF -DENABLE_OPENCV=OFF -DENABLE_PYTHON=OFF -DENABLE_SAMPLES=OFF -DENABLE_TEMPLATE=OFF -DENABLE_TESTS=OFF -DENABLE_OV_PYTORCH_FRONTEND=OFF -DENABLE_OV_TF_FRONTEND=OFF -DENABLE_OV_TF_LITE_FRONTEND=OFF -DENABLE_OV_PADDLE_FRONTEND=OFF -DENABLE_OV_ONNX_FRONTEND=OFF -DTREAT_WARNING_AS_ERROR=OFF -DENABLE_SYSTEM_TBB=ON -DENABLE_INTEL_CPU=ON -DENABLE_JS=OFF ..
可以看到这里是release的编译type,release版本的编译类型会剥离符号信息。
把type改成debug进行编译,发现问题居然神奇的消失了。
同时我们在编译环境中安装完voy-sdk再编译openvino,发现问题也不复现了。
问题进展到这里有点崩溃了。
debug版本可以看到符号表,但是问题复现不了,release可以复现问题,但是看不到具体的堆栈。
hack编译器
在openvino的编译流程中,找了很久没找到在哪里strip的。
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON 编译选项,查看获得的compile_command.json 可以看到每个文件的编译命令,发现其中有个 "-s",这个 -s编译选项会传递给链接器,在链接过程就干脆不生成符号表,这样也不会调用到strip,所以hack strip命令的方式没啥用。
最终deepseek给我的解决方案是:
hack /usr/bin/c++ 命令,把这个命令改成自己的bash脚本,在其中过滤-s参数arg:

通过hack编译器的方式,成功在release编译模式下获得了符号表,后面又加上了-g选项(debug_info)
问题根源
也能够成功复现问题:

找到这个堆栈对于的代码:

这里divisor_0 是一个很大的数,同时divisor_1 == 0,无法break,在for循环中一直递减,所以是在这里死循环了。

进一步分析,这个变量为什么会这样,有点像内存没初始化。
调用栈
顺着函数调用栈往前找:
Transformations::MainSnippets
snippetsManager.run_passes(model);
snippets::pass::TokenizeMHASnippets lambda
is_unsupported_parallel_work_amount(lambda)
ov::snippets::pass::SplitDimensionM::can_be_optimized
ov::snippets::pass::SplitDimensionM::split
ov::snippets::pass::SplitDimensionM::get_splited_dimensions
涉及的变量 tokenization_config.concurre

最低0.47元/天 解锁文章
5018

被折叠的 条评论
为什么被折叠?



