簡體   English   中英

Python pkl文件的Python內存錯誤

[英]Python Memory Error with Python pkl files

我正在使用python庫進行深度學習和神經網絡。 我運行的計算機具有16 gb的ram @ 1866 MHz。 起初,我的輸入數據文件太大,所以我把它縮小了:

-rw-rw-r-- 1 jt jt 1.8G Mar 20 18:09 covarFile.pkl

原因:

Traceback (most recent call last): File "PYJT2/pp_dbn.py", line 69, in <module> go() File "PYJT2/pp_dbn.py", line 32, in go model = cPickle.load(open(CONTROL_DBN.INPUT, "rb")) MemoryError

由於文件只是numpy數組的numpy數組,我可以將其分解為單獨的文件,並通過加載大量的pickle文件在程序中動態地重新創建較大的文件。

total 5.2G drwxrwxr-x 2 jt jt 4.0K Mar 20 18:15 ./ drwxrwxr-x 4 jt jt 4.0K Mar 20 18:15 ../ -rw-rw-r-- 1 jt jt 351M Mar 20 18:09 outfile-0.pkl -rw-rw-r-- 1 jt jt 351M Mar 20 18:11 outfile-10.pkl -rw-rw-r-- 1 jt jt 351M Mar 20 18:11 outfile-11.pkl -rw-rw-r-- 1 jt jt 351M Mar 20 18:12 outfile-12.pkl -rw-rw-r-- 1 jt jt 351M Mar 20 18:12 outfile-13.pkl -rw-rw-r-- 1 jt jt 351M Mar 20 18:12 outfile-14.pkl -rw-rw-r-- 1 jt jt 2.3M Mar 20 18:12 outfile-15.pkl -rw-rw-r-- 1 jt jt 351M Mar 20 18:09 outfile-1.pkl -rw-rw-r-- 1 jt jt 351M Mar 20 18:09 outfile-2.pkl -rw-rw-r-- 1 jt jt 351M Mar 20 18:10 outfile-3.pkl -rw-rw-r-- 1 jt jt 351M Mar 20 18:10 outfile-4.pkl -rw-rw-r-- 1 jt jt 351M Mar 20 18:10 outfile-5.pkl -rw-rw-r-- 1 jt jt 351M Mar 20 18:10 outfile-6.pkl -rw-rw-r-- 1 jt jt 351M Mar 20 18:11 outfile-7.pkl -rw-rw-r-- 1 jt jt 351M Mar 20 18:11 outfile-8.pkl -rw-rw-r-- 1 jt jt 351M Mar 20 18:11 outfile-9.pkl

而且此解決方案效果很好。 我的問題是 ,現在我有一個令人討厭的文件,該文件導致MemoryError ,我不知道如何進一步分解。 它是theano張量變量,表示30,000x30,000浮點數矩陣。 我的問題:

  1. 是否有一種方法可以在多個pkl文件中保存某些內容,即使您不確定如何划分基礎數據結構也是如此?
  2. 在我們的實驗室服務器(48 GB)上運行此程序會更好嗎? 還是該內存錯誤與體系結構無關?
  3. 我現在擁有的巨大pkl文件太大而無法使用嗎? 我希望不是,那是大約8個小時的神經網絡訓練。
  4. 除了使用任何人都可以想到的數據庫之外,還有其他解決方案嗎? 如果可能的話,我強烈希望不要使用數據庫,因為我已經不得不將軟件轉移到許多服務器上,其中許多我沒有root訪問權限,並且很難安裝其他東西。

首先,pkl不能很好地保存二進制數據,並且對內存不友好。 在寫入磁盤之前,它必須復制ram中的所有數據。 因此,這將使內存使用量翻倍! 您可以使用numpy.save和numpy.load來存儲ndarray而不會使內存增加一倍。

對於Theano變量,我想您正在使用Theano共享變量。 默認情況下,當您通過get_value()獲得它時,它將復制數據。 您可以使用get_value(borrow=True)來不復制它。

這兩個更改一起可以將內存使用量降低3倍。 如果這還不夠,或者您厭倦了自己處理多個文件,我建議您使用pytables: http ://www.pytables.org/它允許將一個大ndarray存儲在比ram大的文件中可用,但是它提供了一個與ndarray類似的對象,您可以像對ndarray一樣進行操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM