SageMakerの料金は高いイメージがありますね。
料金コストを抑える策として、インスタンスタイプを無駄に上げないというのも1つですが、無駄なリソースを放置しないというのも1つです。
そういえば、ふと見たらノートブックのコンピュートリソースが起動していたことがあったよ
アイドル状態が続いたら自動で停止してくれたら安心なのにね
ライフサイクル設定でStudioのコンピュータリソースを自動停止
SageMakerライフサイクル設定を用いて、アイドル状態のStudioノートブックのコンピュータリソースを自動でシャットダウンする方法がAWS公式サイトで紹介されています。
現在はAWSコンソール画面上で設定ができるようになりました。
以降、コンソール画面からの設定方法をご紹介します。
設定方法
ここでは、既存のSageMakerドメインにライフサイクル設定を適用します。
サイドメニューから「Lifecycle configurations」をクリックします。
「Create configuration」ボタンをクリックします。
「Jupyter Server app」を選択して「Next」ボタンをクリックします。
NameとScriptsを入力し「Submit」ボタンをクリックします。
スクリプトはAWS提供のサンプルスクリプトを利用します。
サンプルスクリプトではタイムアウトまで120分になっています。つまりアイドル状態が120分経過したらシャットダウンします。
ここでは30分のアイドルで停止するように変更しました。
ライフサイクル設定を作成できました。
適用するドメインを選択します。
「Environment」タブを開きます。
「Lifecycle configurations for personal Studio apps」の「Attach」ボタンをクリックします。
作成したライフサイクル設定にチェックを入れて「Attach to domain」ボタンをクリックします。
アタッチ後、ライフサイクルにチェックを入れて「Set as default」ボタンをクリック
「Run by default」がYesになりました。
さて、既存ドメインに適用するためにはもう1つ対応が必要です。
defaultアプリを再作成しましょう。
既存のドメインをクリックします。
既存のユーザプロファイルをクリックします。
defaultアプリを削除します。
defaultアプリを削除できました。以上で設定完了です。
動作確認
Studioを再度起動して、自動シャットダウンを適用できているか確認します。
初回起動は数分待ちます。
Studioを起動できたら「File」>「Terminal」でターミナルを開き、有効化できていることを確認します。
Teminalで以下のコマンドを実行します。
$ conda activate studio
$ jupyter serverextension list
「sagemaker_studio_autoshutdown」が enabled になっていればOKです
ではノートブックを開き、コンピュートリソースを起動しましょう。
起動しました。
今回は30分のアイドル状態で停止するように設定したので、30分放置します。
30分経過後、自動で停止しました。
CloudWatchのログからも30分で停止したことがわかります。
【補足1】ライフサイクル設定後にタイムアウト時間を変更する方法
ライフサイクル設定後に、自動シャットダウンまでのタイムアウト時間を変更する際はStudioでターミナルを起動して変更します。
ターミナルで以下のコマンドを実行します。
$ conda activate studio
$ vi /home/sagemaker-user/.auto-shutdown/set-time-interval.sh
「TIMEOUT=XX」を変更します。
変更後、「Esc」+「:wq」+「Enter」で保存し、viエディタを閉じます。
【補足2】Databricksとの違い
Databricksでは、クラスタ起動設定でアイドル状態のコンピュートリソース自動停止時間を設定できるようになっています。
SageMaker Studioでもインスタンスタイプを選択する際に自動停止時間も設定できるようになると、より柔軟性が増すように思いました。
引用:https://learn.microsoft.com/ja-jp/azure/databricks/clusters/configure
まとめ
SageMaker Studioのアイドル状態にあるコンピュートリソースについて、以下をご紹介しました。
- 自動シャットダウンのライフサイクル設定手順
- 自動シャットダウンの動作確認方法
- ライフサイクル設定後にタイムアウト時間を変更する方法
現在はコンソール画面からわずかな対応で設定可能です。
想定外の課金が発生しつづけないように対応することをおすすめします。