

SageMaker Studioでカーネルが死ぬ原因、だいたいメモリ不足
この記事は、構成と文章の整理にAIを使っています。
あくまで読みやすくするための補助で、内容そのものをAIにすべて任せて書いているわけではありませんが、ところどころ相談しながら整えています。
何が起きたか
SageMaker Studioのノートブックで作業してたら、いきなりこう出た。
Kernel RestartingThe 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のメモリ使用率とインスタンスタイプを見るのが早い。