hrt_model_exec 的profile里面,看起来只显示了模型部分算子。它是依照什么依据决定某个算子是否放在profile.log和csv里?是会显示所有的cpu算子吗?不在这里面的就一定是bpu的?
1. profile.log和profiler.csv是一样的,只是为了查看方便对同一数据的不同展示方式。2.某个算子是否放在profile.log需要根据模型的执行分段情况来看,这个你可以对HBM文件使用hb_model_info -v进行可视化后查看。目前同一段内的BPU算子在 profile.log 中作为忆哥node呈现,CPU算子分开来呈现。
第二条没有看懂呢。 hb_model_info 没显示和profile相关的东西啊,profile不是分析耗时的吗, hb_model_info 没显示耗时啊。我想看这个模型所有节点在cpu还是bpu上,以及它们的耗时。
你不是说想看哪些节点会被放到 profile.log中吗? hb_model_info -v会生成.prototxt文件,你可以拿netron查看,可视出来的节点就是被放到 profile.log 中得到节点。
因为是这样的,这个模型它之前profile里基本只显示了softmax相关的算子,显示softmax耗时很多。然后后来换了一个opset导出的onnx,指定了softmax放bpu,变成了显示Layernorm占耗时很多,总耗时少了一些但还是很久。那我不知道之前那个模型,它是只有softmax占耗时多呢,还是说softmax和layernorm耗时都很多,但它没显示全只显示了softmax。现在这个profile里显示不全,就很迷。
可以这样:1. 先区分算子是在BPU上运行的还是在CPU上运行的,这个通过 profile.log 就可以看,CPU上的算子应该都在 profile.log中了。2. 因为BPU段在 profile.log中是没有展开的,如果你观察到BPU段的耗时比较多,那就去查看你的编译日志目录。下面有个.html的页面,“Layer Details: ” 部分包含了BPU段仅算子的耗时。需要注意的是: 由于layer group的存在,部分算子的执行时间是有重叠的。