それでは毛玉諸君、これにて失敬

日々の精進を備忘録的に綴ります。

jupyter notebookですぐにカーネルが死ぬ場合の対策

(個人的な経験をもとに書いており、技術的な根拠は皆無です。当然動作は保証できませんのであくまでもポエムとしてお読みください。)

前提

  • 数GBの比較的大きなcsvファイルの前処理をjupyter notebookで行っている
  • ubuntuサーバーでdockerコンテナを起動しSSH接続、ブラウザでコードを書いていた

どんな現象が起きたか

  • サーバーのメモリは比較的余裕があるのに、処理中にカーネルが死ぬ
  • カーネルをリセットし再実行すると、リセット前は実行できていた処理の部分でカーネルが死ぬ
  • カーネル死のあと再びcsvファイルを読み込むと、以前は読み込めていたはずなのにencode errorなど読み込むことができなくなる(もちろんファイルに変更は加えていない)

講じた対策

コンテナ再起動、サーバー再起動

  • 一応直る
  • カーネル死自体は頻発するため、毎回行うのは面倒

キャッシュクリア

  • free -h コマンドでメモリの空き状況を確認すると、buff/cache のサイズが大きいことがあった
  • sudo sysctl -w vm.drop_caches=3 を定期的に実行してキャッシュを削除した
  • 効果があったかは不明

ブラウザのjupyter notebookで巨大なファイルを読み込まない

  1. 元のcsvファイルの一部をデバッグ用として別ファイル保存
  2. ブラウザのjupyter notebookでデバッグ用ファイルを読み込み、処理を記述
  3. jupyter notebookをコマンドで実行
jupyter nbconvert --execute --to {notebook_path} --inplace {notebook_path}
  • これが一番対策としてよかった
  • カーネル死が頻発する原因はサーバーではなくブラウザの問題な気がした

おわりに

カーネル死には相当苦しめられましたが、要因の切り分けが出来たことで快適に作業できるようになりました。
事例をググっても出てこなかったので備忘録として。