如何查找python程序的性能瓶颈?

python程序应用领域很广,mxnet, tensorflow, keras, pytorch等深度学习框架,都有基于python的接口和架构,当在训练或者inference的时候,如何确定程序中的热点,查找性能瓶颈并改进呢?

像mxnet, tensorflow都有自己的profiler, 但更多的是定位model或graph热点的,利用cProfile,我们可以定义general的热点,类似c++的valgrand.

运行:

python -m cProfile -s cumtime -o profile.status train.py

其中:

-m cProfile: 进行热点分析的选项

-o profile.status: 输出的分析日志文件名,二进制格式

-s cumtime: 指按照消耗时间进行排序

在程序完成后,运行:

python -c "import pstats; p=pstats.Stats('profile.status'); p.print_stats()"

则可显示具体的热点:

Tue Jun 18 18:33:44 2019    profile.status

         15474520 function calls (15254225 primitive calls) in 693.087 seconds

   Ordered by: internal time

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
      295  639.467    2.168  639.467    2.168 {_pywrap_tensorflow_internal.TF_SessionRun_wrapper}
        1    7.496    7.496    7.496    7.496 {_pywrap_tensorflow_internal.TF_NewSessionRef}
        1    4.878    4.878    4.878    4.878 {_pywrap_tensorflow_internal.TF_CloseSession}
      295    2.787    0.009    2.787    0.009 {_pywrap_tensorflow_internal.ExtendSession}
    33897    2.534    0.000    2.534    0.000 {method 'SerializeToString' of 'google.protobuf.pyext._message.CMessage' objects}
        3    1.944    0.648    1.944    0.648 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

seasermy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值