一、BPU trace 理論基礎(chǔ)
在學(xué)習(xí) BPU trace 前,希望大家對(duì) UCP trace 已經(jīng)有簡(jiǎn)單的了解,詳情可見(jiàn)工具鏈用戶手冊(cè)《統(tǒng)一計(jì)算平臺(tái)(UCP)-UCP 性能分析工具-UCP Trace 使用說(shuō)明》章節(jié)。
1.1 BPU Trace 配置文件模板
在 system 模式下抓取 BPU trace,需在 perfetto 配置文件中加入 BPU trace 的數(shù)據(jù)源,ucp_bpu_trace.cfg 中已默認(rèn)添加了 BPU trace 數(shù)據(jù)源,具體配置項(xiàng)如下所示:
# BPU trace
data_sources: {
config {
name: "linux.sys_stats"
sys_stats_config {
bputrace_period_ms: 500
# bpuinfo_period_ms: 500
}
}
}bputrace_period_ms 用于設(shè)置讀取 BPU trace 的周期,可根據(jù)實(shí)際使用場(chǎng)景調(diào)整該參數(shù),當(dāng) BPU 負(fù)載較大時(shí),可以適當(dāng)縮短讀取周期,避免發(fā)生因讀寫(xiě)速度不匹配導(dǎo)致的 trace 數(shù)據(jù)被覆蓋的問(wèn)題。
當(dāng)前 BPU Trace 功能暫不支持運(yùn)行時(shí)動(dòng)態(tài)開(kāi)啟,若需在應(yīng)用運(yùn)行期間實(shí)時(shí)捕獲 BPU Trace 數(shù)據(jù),需在應(yīng)用啟動(dòng)前通過(guò)命令手動(dòng)開(kāi)啟該功能,具體操作指令為:echo 1 > /sys/devices/system/bpu/bpu0/trace
補(bǔ)充:配置時(shí)出現(xiàn) Invalid argument,可能的原因:bpu trace 只支持在 power_enable 為 0 時(shí)設(shè)置,需要在 tracebox perfetto 終端(先繼續(xù)閱讀) 先把這個(gè)節(jié)點(diǎn)修改為 0??蓞⒖既缦路绞叫薷?/p>
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 常用數(shù)據(jù)源介紹
二、BPU trace 使用基礎(chǔ)示例
2.1 基礎(chǔ)示例運(yùn)行
# 啟動(dòng) trace 服務(wù)。
# 只需要啟動(dòng)一次,如果已經(jīng)啟動(dòng),則不需要再次啟動(dòng)。
tracebox traced --background
# 運(yùn)行數(shù)據(jù)捕獲服務(wù)。
# 只需要啟動(dòng)一次,如果已經(jīng)啟動(dòng),則不需要再次啟動(dòng)。
tracebox traced_probes --background --reset-ftrace
# -c:指定perfetto 配置文件。
# -o:指定輸出trace數(shù)據(jù)文件路徑。
tracebox perfetto --txt -c ucp_bpu_trace.cfg -o ucp.pftrace
export HB_UCP_PERFETTO_CONFIG_PATH=ucp_system.json
export HB_UCP_ENABLE_PERFETTO=true
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
為了能夠抓取完整的數(shù)據(jù),需要確保 hrt_model_exec 執(zhí)行結(jié)束前,perfetto 進(jìn)程未退出,即終端 B 任務(wù)先結(jié)束。
2.2 BPU Trace 文件解讀
使用官方的 Perfetto UI 打開(kāi) ucp_traceprocessor 處理后的 ucp_new.pftrace,展示從 UCP 模型推理任務(wù)的創(chuàng)建,提交,調(diào)度執(zhí)行,直至任務(wù)完成執(zhí)行并最終釋放的完整流程。
bpu_trace 和 ucp_trace 進(jìn)行了關(guān)聯(lián)。
三、進(jìn)階內(nèi)容
3.1 偶發(fā)推理問(wèn)題如何 trace
問(wèn)題描述:長(zhǎng)穩(wěn)測(cè)試時(shí),偶發(fā)某問(wèn)題,復(fù)現(xiàn)概率很低,希望在出現(xiàn)該問(wèn)題前后,能抓到現(xiàn)場(chǎng)的 trace info,應(yīng)該如何進(jìn)行?
對(duì)于不知何時(shí)觸發(fā)問(wèn)題的長(zhǎng)穩(wěn)測(cè)試場(chǎng)景,需要開(kāi)啟環(huán)境變量 HB_UCP_ENABLE_PERFETTO,執(zhí)行 perfetto 命令,將 duration_ms 設(shè)置為 0 進(jìn)行持續(xù)抓取 trace。
通過(guò)設(shè)置 ucp_system.cfg 中 buffers 的 fill_policy: RING_BUFFER,實(shí)現(xiàn)新數(shù)據(jù)對(duì)舊數(shù)據(jù)的 buffer 覆蓋。
ucp_system.cfg 配置信息如下所示,注意,buffer 的大小,需要根據(jù)用戶實(shí)際場(chǎng)景先驗(yàn)證下,根據(jù)實(shí)際情況調(diào)整。
# Sampling duration: 單位是ms,0表示持續(xù)抓取
duration_ms: 0
write_into_file: true # 按照設(shè)定的周期,將buffer寫(xiě)入到文件
# Writes the userspace buffer into the file every 2.5 seconds.
file_write_period_ms: 2500 # 控制buffer寫(xiě)文件,不是覆蓋,相當(dāng)于控制落盤(pán),這個(gè)參數(shù)一般不需要特別指定
# buffer 0
buffers {
size_kb: 65536 # 如果出現(xiàn)數(shù)據(jù)丟失,則設(shè)置更大一些
fill_policy: RING_BUFFER
}
# buffer 1
buffers {
size_kb: 131072 # 如果出現(xiàn)數(shù)據(jù)丟失,則設(shè)置更大一些
fill_policy: RING_BUFFER
}
# UCP data source
data_sources: {
config {
name: "track_event"
target_buffer: 0
track_event_config {
enabled_categories: "dnn"
}
}
}3.2 BPU_LB_Schedule 線程簡(jiǎn)介
問(wèn):ucp 中 bpu_lb_schedule 線程的作用是什么?線程數(shù)是多少?
答:BPU_LB_Schedule 只有 1 個(gè)線程,負(fù)責(zé) bpu 任務(wù)調(diào)度。
BPU-LB_schedule 只有一個(gè),如果有多個(gè)核,會(huì)根據(jù)核的數(shù)量啟動(dòng) BPU-Worker 線程,單核就不啟動(dòng)。
問(wèn):bpu 調(diào)度線程優(yōu)先級(jí)能否提高,優(yōu)先保證模型 infer 完成?
答:可以提高,BPU-LB_schedule 是負(fù)責(zé)下發(fā) bpu 任務(wù)的線程,需要占用 CPU 資源。
通過(guò) HB_UCP_SCHEDULE_PRIORITY 環(huán)境變量控制。默認(rèn)為 1,數(shù)值越大,優(yōu)先級(jí)越高。BPU 的調(diào)度線程是 FIFO。
3.3 CPU-OP-Processe 線程簡(jiǎn)介
問(wèn):ucp 中 CPU-OP-Processe 線程的作用是什么?線程數(shù)是多少?
答:CPU-OP-Processe 線程負(fù)責(zé) cpu 算子計(jì)算。
征程 6E 上 CPU-OP-Processe 線程默認(rèn)有 6 個(gè),CPU-OP-Processe 是根據(jù) CPU 核的數(shù)量來(lái)啟動(dòng)線程,可以通過(guò) HB_UCP_ENABLE_CPU_BACKEND_CORE_NUM 環(huán)境變量來(lái)設(shè)置數(shù)量。
在 hbm 模型中沒(méi)有 CPU 算子時(shí),trace 示意圖如下:
里面是沒(méi)有 CPU-OP-Processe 線程的。
問(wèn):異構(gòu)模型中(bpu+cpu),cpu 算子如何分發(fā)?通過(guò) bpu_lb_schedule 還是喚醒 cpu_op_procese 線程?
答:有 task_schedule,bpu 任務(wù)結(jié)束后,通過(guò) task_schedule 進(jìn)行 cpu 算子分發(fā)。沒(méi)有 CPU 調(diào)度線程,CPU-OP-Process 就是用于運(yùn)行 cpu 算子,優(yōu)先級(jí)是寫(xiě)死的 0,也就是非 FIFO。
*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。