증상
Ubuntu 18에서 NumPy로 대규모 배열을 할당할 때, 사용자에게 "MemoryError: 모양이 있는 배열을 할당할 수 없습니다" 오류가 발생할 수 있습니다. 이는 시스템 메모리가 충분함에도 불구하고 발생합니다. 특히 macOS에서는 이러한 문제가 발생하지 않습니다.
원인
이 문제는 시스템의 오버 커밋 처리 모드에서 발생합니다. 기본 모드(0)에서는 커널이 물리적 메모리에 비해 너무 과도한 것으로 간주되는 할당 요청을 거부할 수 있습니다.
해결 방법
오류를 해결하려면:
오버커밋 모드를 확인하세요.
$ cat /proc/sys/vm/overcommit_memory
반환되는 경우 0, 2단계로 진행합니다.
루트로 "항상 오버커밋" 모드 활성화:
$ echo 1 > /proc/sys/vm/overcommit_memory
예
uint8 데이터 유형을 사용하는 차원 배열(156816, 36, 53806)의 경우:
import numpy as np # Allocate array with "always overcommit" mode enabled a = np.zeros((156816, 36, 53806), dtype='uint8') print(a.nbytes) # 303755101056 bytes
시스템은 특정 배열 요소가 기록될 때만 메모리를 할당합니다. 이를 통해 희소 배열을 사용할 수 있습니다.
위 내용은 NumPy가 Ubuntu에서 대규모 배열을 할당하지 못하는 이유는 무엇이며 어떻게 해결할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!