我们喜欢Ipython.parallel(现在是ipyparallel)。
但是,有些事情让我感到困惑。当向一堆工作人员发送~1.5GB的pandas数据帧时,如果集群有许多节点,我们会得到一个MemoryError。看起来数据帧的副本与引擎(或某些比例数字)一样多。有没有办法避免这些副本?示例:
In[]: direct_view.push({'xy':xy}, block=True)
# or direct_view['xy'] = xy
对于一个小型集群(例如30个节点),内存会增长并增长,但最终数据会通过并且一切正常。但对于更大的群集,例如80个节点(所有r3.4xlarge只有1个引擎,而不是n_core引擎),然后htop
报告增长内存达到最大值(123GB),我们得到:
---------------------------------------------------------------------------
MemoryError Traceback (most recent call last)
<ipython-input-120-f6a9a69761db> in <module>()
----> 1 get_ipython().run_cell_magic(u'time', u'', u"ipc.direct_view.push({'xy':xy}, block=True)")
/opt/anaconda/lib/python2.7/site-packages/IPython/core/interactiveshell.pyc in run_cell_magic(self, magic_name, line, cell)
2291 magic_arg_s = self.var_expand(line, stack_depth)
2292 with self.builtin_trap:
-> 2293 result = fn(magic_arg_s, cell)
2294 return result
2295
(...)
注意,在查看https://ipyparallel.readthedocs.org/en/latest/details.html之后,我们尝试仅发送基础numpy数组(xy.values
)以尝试进行“非复制发送”,但也获得MemoryError
版本:
ipyparallel.__version__
:4.0.2