SageMaker Studioでカーネルが死ぬ原因、だいたいメモリ不足

  • AWS
  • SageMaker
  • Jupyter

この記事は、構成と文章の整理にAIを使っています。
あくまで読みやすくするための補助で、内容そのものをAIにすべて任せて書いているわけではありませんが、ところどころ相談しながら整えています。

何が起きたか

SageMaker Studioのノートブックで作業してたら、いきなりこう出た。

Kernel Restarting
The kernel for example.ipynb appears to have died. It will restart automatically.

実行中のセルの結果や変数は全部消える。地味に厄介。

原因

調べてみたら、これはJupyter標準の汎用メッセージで、SageMaker固有のエラーではない。原因としてはメモリ不足が一番多いらしい。大きいDataFrameのmergeやモデルのロードなど、メモリを食う処理のタイミングで落ちるパターンが目立つ。

コード側のバグ(無限ループなど)やサードパーティライブラリの問題で落ちることもあるらしいが、体感的には「インスタンスタイプに対してメモリが足りてない」パターンが多数派だった。

切り分けの流れ

flowchart TD
    A[Kernel Restartingが発生] --> B[CloudWatchでメモリ使用率を確認]
    B -->|使用率が振り切れてた| C[インスタンスタイプを大きくする]
    B -->|使用率は正常| D[コードやライブラリのバグを疑う]
    C --> E[再実行して様子を見る]
    D --> E

ノートブック内でターミナルを開いて free -h や top を叩けば、その場でメモリの状況も見れる。CloudWatchにインスタンスのメトリクスが出ているので、落ちた直前にメモリ使用率が張り付いていないかを見るのが早い。

対処

  • インスタンスタイプをメモリの大きいものに変える(例: ml.t3.medium → ml.t3.large)
  • 一度に読み込むデータ量を減らす、chunk処理にするなど処理を分割する
  • 使い終わった変数やDataFrameを del して明示的に解放する

SageMaker Studio Classicの場合、KernelGatewayアプリのイメージ更新で直ることもあるらしいが、これは実機未確認。

分かったこと

「カーネルが死んだ」の表示自体はJupyter標準のメッセージで、SageMaker固有の情報は含まれていない。原因の切り分けはログを漁るより先に、CloudWatchのメモリ使用率とインスタンスタイプを見るのが早い。