根据时戳从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。

相关推荐
承渊政道5 小时前
【从零开始大模型开发与微调:基于PyTorch与ChatGLM】(开源大模型ChatGLM使用详解)
人工智能·pytorch·开源·llm·chatglm
129Lab1 天前
电池热管理仿真的AI加速:用Python+PINN物理信息神经网络替代传统CFD的可行性探索
pytorch·python·cfd·pinn·物理信息神经网络·仿真加速·电池热管理
Είναι η κοπέλα1 天前
llama.cpp 与 GGUF 格式:本地大模型的“裸引擎“
开发语言·人工智能·pytorch·python·conda
头发够用的程序员1 天前
TensorRT 自定义算子插件实战(三):手搓 2×2 最大池化 customMaxpool
人工智能·pytorch·python·深度学习·神经网络·边缘计算·jetson
for_ever_love__2 天前
PyTorch 张量与 autograd——自动求导怎么工作
pytorch·python·深度学习·自动求导
Είναι η κοπέλα3 天前
显存计算与模型选择:你的显卡能跑多大的模型
人工智能·pytorch·python·开源·conda
海天一色y4 天前
模型部署的「通用语」:ONNX 转换
pytorch·onnx
Thomas.Sir4 天前
第26课:工业零部件外观缺陷检测系统:从学术Demo到产线工程的重构实战
pytorch·ai
Zguigo5 天前
【CUDA6】CUDA Stream 是什么,为什么 CUDA 是异步执行,如何正确测量 GPU 时间以及多个任务如何重叠执行
人工智能·pytorch·深度学习