【问题标题】:Memory Error Parallel Python (Large data in parallel)内存错误并行 Python(大数据并行)
【发布时间】:2016-02-10 23:50:51
【问题描述】:

所以我正在从一堆不同的文件中读取大量数据。主要的速度障碍之一是读取数据。问题是这些文件位于其时间步长的相应目录中,其中包含该时间步长的每个变量。所以基本上我有一些看起来像这样的函数。

def ReadFiles(path,points,directories,variables):
   data = {}
   for j in range(len(variables)):
      data[variables[j]] = np.zeros((len(timeDirs),numPts))
      for i in range(len(timeDirs)):
         tfile = str(path) + "/" + str(timeDirs[i])
         for j in range(len(variables)):
            job_server.submit(ReadData,(args,data,i,j),modules=("np",))
def ReadData(args):
   update path for the particular variable
   read in data from file
   data[variables[j]][i] = that data

TLDR 用 numpy 数组将我拥有的变量初始化为 dict。然后在另一个并行化的函数中更新正确的部分。

我正在使用并行 python。我想在某个时候将此代码移动到集群中。我得到的错误是

  File "/home/steven/anaconda2/lib/python2.7/site-packages/pp.py", line 460, in submit
    sargs = pickle.dumps(args, self.__pickle_proto)
MemoryError: out of memory

通过观察我的内存使用情况,我可以看到 RAM 上升,然后交换空间开始填满。一旦两者都满了,我就会得到错误。从一些阅读中,我了解到这些过程中的每一个都被传递了一个新字典,这意味着并行更新不是一种选择。

我会注意到,当我串行运行它时,我不会收到此内存错误。那么有没有一种使用并行存储或将这些数据传回我的字典的好方法?最终数据存储在 hdf5 文件中,但这些文件似乎不想被并行打开和写入。

有什么好的解决办法吗?如何并行处理大数据?

【问题讨论】:

    标签: python dictionary parallel-processing


    【解决方案1】:

    并行读取数据不太可能为您带来任何好处,因为只要您读取数据,一次一个文件或一次读取所有文件,您就会受到 I/O 限制。我会切换它以串行读取数据,但在加载每个文件后启动数据设置(并行,natch)。如果您可以一次性加载整个文件,然后从内存中处理它,您可能会看到您寻求的性能提升,但会以内存为代价。

    如果您正在耗尽内存,那么您需要弄清楚如何在执行过程中写出一些数据,以便删除那些字典条目。

    内存映射文件而不是显式读取文件可能是可行的,然后并行处理可能更有意义,具体取决于数据处理的速度与 I/O 的速度。这将允许您利用操作系统的调度,假设您在加载时处理数据需要足够长的时间。

    【讨论】:

    • 字典一旦创建就转储速度很快。问题在于读取。我正在独立读取每个数据文件。我只想并行阅读这些内容。仅以串行方式读取我的所有数据似乎确实浪费了计算机能力。我将如何做一个内存映射?
    • 另外,正如我的操作中所说,我没有在串行中收到内存错误
    • 如果可以使串行 I/O 饱和,则并行读取不会带来任何速度优势。这就是我建议它的原因。如果您已经在尽可能快地读取尽可能多的数据,那就不会浪费计算机能力。
    • Google 提供了很多帮助,但您可能会在 Python 的 mmap 模块中找到一些有用的东西。
    • 串行运行时,CPU 使用率似乎只有 20-30%。所以我真的不确定如何让它更快,这正是我需要的。虽然我想知道如何正确地跨并行共享数据,以便我以后可以使用它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-21
    • 2017-07-15
    • 2020-08-21
    • 1970-01-01
    相关资源
    最近更新 更多