Я недавно начал использовать Jupyter Lab, и моя проблема в том, что я работаю с довольно большими наборами данных (обычно сам набор данных составляет приблизительно 1/4 от моей компьютерной памяти). После нескольких преобразований, сохраненных в виде новых объектов Python, у меня заканчивается память. Проблема в том, что когда я приближаюсь к доступному пределу ОЗУ и выполняю любую операцию, для которой требуется другое пространство ОЗУ, мой компьютер зависает, и единственный способ исправить это - перезапустить его. Это поведение по умолчанию в Jupyter Lab / Notebook или это некоторые настройки, которые я должен установить? Обычно я ожидаю сбоя программы (как, например, в RStudio), а не всего компьютера.
12
Ответы:
Абсолютно самым надежным решением этой проблемы было бы использование контейнеров Docker. Вы можете указать, сколько памяти выделить Jupyter, и если у контейнера заканчивается память, это не имеет большого значения (просто не забывайте часто экономить, но это само собой разумеется).
Этот блог поможет вам в этом. Здесь также есть несколько полезных инструкций по настройке Jupyter Lab из одного из свободно доступных, официально поддерживаемых изображений Jupyter:
https://medium.com/fundbox-engineering/overview-d3759e83969c
и затем вы можете изменить
docker run
команду, как описано в руководстве, как (например, для 3 ГБ):Синтаксис параметров памяти докера см. В следующем вопросе:
Какой блок ожидает опция запуска «--memory»?
источник
Если вы используете Ubuntu, проверьте OOM killers, вы можете получить информацию от здесь
Вы можете использовать earlyoom . Его можно настроить по
earlyoom -s 90 -m 15
своему усмотрению, например , запускатьearlyoom
и когда размер подкачки меньше, чем% 90, а память меньше, чем% 15, это убьет процесс, который вызывает OOM, и предотвратит зависание всей системы. Вы также можете настроить приоритет процессов.источник
Я также работаю с очень большими наборами данных (3 ГБ) в Jupyter Lab и испытываю ту же проблему в лабораториях. Неясно, нужно ли вам поддерживать доступ к предварительно преобразованным данным, если нет, я начал использовать
del
неиспользуемые большие переменные данных, если они мне не нужны.del
удаляет переменные из вашей памяти Изменить **: есть несколько возможностей для проблемы, с которой я сталкиваюсь. Я сталкиваюсь с этим чаще, когда использую удаленный экземпляр jupyter, а также в spyder, когда выполняю большие преобразования.например
Джейкс, вы также можете найти эту тему о больших рабочих процессах данных полезной. Я искал в Dask, чтобы помочь с памятью.
В spyder и jupyter я заметил, что зависание обычно происходит при работе в другой консоли, когда работает консоль большой памяти. Что касается того, почему он просто зависает, а не падает, я думаю, это как-то связано с ядром. В IPython github открыто несколько проблем с памятью - # 10082 и # 10117 кажутся наиболее актуальными. Один пользователь здесь предлагает отключить завершение вкладки
jedi
или обновить джедай.В 10117 году они предлагают проверить выход
get_ipython().history_manager.db_log_output
. У меня те же проблемы, и мои настройки правильные, но это стоит проверитьисточник
Вы также можете использовать ноутбуки в облаке, например, Google Colab здесь . Они предоставили возможность для рекомендованных ОЗУ и поддерживают ноутбук Jupyter по умолчанию.
источник
Я думаю, что вы должны использовать куски. Как это:
Для получения дополнительной информации проверьте это: https://towardsdatascience.com/why-and-how-to-use-pandas-with-large-data-9594dda2ea4c
Я предлагаю не добавлять список снова (возможно, ОЗУ снова будет перегружено). Вы должны закончить свою работу в этом для цикла.
источник
Я собираюсь обобщить ответы на следующий вопрос . Вы можете ограничить использование памяти вашей программой. В следующем это будет функция
ram_intense_foo()
. Перед вызовом нужно вызвать функциюlimit_memory(10)
источник
Нет причин просматривать весь вывод большого информационного кадра. Просмотр или манипулирование большими фреймами данных будет излишне использовать большие объемы ресурсов вашего компьютера.
Все, что вы делаете, можно сделать в миниатюре. Работать над кодированием и манипулированием данными намного проще, когда фрейм данных мал. Лучший способ работы с большими данными - это создать новый фрейм данных, который занимает только небольшую часть или небольшую выборку большого фрейма данных. Затем вы можете исследовать данные и выполнить кодирование на меньшем фрейме данных. После того, как вы изучите данные и получите свой код работающим, просто используйте этот код в большом фрейме данных.
Самый простой способ - просто взять первые n, число первых строк во фрейме данных, используя функцию head (). Функция head печатает только n, количество строк. Вы можете создать мини-фрейм данных, используя функцию head для большого фрейма данных. Ниже я выбрал первые 50 строк и передал их значение в small_df. Предполагается, что BigData - это файл данных, полученный из библиотеки, которую вы открыли для этого проекта.
Это будет работать большую часть времени, но иногда большой кадр данных поставляется с предварительно отсортированными переменными или с уже сгруппированными переменными. Если большие данные похожи на эти, вам нужно будет выбрать случайную выборку строк из больших данных. Затем используйте следующий код:
источник