首页 > 后端开发 > Python教程 > 为什么我无法在 Ubuntu 上创建大型 NumPy 数组,以及如何修复内存分配错误?

为什么我无法在 Ubuntu 上创建大型 NumPy 数组,以及如何修复内存分配错误?

Patricia Arquette
发布: 2024-11-27 11:44:09
原创
531 人浏览过

Why Can't I Create Large NumPy Arrays on Ubuntu, and How Can I Fix the Memory Allocation Error?

Numpy 数组创建中的内存分配问题

问题

在 Ubuntu 18 上创建具有“uint8”数据类型的大型 NumPy 数组时,您可能会遇到以下问题:遇到错误:

numpy.core._exceptions.MemoryError: Unable to allocate array with shape and data type uint8
登录后复制

尽管系统有足够的可用内存,但在 MacOS 上没有遇到相同的问题。

解决方案

此问题的根本原因是操作系统的过量使用处理模式。默认情况下,过度使用是禁用的,这意味着内核将拒绝超出可用内存的分配。

要解决此问题:

  1. 通过运行 cat /proc/ 检查当前的过度使用模式sys/vm/overcommit_memory.
  2. 通过运行 echo 1 > 启用积极的过量使用/proc/sys/vm/overcommit_memory(以 root 身份)。

了解过量使用

启用积极过量使用后,即使超出物理内存,系统也允许分配。这是因为内核预计只有一小部分分配的内存会被主动使用。

影响

虽然积极的过量使用可以解决分配问题,但应谨慎使用:

  • 避免对非稀疏数组使用激进的过度使用,因为它可能会导致内存占用
  • 如果您手动写入内存位置,请确保显式触发页面错误来分配物理内存。
  • 请注意,如果分配的内存过多,系统可能会遇到性能下降的情况。积极使用。

示例

启用积极过度使用,以下代码应该工作:

import numpy as np
a = np.zeros((156816, 36, 53806), dtype='uint8')
print(a.nbytes)  # Output: 303755101056
登录后复制

以上是为什么我无法在 Ubuntu 上创建大型 NumPy 数组,以及如何修复内存分配错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板