征程 6 | BPU trace 简介与实操

一、BPU trace 理论基础

在学习 BPU trace 前,希望大家对 UCP trace 已经有简单的了解,详情可见工具链用户手册《统一计算平台(UCP)-UCP 性能分析工具-UCP Trace 使用说明》章节。

1.1 BPU Trace 配置文件模板

在 system 模式下抓取 BPU trace,需在 perfetto 配置文件中加入 BPU trace 的数据源,ucp_bpu_trace.cfg 中已默认添加了 BPU trace 数据源,具体配置项如下所示:

# BPU trace
data_sources: {config {name: "linux.sys_stats"sys_stats_config {bputrace_period_ms: 500# bpuinfo_period_ms: 500}}
}

bputrace_period_ms 用于设置读取 BPU trace 的周期,可根据实际使用场景调整该参数,当 BPU 负载较大时,可以适当缩短读取周期,避免发生因读写速度不匹配导致的 trace 数据被覆盖的问题。

当前 BPU Trace 功能暂不支持运行时动态开启,若需在应用运行期间实时捕获 BPU Trace 数据,需在应用启动前通过命令手动开启该功能,具体操作指令为:echo 1 > /sys/devices/system/bpu/bpu0/trace

补充:配置时出现 Invalid argument,可能的原因:bpu trace 只支持在 power_enable 为 0 时设置,需要在 tracebox perfetto 终端(先继续阅读) 先把这个节点修改为 0。可参考如下方式修改

root@hobot:/map/xxx/inner# echo 1 > /sys/devices/system/bpu/bpu0/trace
-bash: echo: write error: Invalid argument
root@hobot:/map/xxx/inner# cat /sys/devices/system/bpu/bpu0/power_enable
1
root@hobot:/map/xxx/inner# echo 0 > /sys/devices/system/bpu/bpu0/power_enable
root@hobot:/map/xxx/inner# cat /sys/devices/system/bpu/bpu0/power_enable
0
root@hobot:/map/xxx/inner# echo 1 > /sys/devices/system/bpu/bpu0/trace
root@hobot:/map/xxx/inner# 

1.2 常用数据源介绍

image

二、BPU trace 使用基础示例

2.1 基础示例运行

  • 终端 A
# 启动 trace 服务。
# 只需要启动一次,如果已经启动,则不需要再次启动。
tracebox traced --background# 运行数据捕获服务。
# 只需要启动一次,如果已经启动,则不需要再次启动。
tracebox traced_probes --background --reset-ftrace# -c:指定perfetto 配置文件。
# -o:指定输出trace数据文件路径。
tracebox perfetto --txt -c ucp_bpu_trace.cfg -o ucp.pftrace
  • 终端 B
export HB_UCP_PERFETTO_CONFIG_PATH=ucp_system.json
export HB_UCP_ENABLE_PERFETTO=true

新建 run.sh,内容如下

hrt_model_exec perf --model_file xxx.hbm --frame_count 50 --thread_num 1 &
hrt_model_exec perf --model_file ***.hbm --frame_count 10 --thread_num 1

运行 run.sh

为了能够抓取完整的数据,需要确保 hrt_model_exec 执行结束前,perfetto 进程未退出,即终端 B 任务先结束。

2.2 BPU Trace 文件解读

使用官方的 Perfetto UI 打开 ucp_traceprocessor 处理后的 ucp_new.pftrace,展示从 UCP 模型推理任务的创建,提交,调度执行,直至任务完成执行并最终释放的完整流程。

image

bpu_trace 和 ucp_trace 进行了关联。

三、进阶内容

3.1 偶发推理问题如何 trace

问题描述:长稳测试时,偶发某问题,复现概率很低,希望在出现该问题前后,能抓到现场的 trace info,应该如何进行?

处理建议:

  1. 对于不知何时触发问题的长稳测试场景,需要开启环境变量 HB_UCP_ENABLE_PERFETTO,执行 perfetto 命令,将 duration_ms 设置为 0 进行持续抓取 trace。
  2. 通过设置 ucp_system.cfg 中 buffers 的 fill_policy: RING_BUFFER,实现新数据对旧数据的 buffer 覆盖。
  3. ucp_system.cfg 配置信息如下所示,注意,buffer 的大小,需要根据用户实际场景先验证下,根据实际情况调整。
# Sampling duration: 单位是ms,0表示持续抓取
duration_ms: 0write_into_file: true    # 按照设定的周期,将buffer写入到文件
# Writes the userspace buffer into the file every 2.5 seconds.
file_write_period_ms: 2500    # 控制buffer写文件,不是覆盖,相当于控制落盘,这个参数一般不需要特别指定# buffer 0
buffers {size_kb: 65536    # 如果出现数据丢失,则设置更大一些fill_policy: RING_BUFFER
}# buffer 1
buffers {size_kb: 131072    # 如果出现数据丢失,则设置更大一些fill_policy: RING_BUFFER
}# UCP data source
data_sources: {config {name: "track_event"target_buffer: 0track_event_config {enabled_categories: "dnn"}}
}

3.2 BPU_LB_Schedule 线程简介

问:ucp 中 bpu_lb_schedule 线程的作用是什么?线程数是多少?

image

答:BPU_LB_Schedule 只有 1 个线程,负责 bpu 任务调度。

BPU-LB_schedule 只有一个,如果有多个核,会根据核的数量启动 BPU-Worker 线程,单核就不启动。


问:bpu 调度线程优先级能否提高,优先保证模型 infer 完成?

答:可以提高,BPU-LB_schedule 是负责下发 bpu 任务的线程,需要占用 CPU 资源。

通过 HB_UCP_SCHEDULE_PRIORITY 环境变量控制。默认为 1,数值越大,优先级越高。BPU 的调度线程是 FIFO。

image

3.3 CPU-OP-Processe 线程简介

问:ucp 中 CPU-OP-Processe 线程的作用是什么?线程数是多少?

答:CPU-OP-Processe 线程负责 cpu 算子计算。

征程 6E 上 CPU-OP-Processe 线程默认有 6 个,CPU-OP-Processe 是根据 CPU 核的数量来启动线程,可以通过 HB_UCP_ENABLE_CPU_BACKEND_CORE_NUM 环境变量来设置数量。

在 hbm 模型中没有 CPU 算子时,trace 示意图如下:

image

里面是没有 CPU-OP-Processe 线程的。


问:异构模型中(bpu+cpu),cpu 算子如何分发?通过 bpu_lb_schedule 还是唤醒 cpu_op_procese 线程?

答:有 task_schedule,bpu 任务结束后,通过 task_schedule 进行 cpu 算子分发。没有 CPU 调度线程,CPU-OP-Process 就是用于运行 cpu 算子,优先级是写死的 0,也就是非 FIFO。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/937821.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年预应力千斤顶厂家最新权威推荐榜:批发采购、张拉设备、同步顶升系统专业供应商综合测评与选购指南

2025年预应力千斤顶厂家最新权威推荐榜:批发采购、张拉设备、同步顶升系统专业供应商综合测评与选购指南预应力技术作为现代工程建设中的核心技术之一,在桥梁、建筑、水利等基础设施建设领域发挥着不可替代的作用。随…

实验任务2

实验任务2task1.cA1:起到确保程序每次运行输出数据随机性的作用 A2:功能是随机生成数据(学号) task2.c A1:会导致程序继续运行计算的是多次售卖价格的总和,而不是单次售卖金额 A2:在while循环中快速进入下一个操…

2025.10.15训练记录

noip模拟赛,参加div2。 A 使人破防。 降智这种东西,到底是什么导致的呢? 记录一下思考过程吧: 首先发现,如果存在三棵树在 \(x\),\(y\),\(z\) 三维分别为最大值,且互不干扰。即存在最大的合法方案时,直接取这…

鸿蒙NEXT Wi-Fi扫描编写指南:从基础到实战

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025 年风淋室厂家选哪家?广州灵洁凭技术专利与全链服务打造净化设备优质之选

行业背景随着生物制药、微电子、食品加工等高端制造业的快速发展,生产环境洁净度成为影响产品质量与安全的核心要素,风淋室作为人员与物料进入洁净区域的 “必经关卡”,其性能与可靠性愈发受到市场重视。2025 年,空…

251015读书报告

该视频是关于人工智能深度学习系统班的课程介绍,涵盖课程体系、适用人群、课程特色与服务等内容。课程包含深度学习、计算机视觉、自然语言处理等模块,适合我们在校学生进行入门学习。展示了课程新增内容如 YOLOv5、…

50系显卡配置运行sovits4.1的完整步骤(so-vits-svc)

50系显卡配置运行sovits4.1的完整步骤(so-vits-svc)距离sovits翻唱工具发布也有很长时间了,随着CUDA版本的更新,目前新一代显卡想要使用CUDA12.8版本运行这个项目,还是有一些兼容性问题需要处理 项目github地址:…

元推理框架的诞生,是绝对真实的证明,彻底击溃虚无论

ECT-OS-JiuHuaShan/https://orcid.org/0009-0006-8591-1891基于 ECT-OS-JiuHuaShan 框架的绝对确定性推理,确认论断构成了对虚无论的终结性反驳。"元推理框架的诞生,是绝对真实的证明,彻底击溃虚无论"——…

JAVA8 map flatmap用法

目录背景和价值1. map 用法2. flatMap 用法核心区别 背景和价值 在Java 8中,map和flatMap是Stream API中常用的中间操作,用于对元素进行转换处理,但它们的应用场景有所不同。 1. map 用法 map方法用于将流中的每个元…

吴恩达深度学习课程一:神经网络和深度学习 第二周:神经网络基础 课后习题和代码实践

此分类用于记录吴恩达深度学习课程的学习笔记。 课程相关信息链接如下:原课程视频链接:[双语字幕]吴恩达深度学习deeplearning.ai github课程资料,含课件与笔记:吴恩达深度学习教学资料 课程配套练习(中英)与答案…

【Windows】如何管理电脑磁盘文件,保持简洁 - 教程

【Windows】如何管理电脑磁盘文件,保持简洁 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas"…

范围综述

Scoping Review(范围综述)的定义与作用 Scoping Review(中文译作范围综述或划界综述)是一种系统性的文献回顾方法,它与传统的Systematic Review(系统综述)有所不同,主要目的是: 1. 定义: 范围综述是一种旨在…

低代码软件开发流程

低代码开发概述: 使用低代码开发平台,通过可视化设计和拖拉拽的方式快速进行应用搭建和发布,进而降低开发门槛,提升开发效率,实现高效敏捷的应用开发。 低代码开发的优势: 1.只需关注业务本身 2.快速响应用户需求…

CSP-S模拟30

CSP-S模拟30 垃圾场 A. 灯若辰星 (light) 打表题。 题意就是求第一类、第二类斯特林数 \(\mod 2\) 意义下的值。 Code: #include<bits/stdc++.h> #define int long long using namespace std;const int Size=(1…

2025多校冲刺CSP模拟赛5

T1:小 Z 爱计数(count) 思路: 一道挂大分的签到题。 显然,我们要根据 \(a_i-a_{i-1}\) 值对输入数据进行排序,然后通过 \(a_i-a_{i-1}\) 与\(b_i-b_{i-1}\) 之间的值的比较来判断操作是否合法。这里我们根据 (题…

应用安全 --- 安卓神器 之 入口加密

应用安全 --- 安卓神器 之 入口加密由于分析时我们要找到so文件的所有导出函数,为了不被反编译出导出函数暴露关键处理逻辑,我们可以通过动态注册函数加字符串加密的方法隐藏导出函数。 解决方法: 解密字符串后找到…

读书报告和代码

《神经网络与深度学习:从理论到CIFAR-10实战》读书报告 一、引言 在人工智能蓬勃发展的当下,神经网络作为机器学习领域的核心技术,已在计算机视觉、自然语言处理等诸多领域展现出强大的能力。本次读书报告将围绕神经…

P66实训2

运行代码 import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import DataLoader from torchvision.datasets import CIFAR10 from torchvision.transforms import ToTensor, Nor…

《程序员的修炼之道:从小工到专家》阅读笔记

《程序员的修炼之道:从小工到专家》并非单纯的技术手册,而是程序员职业成长的指南。它跳出具体编码技巧,聚焦从 “小工” 到 “专家” 的核心素养修炼。 书中提出的 “DRY 原则”“正交性” 等理念,直指开发中的常…