Python pkl文件的Python内存错误

2024-09-28 22:31:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用python库进行深度学习和神经网络。我正在运行的计算机有16 gb的1866年拉姆兆赫。一开始我的输入数据文件太大,所以我把它弄小了:

-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,我不知道如何进一步分解。它是一个表示30000x30000浮点数矩阵的ano张量变量。我的问题:

  1. 是否有一种方法可以跨多个pkl文件保存某些内容,即使您不确定如何划分底层数据结构?在
  2. 在我们的实验室服务器(48GB)上运行这个会更好吗?或者这个内存错误与架构无关?在
  3. 我现在拥有的巨大的pkl文件太大而不能使用吗?我希望不是,那是大约8小时的神经网络训练。在
  4. 除了使用任何人都能想到的数据库之外,还有其他解决方案吗?如果可能的话,我强烈希望不要使用数据库,因为我已经不得不将软件转移到许多服务器上,其中许多服务器我没有根用户访问权限,安装其他东西也很痛苦。在

Tags: 文件inpy服务器line神经网络outfilemar
1条回答
网友
1楼 · 发布于 2024-09-28 22:31:59

首先,pkl不能很好地保存二进制数据,而且对内存不友好。在写入磁盘之前,它必须复制ram中的所有数据。所以这是内存使用量的两倍!你可以用numpy.保存以及负荷在没有内存倍增的情况下存储ndarray。在

对于Theano变量,我猜您使用的是Theano共享变量。默认情况下,当您通过get_value()获取它时,它会复制数据。您可以使用get_value(borrow=True)来不复制此内容。在

这两种改变加在一起可以将内存使用量降低3倍。如果这还不够,或者如果你已经厌倦了自己处理多个文件,我建议你使用pytables:http://www.pytables.org/它允许将一个大的数据存储在一个比可用内存更大的文件中,但是它提供了一个类似于ndarray的对象,您可以非常类似于ndarray来操作它。在

相关问题 更多 >