今天用Pycharm跑代码的时候报了个错误:Unable to allocate 14.1 GiB for an array with shape (xxxx, xxxx),主要是进行矩阵运算时涉及的矩阵太大了,导致分配的内存不够用,网上搜索了一些方法,最后成功解决。

 

由于是用实验室服务器跑的代码,首先是确定服务器上的内存确实够用,使用命令free查看内存分配情况:

可以看出,未使用的内存明显绰绰有余,于是先考虑是IDE限制了内存申请大小,遂根据此博客修改了Pycharm运行时动态内存申请最大值到20G,然而依旧会报同样的error。

随后考虑可能是服务器的操作系统限制了进程申请内存的大小,于是继续查阅相关资料发现需要修改/proc/sys/vm/overcommit_memory文件,参考该博客,然而操作一通被告知即使用sudo命令也提示权限不足,于是改用编辑/etc/sysctl.conf的方法,将overcommit_memory的值从2修改为1,再sudo sysctl -p使之生效,最后成功解决。

最终代码运行时的内存分配情况如下:

可见差一丢丢就要超内存了。用这种方法会导致内存申请不受限制,会造成进程被强行kill的下场,所以使用完后记得把overcommit_memory参数改回去,也不要在内存紧巴巴的时候用,免得所有人的代码一起崩掉。。。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐