ライフサイクル設定を使用してAmazon SageMaker ノートブックインスタンスを自動的に停止してみる

2022.12.19

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

はじめに

こんにちは。大阪オフィスの林です。

一定期間アイドル中のAmazon SageMaker ノートブックインスタンスを自動的に停止する検証を行いましたので内容をまとめておきたいと思います。
今回自動停止にはAmazon SageMakerのデフォルトの機能であるライフサイクル設定を使用していきたいと思います。
なお、ライフサイクル設定に使用するサンプルコードは下記に公開されていましたので、今回の検証もサンプルのコードを参考にしながら検証していきたいと思います。

やってみた

予めノートブックインスタンスに紐付けるライフサイクル設定を定義しておきます。
Amazon SageMakerのダッシュボードから「ライフサイクル設定」を選択し「ノートブックインスタンス」のタブが選択されている状態で「設定の作成」を選択します。

任意の名前を入力し「ノートブックの開始」タブが選択されている状態でスクリプトの中身を入力します。

  • サンプルコードの中身
    • アイドル時間の指定を行う。(検証では3600秒)
    • https://raw.githubusercontent.com/aws-samplesから停止に使用するautostop.pyをダウンロードする。
    • ノートブックインスタンスが稼働しているOSのcronにスケジュールを仕込む。
set -ex
IDLE_TIME=3600
echo "Fetching the autostop script"
wget https://raw.githubusercontent.com/aws-samples/amazon-sagemaker-notebook-instance-lifecycle-config-samples/master/scripts/auto-stop-idle/autostop.py
echo "Detecting Python install with boto3 install"
if /usr/bin/python3 -c "import boto3" 2>/dev/null; then
    PYTHON_DIR='/usr/bin/python3'
elif /usr/bin/python -c "import boto3" 2>/dev/null; then
    PYTHON_DIR='/usr/bin/python'
else
    echo "No boto3 found in Python or Python3. Exiting..."
    exit 1
fi
echo "Found boto3 at $PYTHON_DIR"
echo "Starting the SageMaker autostop script in cron"
(crontab -l 2>/dev/null; echo "*/5 * * * * $PYTHON_DIR $PWD/autostop.py --time $IDLE_TIME --ignore-connections >> /var/log/jupyter.log") | crontab -

ライフサイクル設定が作成されたことを確認します。

次にノートブックインスタンスを作成してきます。「ノートブックインスタンス」から「ノートブックインスタンスの作成」を選択します。

「ライフサイクル設定 - オプション」から先ほど作成したライフサイクル設定を指定します。(今回の検証ではその他はデフォルトで進めています)

ノートブックインスタンスが開始されましたので放置して停止するか確認してみます。

1時間(3600秒)後、無事にノートブックインスタンスが停止しました。

ログを確認するとcronが動いた形跡がありました。

まとめ

今回はシンプルな検証でしたが、Amazon SageMakerのライフサイクル設定を使用して、ノートブックインスタンスの自動停止を試してみました。
この記事がどなたかの参考になりましたら幸いです。

以上、大阪オフィスの林がお送りしました!