2016-05-04 12 views
1

numpy(1.81)、scipy(0.17.0)、librosa(0.4.2)でいくつかの大きなマトリックス演算(chroma、cqt、mfcc抽出) Jetson TK 1〜2 GBのRAMと16 GBのスワップファイル。16GBのスワップにもかかわらず、Pythonはメモリエラーを発生します

ご協力いただきありがとうございます。

エラーメッセージ

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 

答えて

1

私はあなたのprocessorが32ビットであるので、それはだと信じて:

ボードオンボード以下のデバイスがあります。 NVIDIA Tegra124(TegraはK1を32ビット)

Pythonの32ビットインストールでは、2ギガバイト使用可能なRAM(デフォルトで32ビットアプリケーションと同様)。それに応じてコードを再調整してみてください。それは長い時間がかかるため

スワップ領域のいかなる量がこれを助けていない、と大規模計算のためのスワップに頼ってますが本当に悪い考えです。スワップは、偶発的なオーバーフローのためのものであり、信頼されることはありません。

3

Jetson TK1は32ビットプロセッサです。 1つのプロセスから4GB以上のRAMにアクセスするのに十分な仮想アドレス空間がありません。

カーネルは16GBのページファイルを利用して、4GBのRAMを複数のプロセスに分けて提供していますが、1つのプロセスに4GBを超えるアドレスは公開されません。これは、別々のプロセスで個別に最大4GBのRAMを使用することができます(Linuxでは、カーネルの設定に応じて2GBまたは3GBの制限があります)。

作業を分割したり、使用可能なアドレススペースの多いプラットフォームを使用する必要があります。

+0

プロセスごとの仮想アドレス空間に関する優れた説明!ありがとうございました! – rafaelvalle

関連する問題