并行计算中如何提高处理效率——来自Dask的提示
当数据量达到一定程度,单机的处理能力会无法达到性能的要求,采用并行计算,并利用多台服务器进行分布式处理可能会提升数据处理的速度,达到性能要求。然而如果使用不当,并行处理可能并不会提升处理的速度。
这篇博客介绍了Dask中关于并行处理的一些效率方面的建议,尽管是针对Dask的说明,但对于所有的并行处理来说都是适用的。
一、让数据停留在集群的节点中
并行计算的场景中,通常数据量都很大,将数据在节点中移动是不合适的,它会花费大量的时间和资源进行数据的移动,因此,将处理的函数或者方法传给每个节点,让节点基于自己的数据进行运算,并将结果返回是一种更加明智的方法。
例如,如果你需要知道一个numpy.array的shape,如下两种方法会带来截然不同的效果:
1、通过本地进程获取数据的shape,例如直接访问数据的shape属性 2、向集群中的每一个节点发送一个lambda表达式,计算各个节点的shape之后返回结果汇总
显然第二种方法要快很多。
代码示例:
首先,我们向集群中提交一个numpy数组,注意这是Dask的代码示例,想了解Dask的童鞋可以参考系列博客。
