3

私たちは 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
4

0 に答える 0