Python 内核在带有 tensorflow 2 的 Jupyter Notebook 上死机

Posted

技术标签:

【中文标题】Python 内核在带有 tensorflow 2 的 Jupyter Notebook 上死机【英文标题】:Python kernel dies on Jupyter Notebook with tensorflow 2 【发布时间】:2020-04-21 21:20:33 【问题描述】:

我根据these 说明使用 conda 在我的 mac 上安装了 tensorflow 2:

conda create -n tf2 tensorflow

然后我安装了 ipykernel 以将这个新环境添加到我的 jupyter notebook 内核中,如下所示:

conda activate tf2
conda install ipykernel
python -m ipykernel install --user --name=tf2

这似乎运作良好,我可以在我的 jupyter notebook 内核上看到我的 tf2 环境。

然后我尝试运行简单的 MNIST example 来检查是否一切正常,当我执行这行代码时:

model.fit(x_train, y_train, epochs=5)

我的 jupyter notebook 的内核在没有更多信息的情况下死掉了。

我通过 python mnist_test.pyipython(通过命令命令)在我的终端上执行了相同的代码,我没有任何问题,让我们我假设我的 tensorflow 2 已正确安装在我的 conda 环境中。

关于安装过程中出了什么问题有什么想法吗?

版本:

python==3.7.5
tensorboard==2.0.0
tensorflow==2.0.0
tensorflow-estimator==2.0.0
ipykernel==5.1.3
ipython==7.10.2
jupyter==1.0.0
jupyter-client==5.3.4
jupyter-console==5.2.0
jupyter-core==4.6.1

这里我放了完整的脚本以及执行的STDOUT:

import tensorflow as tf
import matplotlib.pyplot as plt
import seaborn as sns

mnist = tf.keras.datasets.mnist

(x_train, y_train), (x_test, y_test) = mnist.load_data()

x_train, x_test = x_train / 255.0, x_test / 255.0

nn_model = tf.keras.models.Sequential([
  tf.keras.layers.Flatten(input_shape=(28, 28)),
  tf.keras.layers.Dense(128, activation='relu'),
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.Dense(10, activation='softmax')
])

nn_model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

nn_model.fit(x_train, y_train, epochs=5)

nn_model.evaluate(x_test,  y_test, verbose=2)

(tf2) ➜ tensorflow2 python mnist_test.py 2020-01-03 10:46:10.854619: 我 tensorflow/core/platform/cpu_feature_guard.cc:145] 这个 TensorFlow 使用 Intel(R) MKL-DNN 优化二进制文件以使用以下 CPU 性能关键操作中的指令:SSE4.1 SSE4.2 AVX AVX2 FMA 要在非 MKL-DNN 操作中启用它们,请重建 TensorFlow 使用适当的编译器标志。 2020-01-03 10:46:10.854860: 我 tensorflow/core/common_runtime/process_util.cc:115] 创建新的 具有默认互操作设置的线程池:8. 调整使用 inter_op_parallelism_threads 以获得最佳性能。训练60000 样本 Epoch 1/5 60000/60000 [===============================] - 6s 102us/样本 - 损失:0.3018 - 准确度:0.9140 Epoch 2/5 60000/60000 [==============================] - 6s 103us/样本 - 损失:0.1437 - 精度:0.9571 Epoch 3/5 60000/60000 [==============================] - 6s 103us/样本 - 损失:0.1054 - 精度:0.9679 纪元 4/5 60000/60000 [==============================] - 6s 103us/样本 - 损失:0.0868 - 精度:0.9729 Epoch 5/5 60000/60000 [===============================] - 6s 103us/样本 - 损失:0.0739 - 精度:0.9772 10000/1 - 1s - 损耗:0.0359 - 精度:0.9782 (tf2) ➜张量流2

【问题讨论】:

你试过检查你的机器有多少内存被使用了吗?可能是因为内存不足而死。 @YOLO 就在调用 nn_model.fit(..) 行之前,它使用了 180MB 的 RAM,然后就死掉了。我的 Mac 有 16GB 的 RAM,所以我不认为它来自那里...... 【参考方案1】:

对我来说,这个问题正在发生,如下图红色箭头附近所示 在 jupyter 中调试后,我意识到当它从 tensorboard 目录流式序列化数据时会发生此问题。现在,如果我更改 model_dir="someothername" 那么我的工作就像魅力一样。

【讨论】:

【参考方案2】:

试试conda install nomkl。即使您遇到问题,检查您的anaconda/lib folder,运行ll lib*omp*,您是否看到一些旧的libiomp5.dylib 文件?删除它。

【讨论】:

【参考方案3】:

尝试不同的东西后,我使用以下命令在调试模式下运行 jupyter notebook:

jupyter notebook --debug

然后在我的笔记本上执行命令后,我收到了错误消息:

OMP: Error #15: Initializing libiomp5.dylib, but found libiomp5.dylib already initialized.
OMP: Hint This means that multiple copies of the OpenMP runtime have been linked into the program. That is dangerous, since it can
degrade performance or cause incorrect results. The best thing to do
is to ensure that only a single OpenMP runtime is linked into the
process, e.g. by avoiding static linking of the OpenMP runtime in any
library. As an unsafe, unsupported, undocumented workaround you can
set the environment variable KMP_DUPLICATE_LIB_OK=TRUE to allow the
program to continue to execute, but that may cause crashes or silently
produce incorrect results. For more information, please see
http://www.intel.com/software/products/support/.

在this 讨论之后,在虚拟环境中安装 nomkl 对我有用。

conda install nomkl

【讨论】:

【参考方案4】:

我无法准确猜出您遇到的问题,但看起来它与某些版本冲突有关。执行以下操作(这就是我所做的并且对我有用):

    conda create -n tf2 python=3.7 ipython ipykernel conda activate tf2 conda install -c anaconda tensorflow python -m ipykernel install --user --name=tf2 再次运行模型,看看它是否正常工作。

【讨论】:

我做到了,但我仍然遇到同样的问题。能够从终端运行,但不能通过 jupyter notebook 你检查了吗:github.com/tensorflow/tensorflow/issues/9829 用实际的 keras 代替 tensorflow:conda install -c conda-forge keras 我没有在那个链接上找到适合我的东西,但我让它的工作方式有所不同。我现在将在答案部分发布步骤。基本上,我在调试模式下运行 jupyter notebook 以获取有关正在发生的事情的更多信息

以上是关于Python 内核在带有 tensorflow 2 的 Jupyter Notebook 上死机的主要内容,如果未能解决你的问题,请参考以下文章

带有 Python 绑定的 Android 上的 Tensorflow?

Tensorflow Numpy不能在ipython笔记本上运行Python2.7和3.5

安装带有 SYCL 支持的 TensorFlow

用于 tensorflow 和 pymysql 的 Sagemaker 内核

在 Tensorflow 中具有相同填充的均匀大小的内核

根据输入形状的计算是不是存在差异? (带有 Tensorflow 的 Python 中的 CNN)