VizTracer

VizTracer是个非常简便快捷的Python profiler,无需修改源代码即可对每个函数进行测时,并将结果以火焰图的形式展示。可以支持大型项目(如深度学习训练),同时也支持多线程和多进程的性能剖析。

# install
$ pip install viztracer
# call profiler
# if flags also have args, then should be separated by --
$ viztracer test.py arg1 arg2
# commonly-used arguments
$ viztracer --ignore_frozen --log_multiprocess

# test.py
# @log_sparse
# def foo():
#   ...
$ viztracer --log_sparse test.py

下面是用Viztracer测量DGL的GraphSAGE模型,所得到的结果,可以从图中清晰看到每个函数的耗时。比如从图中可以看出这是两层采样,并且sample_neighborsto_block消耗的时间差不多。通过W和S键可以放大缩小火焰图,A和D则是平移。

更多详细用法可见原作者高天在PyCon 2020上的talk1

参考资料

  1. Python代码理解,从微观到宏观,从功能到性能 - 高天的视频 - 知乎, https://www.zhihu.com/zvideo/1320722362237902848