症状
Ubuntu 18 で NumPy で大きな配列を割り当てる場合、ユーザーは、「MemoryError: Unable to assign array with Shape」エラーが発生する可能性があります。これは、システム メモリが十分であるにもかかわらず発生します。特に、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 中国語 Web サイトの他の関連記事を参照してください。