【问题标题】:Numpy memory error with 1GB matrix, 64bit Python and load of RAM1GB 矩阵、64 位 Python 和 RAM 负载的 Numpy 内存错误
【发布时间】:2020-09-13 05:10:03
【问题描述】:

[注意:虽然已经有一些关于在 numpy 中处理大型矩阵的帖子,但它们并没有解决我的具体问题。]

我正在尝试使用numpy.loadtxt() 加载存储在大小为 1.02G 的 .txt 文件中的 30820x12801 矩阵。我收到了Memory error

这并不奇怪,除了:

  1. 我使用的是 64 位 Python。
  2. 我正在为它分配 50G 虚拟内存的超级计算机中运行该作业。

据我所知,1G 矩阵对于 64 位 Python 来说应该不是问题,当然对于 50G 的 RAM 来说也不应该是问题。

(这是我第一次处理大型数据集,所以我可能会遗漏一些基本的东西)。


额外信息:

  • 使用 open() 时,文件加载到 Python 中没有任何问题。
  • ulimit -a | grep "max memory size 的输出:'(kbytes, -m) 无限制'
  • 完整的错误信息:

    Traceback (most recent call last):
      File "jPCA/jPCA_pipeline.py", line 87, in <module>
        MATRIX = get_matrix(new_file_prefix, N)
      File "jPCA/jPCA_pipeline.py", line 70, in get_matrix
        MATRIX = np.loadtxt('{}_N={}.txt'.format(new_file_prefix, N))
      File "/home/hers_en/fsimoes/miniconda3/lib/python3.7/site-packages/numpy/lib/npyio.py", line 1159, in loadtxt
        for x in read_data(_loadtxt_chunksize):
      File "/home/hers_en/fsimoes/miniconda3/lib/python3.7/site-packages/numpy/lib/npyio.py", line 1087, in read_data
        items = [conv(val) for (conv, val) in zip(converters, vals)]
      File "/home/hers_en/fsimoes/miniconda3/lib/python3.7/site-packages/numpy/lib/npyio.py", line 1087, in <listcomp>
        items = [conv(val) for (conv, val) in zip(converters, vals)]
    MemoryError

【问题讨论】:

  • 不使用 Numpy 时是否可以将文件加载到内存中?
  • 文本文件是什么格式的?您将其加载为什么 dtype?你能分享一下实际的错误信息吗?
  • 你能粘贴ulimit -a | grep "max memory size"的输出吗?
  • @AdomasBaliuka 请查看我添加的额外信息。
  • 还有@AdomasBaliuka

标签: python numpy large-data


【解决方案1】:

事实证明,使用 50G 的虚拟内存就足够了:原来我的工作之前只使用了 10G(毕竟不是 200G - 我在提交工作时遇到了一些问题)。我解决了这个问题后,50G就够了,但还是需要运行大约6个小时。

这对我来说仍然令人惊讶,因为我认为 10G 足以导入 1G 矩阵,但从 cmets 来看,这与 loadtxt 的工作方式有关。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-10
    • 2018-04-29
    • 2011-02-20
    • 2019-01-31
    • 1970-01-01
    • 2013-10-05
    • 2010-12-14
    • 1970-01-01
    相关资源
    最近更新 更多