【工具】亲测Py-Spy:无中断python性能监控分析器,pyspy, Pyflame, ptrace

很多钻研机器学习(深度学习)的朋友其实并不熟悉python语言本身,这就导致写完代码后,无法定位程序“瓶颈”。往往有同学写完训练(预测)模型,但是代码运行时就非常慢,却找不准原因。

David 这里就推荐一款开源性能分析工具:py-spy

来自:https://github.com/benfred/py-spy

py-spy会监控process_vm_readv系统调用的信息,从而抽样得到一个python进程的函数调用时间统计。把最耗时间的那些函数排在前面。

如上图,即使你的程序已经在运行中,你也可以运行以下命令进行无中断的性能监控与分析:

yy@desktop:~$  py-spy --pid 12345

其中12345是已经在运行中的进程号 。

继续阅读【工具】亲测Py-Spy:无中断python性能监控分析器,pyspy, Pyflame, ptrace

高阶Numpy扩展库与API盘点:在ndarray上直接进行多核分布式、GPU利用、稀疏处理和自动求导,那些你不知道的ndarray扩展操作

软件演进和生物进化一样,没人可以预测下一步走向哪里,我们只知道,它需要人类的脑力和贪婪去喂养 — David 9

谁也没有想到30年前Guido写的Python因为通俗易用、丰富的联网支持,变为现在数据科学家最喜爱的工具语言之一。甚至小小的代数计算库Numpy会涌现如此多的扩展库和矛盾。

有人认为,长颈鹿之所以进化时如此过度关注脖子长度(其实适当高度就足够了),只是因为母长颈鹿认为雄长颈鹿脖子越长越有性魅力(种内竞争)

软件进化也类似,人类社区中那些勤劳的开发者努力让Numpy支持各种场景(多核分布式、GPU利用、稀疏处理和Autograd ),解决各种矛盾(ndarray不兼容,numpy插件系统不到位)。但是,他们的汗水都是基于Python这个“种族”进化的,种内竞争激烈不一定能保证软件的发展方向好 。。。

扯远了。。今天还是想盘点高阶Numpy扩展库与API ,毕竟许多人不满足于基础的numpy代数计算。比如下面这些场景(重写库)

  • CuPy: 实现Numpy有的API ,保证所有计算可以在CUDA GPU上加速
  • Sparse: 对于稀疏的ndarray(许多元素是0的情况), 重写实现Numpy的API(更高效)
  • Dask array: 对于多核或者多机器的工作站,为了可以分布式或者多核,又重写Numpy API ,所以有了这个库

最简单的例子大概是这样的:

import numpy as np
x = np.random.random((2,3))  # 在一个cpu上跑 
y = x.T.dot(np.log(x) + 1)
z = y - y.mean(axis=0)
print(z[:5])

import cupy as cp
x = cp.random.random((2,3))  # 在GPU上跑
y = x.T.dot(cp.log(x) + 1)
z = y - y.mean()
print(z[:5].get())

import dask.array as da
x = da.random.random((2,3))  # 在许多cpu上跑
y = x.T.dot(da.log(x) + 1)
z = y - y.mean(axis=0)
print(z[:5].compute())

默默妈卖批,这帮人就不知道合作一下合成一个库吗? 继续阅读高阶Numpy扩展库与API盘点:在ndarray上直接进行多核分布式、GPU利用、稀疏处理和自动求导,那些你不知道的ndarray扩展操作

#PyCon2018两款最新ML数据可视化库:Altair和Yellowbrick,函数式编程的可视化库和scikit-learn增强可视化库

数据科学的可视化库和深度学习框架库一样,虽然层出不穷,但是大致分为两种:

一种是通用可视化库任何类似json schema的静态数据都可以用它作图如:  PandasSeaborn , ggplotBokehpygalPlotly 。

另一种是和框架耦合较高的可视化库,如TensorFlow的TensorBoard,scikit-learn增强可视化库Yellowbrick

对于第一种通用库,方便简洁、易用的趋势一直没有改变。这届PyCon2018上的talk:Exploratory Data Visualization with Vega, Vega-Lite, and Altair 就介绍了Altair这种新的函数式编程可视化库,其简洁程度,只要拿到panda的dataframe数据,多加一句声明代码,就可以进行可视化了:

import altair as alt

# to use with Jupyter notebook (not JupyterLab) run the following
# alt.renderers.enable('notebook')

# load a simple dataset as a pandas DataFrame
from vega_datasets import data
cars = data.cars()

# 这里是声明代码,是不是有函数式编程的味道 ?
alt.Chart(cars).mark_point().encode(
    x='Horsepower',
    y='Miles_per_Gallon',
    color='Origin',
)

Altair例程

如果要把点的样式改成线的样式,只需把函数mark_point()改成mark_line()即可,如下代码:

加入David9的星球群阅读所有文章:

alt.Chart(cars).mark_line().encode(
    x='Horsepower',
    y='Miles_per_Gallon',
    color='Origin',
)

继续阅读#PyCon2018两款最新ML数据可视化库:Altair和Yellowbrick,函数式编程的可视化库和scikit-learn增强可视化库