SageMakerのノートブックインスタンス再起動後もJupyterLab拡張機能を残したいときの対策

ノートブックインスタンスを再起動してもお気に入りのJupyterLab拡張機能を残しておきたいときの対策です

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

こんにちは。データアナリティクス事業本部のおざわです。

今回は、Amazon SageMakerのノートブックインスタンスのセッション終了後もJupyterLabの拡張機能を残しておく方法について共有したいと思います。実際には残しておくのではなく、インスタンス起動時に毎回入れ直す方法です。

背景

ノートブックインスタンスで永続ストレージとして使えるのは/home/ec2-user/SageMaker になります。JupyterLab上で作成したノートブックやMarkdownファイルなどは、このディレクトリに保存されるようになっていますので、セッション終了後も利用可能になっています。一方でこのディレクトリ以外のものはセッションが終了すると消えてしまうため、インストールしたJupyterLabの拡張機能もリセットされてしまいます。

ノートブックインスタンスは起動している間は料金が発生しますので、使用しないときは止めておきたいところです。ただ、毎回拡張機能を入れ直すのも大変ですので、今回はこのブログにもあるSageMakerの「ライフサイクル設定」を利用して、自動で拡張機能を入れ直します。

ライフサイクル設定

まず「SageMakerダッシュボード」の「ライフサイクル設定」からノートブックインスタンスのライフサイクル設定を作成します。

「ライフサイクル設定の作成」にある「スクリプト」の「ノートブックの開始」で以下のbashスクリプトをコピペします。今回はJupyterLab3でコード補完などをしてくれる拡張機能のjupyterlab-lspを追加しています。

以下、起動スクリプトの例となりますので、お好みの拡張機能で試してみてください。

on-start.sh

#!/bin/bash

set -e

sudo -u ec2-user -i <<'EOF'
eval "$(conda shell.bash hook)"

source /home/ec2-user/anaconda3/bin/activate JupyterSystemEnv

pip3 install 'jupyterlab>=3.0.0,<4.0.0a0' jupyterlab-lsp
pip3 install 'python-lsp-server[all]'

jupyter server extension enable jupyter_lsp

source /home/ec2-user/anaconda3/bin/deactivate

sudo systemctl restart jupyter-server

「設定の作成」をクリックして作成します。

ノートブックインスタンスの設定

ライフサイクル設定の作成後、ノートブックインスタンスの「追加設定」で「ライフサイクル設定」から先程作成したライフサイクル設定を選択します。以下は新規のノートブックインスタンスにライフサイクル設定を行っています。

ノートブックインスタンス起動時のライフサイクル設定のログは、以下のCloudWatchロググループの中で確認できます。

/aws/sagemaker/NotebookInstances

拡張機能を有効化

ノートブックインスタンスの起動後、JupyterLabを起動してExtension Managerで「Enable」ボタンをクリックすると拡張が有効になります。

無事、コード補完が動いてくれました。

インスタンスを停止・起動後もExtension ManagerでEnableボタンをクリックするだけで拡張機能が使えます。できればEnableボタンもクリックせずに拡張機能が使いたいところです。

参考リンク