Casual Developers Note

エンジニアやデザイナー向けの技術情報・英語学習情報・海外留学情報・海外旅行情報を提供中。世界を旅して人生を楽しもう。

  • ホーム
  • 技術 Tips & Tutorials
  • 技術塾
  • ライフハック
  • 海外留学
  • 英語学習
  • コラム
  • お問い合わせ
現在の場所:ホーム / 技術 Tips & Tutorials / Jupyter Notebookで「The kernel appears to have died. It will restart automatically.」というエラーが出た場合の原因と対処法

2018年6月25日 By KD コメントを書く

Jupyter Notebookで「The kernel appears to have died. It will restart automatically.」というエラーが出た場合の原因と対処法

Jupyter Notebookで「The kernel appears to have died. It will restart automatically.」というエラーが出た場合の原因と対処法

Jupyter Notebookはディープラーニングなどのデータサイエンスのプラグラムを検証する素晴らしいツールです。しかし、実行時にたまに「The kernel appears to have died. It will restart automatically.」というエラーが出ます。今回はその原因と対処法を紹介します。

見出し

  • 1 はじめに
  • 2 原因
    • 2.1 エラーの出た環境
    • 2.2 MNISTのソースコード
    • 2.3 原因の調査
    • 2.4 結論
  • 3 対処法
    • 3.1 Dockerコンテナのメモリを増やす対処法
  • 4 最後に
    • 4.1 関連記事

はじめに

Tensorflowの初歩的なプログラミングとしてDeep MNIST for Expertsというものがあります。Tensorflowでディープラーニングを始める人はまずこのプログラムを書くのが慣例になっていますが、Jupyter Notebookで実行した場合、私のPCでは以下のエラーが出てしまいます。

Jupyter notebook error

今回はこの「The kernel appears to have died. It will restart automatically.」というエラーの原因と対処法を紹介します。

原因

エラーの出た環境

エラーは環境に依存します。今回使ったPCのスペックは以下です。

Spec

このPC上で、以前紹介した「データサイエンスのためのAnaconda環境構築とTensorflowのインストール方法(Docker編)」を使って、Jupyter Notebookをコンテナとして実行しています。メモリは16Gなので、Dockerはサクサク動いています。

MNISTのソースコード

今回実行したMNISTのソースコードは以下です。

from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("MNIST_data", one_hot=True)

import tensorflow as tf
sess = tf.InteractiveSession()

x = tf.placeholder(tf.float32, shape=[None, 784])
y_ = tf.placeholder(tf.float32, shape=[None, 10])

W = tf.Variable(tf.zeros([784,10]))
b = tf.Variable(tf.zeros([10]))

def weight_variable(shape):
    initial = tf.truncated_normal(shape, stddev=0.1)
    return tf.Variable(initial)

def bias_variable(shape):
    initial = tf.constant(0.1, shape=shape)
    return tf.Variable(initial)

def conv2d(x, W):
    return tf.nn.conv2d(x, W, strides=[1,1,1,1], padding='SAME')

def max_pool_2x2(x):
    return tf.nn.max_pool(x, ksize=[1,2,2,1], strides=[1,2,2,1], padding='SAME')

W_conv1 = weight_variable([5,5,1,32])
b_conv1 = bias_variable([32])
x_image = tf.reshape(x, [-1,28,28,1])
h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1)
h_pool1 = max_pool_2x2(h_conv1)

W_conv2 = weight_variable([5,5,32,64])
b_conv2 = bias_variable([64])
h_conv2 = tf.nn.relu(conv2d(h_pool1, W_conv2) + b_conv2)
h_pool2= max_pool_2x2(h_conv2)

W_fc1 = weight_variable([7*7*64, 1024])
b_fc1 = bias_variable([1024])

h_pool2_flat = tf.reshape(h_pool2, [-1,7*7*64])
h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat, W_fc1) + b_fc1)

keep_prob = tf.placeholder(tf.float32)
h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob)

W_fc2 = weight_variable([1024, 10])
b_fc2 = bias_variable([10])

y_conv = tf.matmul(h_fc1_drop, W_fc2) + b_fc2

cross_entropy = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits_v2(labels=y_, logits=y_conv))
train_step = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)
correct_prediction = tf.equal(tf.argmax(y_conv,1), tf.argmax(y_,1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
sess.run(tf.global_variables_initializer())
for i in range(20000):
    batch = mnist.train.next_batch(50)
    if i%100 == 0:
        train_accuracy = accuracy.eval(feed_dict={x: batch[0], y_: batch[1], keep_prob: 1.0})
        print("step %d, training accuracy %g"%(i, train_accuracy))
        train_step.run(feed_dict={x: batch[0], y_: batch[1], keep_prob: 0.5})

print("test accuracy %g"%accuracy.eval(feed_dict={x: mnist.test.images, y_:mnist.test.labels, keep_prob: 1.0}))

Tensorflowの公式サイトの内容をTensorflowのバージョン1.8で動くように少し修正しただけのものです。

原因の調査

それでは、原因を調査しましょう。起動しているコンテナのリソース状況を確認するには「docker stats」コマンドを使えば良いので、これで調べてみましょう。

Jupyter Notebookをコンテナとして起動し、別のターミナルで「docker stats」を実行してみます。コンテナはもちろん一つだけしか起動していません。

Docker stats 1

「MEM USAGE」はそのコンテナが現在使用しているメモリ量、「LIMIT」はそのコンテナが使用できる最大のメモリ量を示しています。このコンテナは約2Gのメモリを使用できることが分かります。

次に、MNISTのプログラムをJupyter Notebook上で実行してみましょう。リソース状況はどうなるでしょうか?

Docker stats 2

Docker stats 3

「MEN USAGE」の数字はプログラムの最後の方で急激に上昇し、表示ができなくなってしまいました。そして、Jupyter Notebookの方は今回のエラーを表示して、実行が停止されてしまっています。

結論

これから分かることはメモリのオーバーフローです。コンテナが扱えるメモリの上限2Gを超えてしまったためにJupyter Notebookの処理が止まってしまったのです。

対処法

原因がわかったところで、対処法は以下の2つです。

  1. Dockerコンテナのメモリを増やす
  2. Jupyter Notebookを使わずにPythonファイルにして実行する(Jupyter Notebookのオーバーヘッドを回避する)

今回は1つ目の方法で解決してみましょう。

Dockerコンテナのメモリを増やす対処法

原因の結論を読んで疑問に思った人もいたかもしれません。メモリ16GのPCなのにDockerのコンテナのメモリ上限は2Gしかないのはなぜだろうか?

その答えは、実はDockerエンジン上でメモリ制限をしているからです。Dockerの「Preferences -> Advanced」を見てみましょう。デフォルトでは2Gに制限されています。

Docker memory default

今回はPCのメモリは16Gあるので、Dockerコンテナで使用できるメモリ上限は16Gまで上げられます。ただ、最大まで上げてしまうと他のアプリケーションが停止してしまう恐れがあるので、今回のプログラムが実行できる上限まで上げることにしましょう。

Docker memory up to 7G

コンテナの上限を7Gまで上げて、「Apply & Restart」します。

そして、Dockerコンテナのリソースを確認しつつ、MNISTのプログラムをJupyter Notebook上で再度実行してみましょう。

Docker stats last

メモリ使用率(MEM %)は約88%まで上昇していますが、使用したメモリは約6Gまでで止まり(上限は7Gなのでそれより小さい)、プログラムは正常に終了しました。

これで今回のエラーは解決できました。

最後に

いかがでしたか?Jupyter NotebookでTensorflowを使う場合にたまに遭遇するエラーなので紹介しました。ディープラーニングを本気でやるならそれなりのスペックのPCが必要になりそうですね。それでは。

The following two tabs change content below.
  • この記事を書いた人
  • 最新の記事
KD
Twitter のプロフィール

KD

世界を旅し日本を愛するエンジニア。大学でコンピュータサイエンスの楽しさを学び、日本の大手IT企業で働く中で、新しい技術やスケールするビジネスが北米にある事に気づく。世界に挑戦するための最大の壁が英語であったため、フィリピン留学およびカナダ留学を経て英語を上達させた。現在は日本在住でエンジニアとして働きつつ、次の挑戦に備えて世界の動向を注視している。挑戦に終わりはない。このブログでは、エンジニアやデザイナー向けの技術情報から、海外に留学したい人向けの留学情報、海外に興味がある人向けの海外旅行情報など、有益な情報を提供しています。
KD
Twitter のプロフィール

最新記事 by KD (全て見る)

  • 2020年JS周辺のバックエンド寄りの注目技術!ネクストNodeJSの「Deno」と分散型パッケージレジストリの「Entropic」の紹介 - 2020年1月13日
  • 今さら聞けないJavaによる関数型プログラミング入門 ~ラムダ式、ストリーム、関数型インターフェース~ - 2019年11月4日
  • ReactのためのEslintおよびPrettierの設定方法 ~Airbnb JavaScript Style Guideの適用~ - 2019年10月30日

関連記事

  • 英文法リフレッシャー:3種類の未来形

    今回から始まりました「英文法リフレッシャー」では、英文法を海外留学で学んだ知識を活かして復習していくコーナーです。今回は…

  • データサイエンスのためのAnaconda環境構築とJupyter Notebook入門

    少し前からディープラーニングやAIなどのデータサイエンスが流行っています。一説によると海外の企業は優秀なデータサイエンテ…

  • データサイエンスのためのAnaconda環境構築とTensorflowのインストール方法(Docker編)

    データサイエンスのディープラーニング(深層学習)する上でAnacondaとTensorflowはもはや必須の知識となりま…

  • 語学留学で必須!英語の文法用語一覧まとめ

    バンクーバーにしろセブにしろ海外の語学学校では授業は英語で行われます。英語を英語で教えるという若干不思議な環境ですが、文…

  • バンクーバー留学豆知識:語学学校の最初のレベル分けテストが重要な理由

    バンクーバーの語学学校に入学すると初日に受けることになるレベル分けテスト。気楽に受けて良いテストではありますが、ここであ…

カテゴリ : 技術 Tips & Tutorials タグ : docker, jupyter

ブログ更新情報や海外の関連情報などを配信する無料メルマガ

Sponsored Links

About Author

KD

世界を旅し日本を愛するエンジニア。大学でコンピュータサイエンスの楽しさを学び、日本の大手IT企業で働く中で、新しい技術やスケールするビジネスが北米にある事に気づく。世界に挑戦するための最大の壁が英語であったため、フィリピン留学およびカナダ留学を経て英語を上達させた。現在は日本在住でエンジニアとして働きつつ、次の挑戦に備えて世界の動向を注視している。挑戦に終わりはない。このブログでは、エンジニアやデザイナー向けの技術情報から、海外に留学したい人向けの留学情報、海外に興味がある人向けの海外旅行情報など、有益な情報を提供しています。

https://casualdevelopers.com/

最近の投稿

  • 2020年JS周辺のバックエンド寄りの注目技術!ネクストNodeJSの「Deno」と分散型パッケージレジストリの「Entropic」の紹介

    2020年JS周辺のバックエンド寄りの注目技術!ネクストNodeJSの「Deno」と分散型パッケージレジストリの「Entropic」の紹介

    2020年1月13日
  • 今さら聞けないJavaによる関数型プログラミング入門 ~ラムダ式、ストリーム、関数型インターフェース~

    今さら聞けないJavaによる関数型プログラミング入門 ~ラムダ式、ストリーム、関数型インターフェース~

    2019年11月4日
  • ReactのためのEslintおよびPrettierの設定方法 ~Airbnb JavaScript Style Guideの適用~

    ReactのためのEslintおよびPrettierの設定方法 ~Airbnb JavaScript Style Guideの適用~

    2019年10月30日
  • BashからZshに移行する方法(Mac編)

    BashからZshに移行する方法(Mac編)

    2019年10月21日
  • Create React Appを使わないでゼロからReactの開発環境を構築する方法(Webpack/Docker編)

    Create React Appを使わないでゼロからReactの開発環境を構築する方法(Webpack/Docker編)

    2019年9月30日

カテゴリ

  • 技術 Tips & Tutorials (100)
  • 技術塾 (6)
  • ライフハック (26)
  • 海外留学 (12)
  • 英語学習 (3)
  • コラム (6)

アーカイブ

最高の学習のために

人気記事ランキング

  • MySQLで「ERROR 2003 (HY000): Can't connect to MySQL server」と怒られた時の対処法
    MySQLで「ERROR 2003 (HY000): Can't connect to MySQL server」と怒られた時の対処法
  • SAKURAのメールボックスで独自ドメインのメールを設定し、Gmail経由で送受信する方法
    SAKURAのメールボックスで独自ドメインのメールを設定し、Gmail経由で送受信する方法
  • Jupyter Notebookで「The kernel appears to have died. It will restart automatically.」というエラーが出た場合の原因と対処法
    Jupyter Notebookで「The kernel appears to have died. It will restart automatically.」というエラーが出た場合の原因と対処法
  • Expressで「Cannot set headers after they are sent to the client」と怒られた時の対処法
    Expressで「Cannot set headers after they are sent to the client」と怒られた時の対処法
  • SLF4JとLogbackによるJavaのロギング入門(SLF4J + Logback + Lombok)
    SLF4JとLogbackによるJavaのロギング入門(SLF4J + Logback + Lombok)
  • Amazon EC2インスタンスにSSHできなくなった時の対処法
    Amazon EC2インスタンスにSSHできなくなった時の対処法
  • SpringBootのProfile毎にプロパティを使い分ける3つの方法
    SpringBootのProfile毎にプロパティを使い分ける3つの方法
  • [tips][perl] Perlで文字コードをいい感じに処理する方法
    [tips][perl] Perlで文字コードをいい感じに処理する方法
  • 爆速でJenkinsをマスターしよう(GitHubアカウント統合編) ~ JenkinsのGitHub Organizationの設定方法 ~
    爆速でJenkinsをマスターしよう(GitHubアカウント統合編) ~ JenkinsのGitHub Organizationの設定方法 ~
  • Go言語のためのVisual Studio Codeの設定方法
    Go言語のためのVisual Studio Codeの設定方法

Bitcoin寄付 / BTC Donation

Bitcoinを寄付しよう

BTC
Select Payment Method
Personal Info

Donation Total: BTC 0.0010

このブログの運営のためにBitcoinでの寄付を募集しています。お気持ち程度の寄付を頂けると管理者の励みになります。

Bitcoin寄付について知りたい方はこちらの記事へ

The following two tabs change content below.
  • この記事を書いた人
  • 最新の記事
KD
Twitter のプロフィール

KD

世界を旅し日本を愛するエンジニア。大学でコンピュータサイエンスの楽しさを学び、日本の大手IT企業で働く中で、新しい技術やスケールするビジネスが北米にある事に気づく。世界に挑戦するための最大の壁が英語であったため、フィリピン留学およびカナダ留学を経て英語を上達させた。現在は日本在住でエンジニアとして働きつつ、次の挑戦に備えて世界の動向を注視している。挑戦に終わりはない。このブログでは、エンジニアやデザイナー向けの技術情報から、海外に留学したい人向けの留学情報、海外に興味がある人向けの海外旅行情報など、有益な情報を提供しています。
KD
Twitter のプロフィール

最新記事 by KD (全て見る)

  • 2020年JS周辺のバックエンド寄りの注目技術!ネクストNodeJSの「Deno」と分散型パッケージレジストリの「Entropic」の紹介 - 2020年1月13日
  • 今さら聞けないJavaによる関数型プログラミング入門 ~ラムダ式、ストリーム、関数型インターフェース~ - 2019年11月4日
  • ReactのためのEslintおよびPrettierの設定方法 ~Airbnb JavaScript Style Guideの適用~ - 2019年10月30日

関連記事

  • 英文法リフレッシャー:3種類の未来形

    今回から始まりました「英文法リフレッシャー」では、英文法を海外留学で学んだ知識を活かして復習していくコーナーです。今回は…

  • データサイエンスのためのAnaconda環境構築とJupyter Notebook入門

    少し前からディープラーニングやAIなどのデータサイエンスが流行っています。一説によると海外の企業は優秀なデータサイエンテ…

  • データサイエンスのためのAnaconda環境構築とTensorflowのインストール方法(Docker編)

    データサイエンスのディープラーニング(深層学習)する上でAnacondaとTensorflowはもはや必須の知識となりま…

  • 語学留学で必須!英語の文法用語一覧まとめ

    バンクーバーにしろセブにしろ海外の語学学校では授業は英語で行われます。英語を英語で教えるという若干不思議な環境ですが、文…

  • バンクーバー留学豆知識:語学学校の最初のレベル分けテストが重要な理由

    バンクーバーの語学学校に入学すると初日に受けることになるレベル分けテスト。気楽に受けて良いテストではありますが、ここであ…

ビットコイン取引ならここ

  • ホーム
  • 技術 Tips & Tutorials
  • 技術塾
  • ライフハック
  • 海外留学
  • 英語学習
  • コラム
  • サイトマップ
  • タグ一覧
  • プライバシーポリシー
  • お問い合わせ

Copyright © 2023 KD - Casual Developers Notes