numpy的调度:当numpy的成为协议的生态系统

介绍

不是有很多人使用Python科学的生态系统合作都知道的NEP 18派遣机构与NumPy的高层阵列功能)。鉴于该协议的重要性,我决定写这篇简短的开场白,新的调度肯定会带来很多的好处对于Python的科学生态系统。

如果您使用PyTorch,TensorFlow,DASK,等等,你肯定注意到了与numpy的他们的API合同的相似性。它由事故不是,numpy的的API是科学计算中最基本也是最广泛使用的API之一。numpy的是如此普遍,它不再是唯一的API,它变得越来越的协议或API规范。

有无数的优点时,所涉及的整个生态系统中采用的API规范。广泛采用的numpy的协议肯定会帮助建立一个标准化的API将提供无缝集成不同实现,即使对于比完全不同的那些ndarray

的主要目标NEP 18,是提供一种被命名方法物化的协议__array_function__,它将使框架,如PyTorch,TensorFlow,DASK等,开发商自己提供的NumPy的API规范的实现。

__array_function__协议仍处于实验阶段,并会在默认情况下在下numpy的v.1.17被启用,但是,在V1.16您可以通过设置所谓的环境变量启用NUMPY_EXPERIMENTAL_ARRAY_FUNCTION1。

PyTorch例子

可以很容易地提供了如何在协议可PyTorch为了得到什么它可以让你做的感觉来实现一个例子。

首先,我们定义,我们将使用猴子补丁PyTorch(协议但你可以改变框架本身,当然,这是整点):

HANDLED_FUNCTIONS = {} DEF __array_function __(个体,FUNC,种类,指定参数时,kwargs):如果不FUNC在HANDLED_FUNCTIONS:返回NotImplemented如果不是全部(issubclass(T,torch.Tensor)在类型T):返回NotImplemented返回HANDLED_FUNCTIONS [FUNC](*指定参数时,** kwargs)

在那之后,我们创建了一个简单的装饰,设置HANDLED_FUNCTIONS字典,PyTorch的实施numpy的API的:

DEF器械(numpy_function):DEF装饰(FUNC):HANDLED_FUNCTIONS [numpy_function] = FUNC返回FUNC返回装饰

后来,我们就必须猴补丁PyTorch(如果你改变PyTorch代码本身并不需要),并提供一个numpy的实施PyTorch操作:

torch.Tensor .__ array_function__ = __array_function__ @implements(np.sum)DEF npsum(ARR,轴= 0):返回torch.sum(ARR,暗淡=轴)

就是这样!现在你可以做这样的事情:

>>> torch_tensor = torch.ones(10)>>>类型(torch_tensor)torch.Tensor >>>导致= np.sum(torch_tensor)>>>结果张量(10)。>>>型(结果)炬。张量

这是相当惊人的,因为你可以很容易地混合在一起的API,写一个单件的代码,将在PyTorch,与NumPy或其他框架的工作多维数组实现的独立扩到正确的后端实现。

DASK例子

DASK已经实现协议,所以你不必猴子补丁吧:

>>>进口numpy的作为NP >>>进口dask.array作为DA >>> dask_array = da.random.random((5000,1000),组块=(1000,1000))>>>类型(dask_array)DASK。array.core.Array >>> U,S,v = np.linalg.svd(dask_array)#NumPy的API!>>>ü

>>>小号

>>> v

正如你所看到的,当我们用从numpy的奇异分解,我们能够定义使用numpy的API的DASK计算图表:

>>> v.visualize()

我们现在可以使用DASK懒EVAL计算结果:

>>>结果= v.compute()>>>结果阵列([[0.03178809,0.03147971,0.0313492,...,0.03201226,0.03142089,0.03180248],[0.00272678,-0.0182263,0.00839066,...,0.01195828,0.01681703,-0.05086809],[-0.00851417,0.0411336,0.02738713,...,0.03447079,0.04614097,0.02292196],...,

你也可以做同样的CuPy为好。

新的调度方案将打开无缝集成门上的Python的科学生态系统框架中。我希望越来越多的框架,将开始采用它在不久的将来。

- 基督教S. Perone

引用本文为:基督教S. Perone,“numpy的调度:当numpy的成为一个生态系统的协议,”在亚洲金博宝未知领域,2019年6月7日,//www.cpetem.com/2019/07/numpy-dispatcher-when-numpy-becomes-a-protocol-for-an-ecosystem/

发表评论

您的电子邮件地址不会被公开。

本网站使用的Akismet,以减少垃圾邮件。了解您的意见如何处理数据