Heim >Backend-Entwicklung >Python-Tutorial >Warum kann ich unter Ubuntu keine großen NumPy-Arrays erstellen und wie kann ich den Speicherzuweisungsfehler beheben?

Warum kann ich unter Ubuntu keine großen NumPy-Arrays erstellen und wie kann ich den Speicherzuweisungsfehler beheben?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-27 11:44:09536Durchsuche

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

Problem bei der Speicherzuweisung bei der Numpy-Array-Erstellung

Problem

Beim Erstellen eines großen NumPy-Arrays mit dem Datentyp „uint8“ unter Ubuntu 18 kann es vorkommen, dass Es tritt der Fehler auf:

numpy.core._exceptions.MemoryError: Unable to allocate array with shape and data type uint8

Dies tritt auf, obwohl auf dem System ausreichend Speicher verfügbar ist und nicht das gleiche Problem auftritt MacOS.

Lösung

Die Hauptursache für dieses Problem ist der Overcommit-Verarbeitungsmodus des Betriebssystems. Standardmäßig ist Overcommit deaktiviert, was bedeutet, dass der Kernel Zuweisungen ablehnt, die den verfügbaren Speicher überschreiten.

Um dieses Problem zu beheben:

  1. Überprüfen Sie den aktuellen Overcommit-Modus, indem Sie cat /proc/ ausführen. sys/vm/overcommit_memory.
  2. Aktivieren Sie aggressives Overcommit, indem Sie echo 1 > ausführen. /proc/sys/vm/overcommit_memory (als Root) Dies liegt daran, dass der Kernel davon ausgeht, dass nur ein Bruchteil des zugewiesenen Speichers aktiv genutzt wird.
Auswirkungen

Aggressives Overcommit kann zwar das Zuordnungsproblem lösen, sollte jedoch mit Vorsicht verwendet werden:

Vermeiden Sie aggressives Overcommit für nicht-sparse Arrays, da dies zu einer Speichererschöpfung führen kann.

Wenn Wenn Sie manuell in Speicherorte schreiben, stellen Sie sicher, dass Seitenfehler explizit ausgelöst werden, um physischen Speicher zuzuweisen.

    Beachten Sie, dass es beim System zu Leistungseinbußen kommen kann, wenn der zugewiesene Speicher aktiv genutzt wird.
  • Beispiel
  • Wenn aggressives Overcommit aktiviert ist, sollte der folgende Code funktionieren:

Das obige ist der detaillierte Inhalt vonWarum kann ich unter Ubuntu keine großen NumPy-Arrays erstellen und wie kann ich den Speicherzuweisungsfehler beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn