• timeline工具简介
    • 本地使用
    • 分布式使用

    timeline工具简介

    本地使用

    • 在训练的主循环外加上profiler.start_profiler(…)profiler.stop_profiler(…)。运行之后,代码会在/tmp/profile目录下生成一个profile的记录文件。

    提示:请不要在timeline记录信息时运行太多次迭代,因为timeline中的记录数量和迭代次数是成正比的。

    1. import numpy as np
    2. import paddle
    3. import paddle.fluid as fluid
    4. from paddle.fluid import profiler
    5.  
    6. place = fluid.CPUPlace()
    7.  
    8. def reader():
    9. for i in range(100):
    10. yield [np.random.random([4]).astype('float32'), np.random.random([3]).astype('float32')],
    11.  
    12. main_program = fluid.Program()
    13. startup_program = fluid.Program()
    14.  
    15. with fluid.program_guard(main_program, startup_program):
    16. data_1 = fluid.layers.data(name='data_1', shape=[1, 2, 2])
    17. data_2 = fluid.layers.data(name='data_2', shape=[1, 1, 3])
    18. out = fluid.layers.fc(input=[data_1, data_2], size=2)
    19. # ...
    20.  
    21. feeder = fluid.DataFeeder([data_1, data_2], place)
    22. exe = fluid.Executor(place)
    23. exe.run(startup_program)
    24. pass_num = 10
    25.  
    26. for pass_id in range(pass_num):
    27. for batch_id, data in enumerate(reader()):
    28. if pass_id == 0 and batch_id == 5:
    29. profiler.start_profiler("All")
    30. elif pass_id == 0 and batch_id == 10:
    31. profiler.stop_profiler("total", "/tmp/profile")
    32. outs = exe.run(program=main_program,
    33. feed=feeder.feed(data),
    34. fetch_list=[out])
    • 运行python paddle/tools/timeline.py来处理/tmp/profile,这个程序默认会生成一个/tmp/timeline文件,你也可以用命令行参数来修改这个路径,请参考timeline.py。
    1. python Paddle/tools/timeline.py --profile_path=/tmp/profile --timeline_path=timeline
    • 打开chrome浏览器,访问,用load按钮来加载生成的timeline文件。

    chrome tracing

    • 结果如下图所示,可以放到来查看timetime的细节信息。

    chrome timeline

    分布式使用

    一般来说,分布式的训练程序都会有两种程序:pserver和trainer。我们提供了把pserver和trainer的profile日志用timeline来显示的方式。

    • trainer打开方式与本地使用部分的第1步相同

    • pserver可以通过加两个环境变量打开profile,例如:

    1. FLAGS_rpc_server_profile_period=10 FLAGS_rpc_server_profile_path=./tmp/pserver python train.py
    • 把pserver和trainer的profile文件生成一个timeline文件,例如:
    1. python /paddle/tools/timeline.py
    2. --profile_path trainer0=local_profile_10_pass0_0,trainer1=local_profile_10_pass0_1,pserver0=./pserver_0,pserver1=./pserver_1
    3. --timeline_path ./dist.timeline
    • 在chrome中加载dist.timeline文件,方法和本地使用第4步相同。