Closed RICHARDNAN closed 2 weeks ago
paddle支持Ascend npu profiling数据自动解析及合并timeline 使用demo: 1.创建一个网络模型的训练脚本 2.导入接口,from paddle.device.npu import cann_parse_enabled 3.在训练函数 train(model)的训练循环中使用性能分析器 Profiler 来记录性能数据。在训练结束时调用cann_parse_enabled自动解析接口进行解析
import paddle import paddle.profiler as profiler from paddle_custom_device.npu.profile import cann_parse_enabled def train(model): print('start training ... ') # turn into training mode model.train() opt = paddle.optimizer.Adam(learning_rate=learning_rate, parameters=model.parameters()) train_loader = paddle.io.DataLoader(cifar10_train, shuffle=True, batch_size=batch_size, num_workers=1) valid_loader = paddle.io.DataLoader(cifar10_test, batch_size=batch_size) # 创建性能分析器相关的代码 def my_on_trace_ready(prof): # 定义回调函数,性能分析器结束采集数据时会被调用 callback = profiler.export_chrome_tracing('./profiler_demo') # 创建导出性能数据到 profiler_demo 文件夹的回调函数 callback(prof) # 执行该导出函数 p = profiler.Profiler(scheduler = [3,14], on_trace_ready=my_on_trace_ready, timer_only=False, record_shapes=True) # 初始化 Profiler 对象 p.start() # 性能分析器进入第 0 个 step for epoch in range(epoch_num): for batch_id, data in enumerate(train_loader()): x_data = data[0] y_data = paddle.to_tensor(data[1]) y_data = paddle.unsqueeze(y_data, 1) logits = model(x_data) loss = F.cross_entropy(logits, y_data) if batch_id % 1000 == 0: print("epoch: {}, batch_id: {}, loss is: {}".format(epoch, batch_id, loss.numpy())) loss.backward() opt.step() opt.clear_grad() p.step() # 指示性能分析器进入下一个 step if batch_id == 19: p.stop() # 关闭性能分析器 cann_parse_enabled('./profiler_demo') #在此调用自动解析以及合并timeline接口 return
此示例表示在第20个batch结束时,停止性能分析器并调用 cann_parse_enabled 进行数据的自动解析。
输出结果:在./ascend_profiling/PROF_000001_2024xxxxxxxxxx_xxxxxxxx文件夹下生成mindstudio_profiler_output、mindstudio_profiler_log文件夹,以及在mindstudio_profiler_output文件夹下生成paddle框架和Ascend npu合并后的timeline trace_view_yyyy_mm_dd.json
合并后的timeline截图: trace_view_yyyy_mm_dd.json
Thanks for your contribution!
这个建议在npu目录下加一个profile 目录吧
好的,已解决
PR Category
Execute Infrastructure ### PR Types Others ### Descriptionpaddle支持Ascend npu profiling数据自动解析及合并timeline 使用demo: 1.创建一个网络模型的训练脚本 2.导入接口,from paddle.device.npu import cann_parse_enabled 3.在训练函数 train(model)的训练循环中使用性能分析器 Profiler 来记录性能数据。在训练结束时调用cann_parse_enabled自动解析接口进行解析
此示例表示在第20个batch结束时,停止性能分析器并调用 cann_parse_enabled 进行数据的自动解析。
输出结果:在./ascend_profiling/PROF_000001_2024xxxxxxxxxx_xxxxxxxx文件夹下生成mindstudio_profiler_output、mindstudio_profiler_log文件夹,以及在mindstudio_profiler_output文件夹下生成paddle框架和Ascend npu合并后的timeline trace_view_yyyy_mm_dd.json
合并后的timeline截图: trace_view_yyyy_mm_dd.json