Rumah > pembangunan bahagian belakang > Tutorial Python > Mengapa Saya Tidak Boleh Mencipta Tatasusunan NumPy Besar pada Ubuntu, dan Bagaimana Saya Boleh Membetulkan Ralat Peruntukan Memori?

Mengapa Saya Tidak Boleh Mencipta Tatasusunan NumPy Besar pada Ubuntu, dan Bagaimana Saya Boleh Membetulkan Ralat Peruntukan Memori?

Patricia Arquette
Lepaskan: 2024-11-27 11:44:09
asal
531 orang telah melayarinya

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

Isu Peruntukan Memori dalam Penciptaan Numpy Array

Masalah

Apabila mencipta tatasusunan NumPy yang besar dengan jenis data 'uint8' pada Ubuntu 18, anda boleh menghadapi ralat:

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

Ini berlaku walaupun sistem mempunyai memori yang mencukupi dan tidak mengalami isu yang sama pada MacOS.

Penyelesaian

Punca isu ini ialah mod pengendalian overcommit sistem pengendalian. Secara lalai, overcommit dinyahdayakan, yang bermaksud kernel akan menolak peruntukan yang melebihi memori yang tersedia.

Untuk menyelesaikannya:

  1. Semak mod overcommit semasa dengan menjalankan cat /proc/ sys/vm/overcommit_memory.
  2. Dayakan komitmen berlebihan yang agresif dengan menjalankan echo 1 > /proc/sys/vm/overcommit_memory (sebagai akar).

Memahami Overcommit

Dengan lebih agresif didayakan, sistem membenarkan peruntukan walaupun melebihi memori fizikal. Ini kerana kernel menjangkakan bahawa hanya sebahagian kecil daripada memori yang diperuntukkan akan digunakan secara aktif.

Implikasi

Walaupun terlalu komitmen yang agresif boleh menyelesaikan isu peruntukan, ia harus digunakan dengan berhati-hati:

  • Elakkan menggunakan overcommit yang agresif untuk tatasusunan yang tidak jarang, kerana ia boleh menyebabkan keletihan memori.
  • Jika anda menulis secara manual ke lokasi memori, pastikan ralat halaman dicetuskan secara eksplisit untuk memperuntukkan memori fizikal.
  • Berhati-hati bahawa sistem mungkin mengalami kemerosotan prestasi jika memori yang diperuntukkan digunakan secara aktif.

Contoh

Dengan komit berlebihan agresif didayakan, kod berikut harus berfungsi:

import numpy as np
a = np.zeros((156816, 36, 53806), dtype='uint8')
print(a.nbytes)  # Output: 303755101056
Salin selepas log masuk

Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Mencipta Tatasusunan NumPy Besar pada Ubuntu, dan Bagaimana Saya Boleh Membetulkan Ralat Peruntukan Memori?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan