為什麼我無法在 Ubuntu 上建立大型 NumPy 數組,以及如何修復記憶體分配錯誤?

Patricia Arquette
發布: 2024-11-27 11:44:09
原創
517 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板