根据时戳从pytorch trace中获取kernel信息

选定区域

 需要使用https://ui.perfetto.dev/打开trace信息的json文件。

获取选定区域的ts信息

使用代码获取kernel信息

trace_pro.py

python 复制代码
import json

def truncate_trace(input_file, output_csv, start_ts, end_ts, delimiter: str = ","):
    
    with open(input_file, 'r') as f:
        data = json.load(f)

    events = data['traceEvents']
    # 筛选时间范围内的完整事件
    filtered = []
    for e in events:
        if e.get('ph') != 'X':
            continue
        args = e.get('args', {})
        if 'stream' not in args:          # 关键:只留含 stream 字段的事件
            continue
        ts = e.get('ts', None)
        if ts is None :#or not (start_ts <= ts <= end_ts):
            continue
        filtered.append(e)

    # 按时间戳排序
    filtered.sort(key=lambda x: x['ts'])

    # 写入 CSV
    with open(output_csv, 'w', newline='', encoding='utf-8-sig') as f:
        table_name = f"name {delimiter} dur {delimiter} start {delimiter} end {delimiter} "
        f"cat {delimiter} pid {delimiter} tid {delimiter}"
        #f.write(table_name + "\n")
        for e in filtered:
            name = e.get('name', '')
            start = e.get('ts', 0)
            dur = e.get('dur', 0)
            end = start + dur
            cat = e.get('cat', '')
            pid = e.get('pid', '')
            tid = e.get('tid', '')
            row = f"{name} {delimiter} {dur} {delimiter} {start} {delimiter} {end} {delimiter} "
            f"{cat} {delimiter} {pid} {delimiter} {tid} {delimiter}"
            f.write(row + "\n")

    print(f"write rows {len(filtered)}")


def process_new():
    start_ts = 7,766,747,776,000,000
    end_ts =   7,766,747,790,000,000

    input_file = 'in32768_bs128-1790734531.0120337-TP-0-new.trace.json'
    output_csv = 'kernels_new.csv'
    truncate_trace(input_file, output_csv, start_ts, end_ts, delimiter=";")

def process_old():
    start_ts = 6,765,530,310,500,000
    end_ts =   6,765,530,330,000,000

    input_file = 'in32768_bs128-1789733313.8490877-TP-0-old.trace.json'
    output_csv = 'kernels_old.csv'
    truncate_trace(input_file, output_csv, start_ts, end_ts, delimiter=";")

if __name__ == "__main__":
    process_old()
    process_new()

使用excel打开处理后的csv文件

 代码中使用分号(delimiter=";")作为分割符。

 打开excel,数据,从文本/csv。

相关推荐
tellmewhoisi1 天前
深度学习26:PyTorch:参数更新方法(Momentum)
人工智能·pytorch·深度学习
Zack_Liu1 天前
code样例
pytorch·python·深度学习
论文复现现场1 天前
BEVFormer训练需要几张GPU?2张A100 80GB够不够,显存与云GPU成本分析
pytorch·自动驾驶·a100·bevformer
Be for thing2 天前
PyTorch基础|Tensor张量详解,张量创建、数据类型与常用操作
pytorch·学习·1024程序员节
地平线开发者2 天前
QAT 实战:从 PyTorch 模型到 J6E 实板精度与延时验证
pytorch·算法·自动驾驶
tellmewhoisi2 天前
深度学习24:PyTorch:Sequential构建模型
人工智能·pytorch·深度学习
zh路西法2 天前
【深入理解 LSTM】从时间反向传播(BPTT)到长时记忆:门控机制与实验验证
pytorch·python·rnn·gru·lstm·bptt
tellmewhoisi2 天前
深度学习23:PyTorch:搭建神经网络测试(查看参数,模型结构和device设置)
pytorch·深度学习·神经网络
qianbo_insist3 天前
# 在 Qwen3.5-2B 上把 GDN-1 无损换成 GDN-2:一次完整的架构手术实验(负结果)
人工智能·pytorch·python·架构