ホームページ >バックエンド開発 >Python チュートリアル >Ubuntu で大きな NumPy 配列を作成できないのはなぜですか? メモリ割り当てエラーを修正するにはどうすればよいですか?

Ubuntu で大きな NumPy 配列を作成できないのはなぜですか? メモリ割り当てエラーを修正するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-27 11:44:09520ブラウズ

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。