Рубрики
Без рубрики

Ошибка памяти Python | Как решить ошибку памяти в Python

Ошибка памяти Python или на непрофессиональном языке-это именно то, что означает, что у вас закончилась память в оперативной памяти для выполнения кода Python.

Автор оригинала: Team Python Pool.

Ошибка памяти Python | Как решить ошибку памяти в Python

Что такое Ошибка памяти?

Ошибка памяти Python или на языке непрофессионалов-это именно то, что означает, что у вас закончилась память в вашей оперативной памяти для выполнения вашего кода.

Когда эта ошибка возникает, это, скорее всего, потому, что вы загрузили все данные в память. Для больших наборов данных вы захотите использовать пакетную обработку . Вместо того чтобы загружать весь набор данных в память, вы должны хранить свои данные на жестком диске и получать к ним доступ пакетами.

Ошибка памяти означает, что ваша программа исчерпала память. Это означает, что ваша программа каким-то образом создает слишком много объектов. В вашем примере вы должны искать части вашего алгоритма, которые могут потреблять много памяти.

Если у операции заканчивается память, это называется ошибкой памяти .

Типы ошибок памяти Python

Неожиданная ошибка памяти в Python

Если вы получаете неожиданную ошибку памяти Python и думаете, что у вас должно быть много доступных ОЗУ, это может быть связано с тем, что вы используете 32-битную установку python .

Простое решение для неожиданной ошибки памяти Python

У вашей программы заканчивается виртуальное адресное пространство. Скорее всего, потому, что вы используете 32-битную версию Python. Поскольку Windows (как и большинство других ОС) ограничивает 32-разрядные приложения до 2 ГБ адресного пространства пользовательского режима.

Мы рекомендуем вам установить 64-битную версию Python (если вы можете, я бы рекомендовал обновить ее до Python 3 по другим причинам); она будет использовать больше памяти, но тогда у нее будет доступ к большему объему памяти (и больше физической оперативной памяти).

Проблема в том, что 32-битный python имеет доступ только к ~4 ГБ оперативной памяти. Это может уменьшиться еще больше, если ваша операционная система 32-разрядная, из-за накладных расходов операционной системы.

Например, в Python 2 функция zip принимает несколько итераций и возвращает один итератор кортежей. Во всяком случае, каждый элемент итератора нужен нам один раз для циклирования. Таким образом, нам не нужно хранить все элементы в памяти на протяжении всего цикла. Поэтому было бы лучше использовать izip, который извлекает каждый элемент только на следующих итерациях. Python 3 zip по умолчанию функционирует как izip.

Должен Читать: Python Print Без Новой Строки

Ошибка памяти Python Из-за набора данных

Как и в случае с 32-битной и 64-битной версиями, другой возможностью может быть размер набора данных, если вы работаете с большим набором данных.Загрузка большого набора данных непосредственно в память и выполнение над ним вычислений и сохранение промежуточных результатов этих вычислений могут быстро заполнить вашу память. Функции генератора очень пригодятся, если это ваша проблема. Многие популярные библиотеки python, такие как Keras и TensorFlow, имеют специальные функции и классы для генераторов.

Ошибка памяти Python Из – за неправильной установки Python

Неправильная установка пакетов Python также может привести к ошибке памяти . На самом деле, прежде чем решить проблему, Мы установили на windows вручную python 2.7 и пакеты, которые мне были нужны, после того, как возились почти два дня, пытаясь выяснить, в чем проблема, Мы переустановили все с помощью Conda , и проблема была решена.

Мы предполагаем, что Honda устанавливает лучшие пакеты управления памятью, и это было главной причиной. Таким образом, вы можете попробовать установить пакеты Python с помощью Conda, это может решить проблему ошибки памяти.

Ошибка нехватки памяти в Python

Большинство платформ возвращают “Out of Memory error”, если попытка выделить блок памяти завершается неудачей, но первопричина этой проблемы очень редко имеет какое-либо отношение к тому, что действительно “out of memory”.” Это происходит потому, что почти в каждой современной операционной системе диспетчер памяти с радостью использует доступное место на жестком диске в качестве места для хранения страниц памяти, которые не помещаются в оперативную память; ваш компьютер обычно может выделять память до тех пор, пока диск не заполнится, и это может привести к ошибке Python Out of Memory(или к превышению лимита подкачки; в Windows см. раздел Свойства системы > Параметры производительности > Дополнительно > Виртуальная память).

Что еще хуже, каждое активное выделение в адресном пространстве программы может вызвать “фрагментацию”, которая может предотвратить будущие выделения, разбивая доступную память на куски, которые по отдельности слишком малы, чтобы удовлетворить новое выделение одним непрерывным блоком.

1 Если 32-битное приложение имеет установленный флаг LARGEADDRESSAWARE, оно имеет доступ к полным 4 гб адресного пространства при работе на 64-битной версии Windows.

2 До сих пор четыре читателя написали, чтобы объяснить, что флаг gcAllowVeryLargeObjects устраняет это ограничение .NET. Это не так. Этот флаг позволяет объектам, которые занимают более 2 Гб памяти, но он не позволяет одномерному массиву содержать более 2^31 записей.

Как я могу явно освободить память в Python?

Если вы написали программу Python, которая действует на большой входной файл, чтобы создать несколько миллионов объектов, представляющих собой, и это занимает тонны памяти, и вам нужен лучший способ сказать Python, что вам больше не нужны некоторые данные, и они могут быть освобождены?

Простой ответ на эту проблему:

Принудительно вызовите сборщик мусора для освобождения несвязанной памяти с помощью gc.collect().

Как показано ниже:

импорт gc

gc.collect()

Ошибка памяти в Python, пул Python
Ошибка памяти в Python, пул Python

Ошибка памяти в Python, когда 50+ГБ свободны и используют 64-битный python?

В некоторых операционных системах существуют ограничения на объем оперативной памяти, который может обрабатывать один процессор. Таким образом, даже если есть достаточно свободной оперативной памяти, ваш единственный поток на одном ядре) не может взять больше. Но я не знаю, действительно ли это для вашей версии Windows.

Как вы устанавливаете использование памяти для программ python?

Python использует сборку мусора и встроенное управление памятью, чтобы гарантировать, что программа использует только столько оперативной памяти, сколько требуется. Поэтому, если вы специально не пишете свою программу таким образом, чтобы увеличить использование памяти, например, создавая базу данных в оперативной памяти, Python использует только то, что ему нужно.

В связи с этим возникает вопрос: почему вы хотите использовать больше оперативной памяти? Идея большинства программистов сводится к минимизации использования ресурсов.

если вы хотите ограничить использование памяти виртуальной машины python, вы можете попробовать следующее:1、Linux, команда ulimit для ограничения использования памяти на python2、вы можете использовать модуль ресурсов для ограничения использования памяти программы; если вы хотите ускорить программу ur, хотя и дать больше памяти приложению ur, вы можете попробовать следующее:1\threading, multiprocessing2\pypy3\pysco только на python 2.5

Как установить ограничения на использование памяти и процессора

Чтобы ограничить использование памяти или процессора запущенной программой. Так что мы не столкнемся с какой-либо ошибкой памяти. Для этого можно использовать модуль ресурсов , и таким образом обе задачи могут быть выполнены очень хорошо, как показано в приведенном ниже коде:

Код #1: Ограничение процессорного времени

# importing libraries 
import signal 
import resource 
import os 

# checking time limit exceed 
def time_exceeded(signo, frame): 
	print("Time's up !") 
	raise SystemExit(1) 

def set_max_runtime(seconds): 
	# setting up the resource limit 
	soft,.getrlimit(resource.RLIMIT_CPU) 
	resource.setrlimit(resource.RLIMIT_CPU, (seconds, hard)) 
	signal.signal(signal.SIGXCPU, time_exceeded) 

# max run time of 15 millisecond 
if __name__: 
	set_max_runtime(15) 
	while True: 
		pass

Код #2: Чтобы ограничить использование памяти, код устанавливает ограничение на общее адресное пространство

# using resource 
import resource 

def limit_memory(maxsize): 
	soft,.getrlimit(resource.RLIMIT_AS) 
	resource.setrlimit(resource.RLIMIT_AS, (maxsize, hard))

Способы обработки ошибок памяти Python и больших файлов данных

1. Выделите Больше Памяти

Некоторые инструменты или библиотеки Python могут быть ограничены конфигурацией памяти по умолчанию.

Проверьте, можете ли вы перенастроить свой инструмент или библиотеку, чтобы выделить больше памяти.

То есть платформа, предназначенная для обработки очень больших наборов данных, которая позволяет использовать преобразования данных и алгоритмы машинного обучения поверх нее.

Хорошим примером является Weka, где вы можете увеличить объем памяти в качестве параметра при запуске приложения.

2. Работа с меньшим образцом

Вы уверены, что вам нужно работать со всеми данными?

Возьмите случайную выборку данных, например первые 1000 или 100 000 строк. Используйте эту меньшую выборку для проработки вашей проблемы, прежде чем подгонять окончательную модель ко всем вашим данным (используя прогрессивные методы загрузки данных).

Я думаю, что это хорошая практика в целом для машинного обучения, чтобы дать вам быструю выборочную проверку алгоритмов и поворот результатов.

Вы также можете рассмотреть возможность проведения анализа чувствительности объема данных, используемых для подгонки одного алгоритма, по сравнению с навыком модели. Возможно, существует естественная точка уменьшения отдачи, которую вы можете использовать в качестве эвристического размера вашей меньшей выборки.

3. Используйте компьютер с большим объемом памяти

Вам обязательно работать на компьютере?

Возможно, вы сможете получить доступ к гораздо большему компьютеру с на порядок большим объемом памяти.

Например, хорошим вариантом является аренда вычислительного времени на облачном сервисе, таком как Amazon Web Services, который предлагает машины с десятками гигабайт оперативной памяти менее чем за доллар США в час.

4. Используйте реляционную базу данных

Реляционные базы данных обеспечивают стандартный способ хранения и доступа к очень большим наборам данных.

Внутренне данные, хранящиеся на диске, могут быть постепенно загружены пакетами и могут быть запрошены с помощью стандартного языка запросов (SQL).

Бесплатные инструменты базы данных с открытым исходным кодом, такие как href=”https://www.mysql.com/”>MySQL или href=”https://www.postgresql.org/”>Postgres можно использовать, и большинство (все?) языков программирования и многие инструменты машинного обучения могут подключаться непосредственно к реляционным базам данных. Вы также можете использовать легкий подход, например href=”https://www.sqlite.org/”>SQLite. href=”https://www.mysql.com/”>MySQL или href=”https://www.postgresql.org/”>Postgres можно использовать, и большинство (все?) языков программирования и многие инструменты машинного обучения могут подключаться непосредственно к реляционным базам данных. Вы также можете использовать легкий подход, например href=”https://www.sqlite.org/”>SQLite. href=”https://www.postgresql.org/”>Postgres можно использовать, и большинство (все?) языков программирования и многие инструменты машинного обучения могут подключаться непосредственно к реляционным базам данных. Вы также можете использовать легкий подход, например href=”https://www.sqlite.org/”>SQLite. href=”https://www.sqlite.org/”>SQLite.

5. Используйте платформу больших данных

В некоторых случаях вам может потребоваться прибегнуть к платформе больших данных.

Резюме

В этом посте вы обнаружили ряд тактик и способов, которые можно использовать при работе с ошибкой памяти Python.

Есть ли другие методы, о которых вы знаете или пробовали?Поделитесь ими в комментариях ниже.

Вы пробовали какой-нибудь из этих методов?Дайте мне знать в комментариях.

Если ваша проблема все еще не решена и вам нужна помощь относительно Python Memory Error. Прокомментируйте ниже, мы постараемся решить вашу проблему как можно скорее.