Как отлаживать умирающее ядро ​​Jupyter Python3?

Я запускаю некоторый код, используя scipy и scikits.learn на ноутбуке Jupyter с использованием ядра Python 3. Во время вычисления ядро ​​перезапускается с диалогом сообщений, в котором говорится, что "Ядро, похоже, умерло, и оно автоматически перезапустится". В stderr лежащего в основе процесса Jupyter регистрируется тот факт, что ядро ​​умирает и перезапускается без какого-либо полезного сообщения. Есть ли способ проверить базовую ошибку? Это может быть segfault, исходящий из некоторого кода на С++, но я могу только догадываться. Я искал любые соответствующие журналы на сервере и не нашел ничего полезного.

Ответ 1

During the computation the kernel is being restarted with a message dialogue saying that "The kernel appears to have died. It will restart automatically.".

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

Можете ли вы опубликовать сообщение об ошибке (может отображаться в форме терминала, где вы используете ноутбук) и фрагмент кода, который вы пытаетесь запустить? Таким образом, мы можем лучше ответить!

Ответ 2

Столкнулся с точно такой же проблемой при чтении почти 5000 изображений в виде массива на ноутбуке с 8 ГБ ОЗУ для проекта машинного обучения. После небольшой математической обработки с разрешением моих изображений, размером соответствующего массива, я понял, что 8 гигабайт оперативной памяти недостаточно для обработки изображений. После многочисленных исследований в сети, которые включали предложения, такие как обновление CUDA, cuDNN, понижение версии TensorFlow (они столкнулись с той же ошибкой при импорте соответствующих модулей/пакетов), обновите numpy до последней версии и обновите версию Intel Math Kernel (команда: "conda install -c intel mkl") (целый день исследований). Решение, которое сработало для меня, состояло в том, чтобы запустить процесс обучения модели в Google colab.

enter image description here

Теперь вернемся к вашему вопросу: Отображаемый диалог: "Ядро, кажется, умерло. Он перезапустится автоматически. сама по себе не является ошибкой. Это больше похоже на "Jupyter Notebook, помогающий самому себе", очищающий все переменные и перезагружающий ядро. Это Jupyter Notebook, посылающий сигнал SOS и получающий помощь от себя, чтобы он не зависал. Что в противном случае приведет к тому, что перезапущенный ноутбук Jupyter не сохранит несохраненные изменения. (Хорошо, это автоматически сохраняет, но не "автоматическая контрольная точка")

Этот "ответ" Jupyter Notebook объясняется просто тем, что достигнута максимальная емкость ОЗУ вашего ноутбука. - Это "основная ошибка" (ответ). Это освободит ресурсы, что позволит вам перезапустить программу. Вспомните, как завис ваш компьютер, когда вы открываете слишком много вкладок Chrome? или запустить программу, которая имеет слишком много значений переменных для хранения (как в моем случае с 5000 изображений)? Это могло быть альтернативным ответом Jupyter Notebook, когда объем оперативной памяти полностью используется. Висячие. Или сбой.

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

Примечание 1. При выполнении того же кода, что и в сценарии .py, ошибки будут более подробными.

Примечание 2: Если вы используете CUDA, помните, что Jupyter Notebook не может освободить ресурсы CUDA, даже когда сеанс завершается. Так что это может быть причиной перезапуска.