很多钻研机器学习(深度学习)的朋友其实并不熟悉python语言本身,这就导致写完代码后,无法定位程序“瓶颈”。往往有同学写完训练(预测)模型,但是代码运行时就非常慢,却找不准原因。
David 这里就推荐一款开源性能分析工具:py-spy :
py-spy会监控process_vm_readv系统调用的信息,从而抽样得到一个python进程的函数调用时间统计。把最耗时间的那些函数排在前面。
如上图,即使你的程序已经在运行中,你也可以运行以下命令进行无中断的性能监控与分析:
yy@desktop:~$ py-spy --pid 12345
其中12345是已经在运行中的进程号 。
虽然py-spy是用的外部抽样法收集信息,但已经非常说明问题了(并且时间越长越准) 。无论是读写IO,gpu模型运算,还是图像处理上的瓶颈,定位函数时都能留下线索。
当然py-spy也有它的一些缺点,如果你想监控其他用户的经常,你可能需要root或者sudo权限:
yy@desktop:~$ sudo env "PATH=$PATH" py-spy -p 12345
如果系统调用还是不能很好地监控,可以使用试试下面命令:
yy@desktop:~$ sudo env "PATH=$PATH" py-spy -p 12345 --nonblocking
另外,你还需要使用适当的统计方法(是跟踪单个函数?还是把函数和它的子进程总体统计?),py-spy也提供了这些选项:
与py-spy类似的还有pyflame也是利用类似ptrace的系统调用。但是py-spy同时支持python2和python3.
和传统的用cprofile和time时间模块的“插入代码式”性能统计的方法不同,py-spy和pyflame给我们另外一种选择。同时它也支持热力图的可视化:
参考文献:
- https://stackoverflow.com/questions/582336/how-can-you-profile-a-python-script
- https://stackify.com/how-to-use-python-profilers-learn-the-basics/
- https://github.com/benfred/py-spy
- https://github.com/uber/pyflame
- http://man7.org/linux/man-pages/man2/ptrace.2.html
本文采用署名 – 非商业性使用 – 禁止演绎 3.0 中国大陆许可协议进行许可。著作权属于“David 9的博客”原创,如需转载,请联系微信: david9ml,或邮箱:yanchao727@gmail.com
或直接扫二维码:
David 9
Latest posts by David 9 (see all)
- 修订特征已经变得切实可行, “特征矫正工程”是否会成为潮流? - 27 3 月, 2024
- 量子计算系列#2 : 量子机器学习与量子深度学习补充资料,QML,QeML,QaML - 29 2 月, 2024
- “现象意识”#2:用白盒的视角研究意识和大脑,会是什么景象?微意识,主体感,超心智,意识中层理论 - 16 2 月, 2024