私たちは Ipython.parallel (現在は ipyparallel) を気に入っています。
しかし、私を悩ませているものがあります。~1.5GB の pandas データフレームを一連のワーカーに送信すると、クラスターに多くのノードがある場合、MemoryError が発生します。エンジン(または比例した数)と同じ数のデータフレームのコピーがあるようです。これらのコピーを回避する方法はありますか?
例:
In[]: direct_view.push({'xy':xy}, block=True)
# or direct_view['xy'] = xy
小規模なクラスタ (たとえば 30 ノード) の場合、メモリはどんどん大きくなりますが、最終的にはデータが通過し、すべて問題ありません。しかし、例えば 80 ノード (n_core エンジンではなく 1 つのエンジンのみを備えたすべての r3.4xlarge) などの大規模なクラスターの場合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を見た後xy.values
、「非コピー送信」だけでなく get MemoryError
.
バージョン:
- Jupyter ノートブック v.4.0.4
- パイソン 2.7.10
ipyparallel.__version__
: 4.0.2