尽管有16GB的交换,但Python引发了内存错误

时间:2016-05-04 21:50:18

标签: python numpy

我在Jetson TK 1上用numpy(1.81),scipy(0.17.0),librosa(0.4.2)运行一些大矩阵运算(色度,cqt,mfcc提取)时得到MemoryError~~ 2 GB Ram和16GB交换文件。

非常感谢任何帮助!

错误消息

    Traceback (most recent call last):
  File "./analyze_structure.py", line 480, in <module>
    args.cutoff, args.order, args.sr, args.feature, bool(args.as_diff))
  File "./analyze_structure.py", line 452, in plotData
    tracks)
  File "./analyze_structure.py", line 178, in plotStructure
    feat, beat_times = extractChroma(filename, file_ext)
  File "./analyze_structure.py", line 75, in extractChroma
    hop_length=HOP_LENGTH)
  File "/usr/local/lib/python2.7/dist-packages/librosa-0.4.2-py2.7.egg/librosa/feature/spectral.py", line 800, in chroma_stft
    tuning = estimate_tuning(S=S, sr=sr, bins_per_octave=n_chroma)
  File "/usr/local/lib/python2.7/dist-packages/librosa-0.4.2-py2.7.egg/librosa/core/pitch.py", line 82, in estimate_tuning
    pitch, mag = piptrack(y=y, sr=sr, S=S, n_fft=n_fft, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/librosa-0.4.2-py2.7.egg/librosa/core/pitch.py", line 270, in piptrack
    util.localmax(S * (S > (threshold * S.max(axis=0)))))
  File "/usr/local/lib/python2.7/dist-packages/librosa-0.4.2-py2.7.egg/librosa/util/utils.py", line 820, in localmax
    x_pad = np.pad(x, paddings, mode='edge')
  File "/usr/lib/python2.7/dist-packages/numpy/lib/arraypad.py", line 1364, in pad
    newmat = _prepend_edge(newmat, pad_before, axis)
  File "/usr/lib/python2.7/dist-packages/numpy/lib/arraypad.py", line 175, in _prepend_edge
    axis=axis)
MemoryError

2 个答案:

答案 0 :(得分:3)

Jetson TK1是一款32位处理器。它没有足够的虚拟地址空间来从一个进程访问超过4GB的RAM。

内核可以利用您的16GB页面文件为许多单独的进程提供4GB的ram,但是这仍然不会向单个进程暴露超过4GB的地址。它只允许单独的进程单独使用高达4GB的RAM(在Linux上,根据您的内核设置,您很可能会有2GB或3GB的限制)。

您应该将您的工作分成更小的部分,或者使用具有更多可用地址空间的平台。

答案 1 :(得分:1)

我相信那是因为你的processor是32位:

  

该板上有以下设备:   NVIDIA Tegra124(Tegra K1 32位)

在32位安装的Python上,它只有2 GB的可用RAM(默认情况下与任何32位应用程序一样)。尝试相应地重新计算代码。

没有多少交换空间可以帮助这一点,并且依赖交换进行大型计算是一个真的坏主意,因为它需要很长时间。交换意味着意外溢出,而不是依赖。