Amazon Web Services ブログ

自動シャットダウン拡張機能を利用した Amazon SageMaker Studio のコスト削減方法

Amazon SageMaker Studio は、すべての機械学習開発ステップを実行できる、統合された Web ベースのビジュアルインターフェイスを提供し、データサイエンスチームの生産性を最大 10 倍にします。Studio では、モデルの構築、トレーニング、デプロイに必要な各ステップへの完全なアクセス、制御、可視性を提供します。Studio ノートブックは、コンピューティングインスタンスとファイルストレージを事前に設定する必要がなく、すばやく起動できるコラボレーションノートブックです。Amazon SageMaker は、インフラストラクチャ管理を抽象化する機能を提供するフルマネージド型サービスで、さまざまな機能と従量課金制の料金モデルを備えた大規模な機械学習ワークロードに必要な俊敏性とスケーラビリティを提供します。

このブログでは、下記の実現方法について紹介します。

  • Studio のコストを削減するために、自動シャットダウン拡張機能を利用しStudio 内のアイドル状態のリソースを検出してシャットダウンする
  • Studio ドメイン内のすべてユーザーが自動シャットダウン拡張機能を利用するために、自動でユーザープロファイルを追跡し管理者へ通知する
  • 課金が見落とされがちな Amazon SageMaker Data Wrangler のコストを管理するために、自動シャットダウン拡張機能を利用する

SageMaker Studio の構成要素

Studio ではノートブックの計算処理環境や UI 処理環境を分離するために、それぞれが別々のコンテナで動作しています。これにより各処理環境のスケールアップなどの変更を独立して行うことできます。Studio ノートブックの処理環境は、以下で定義されます。

  • インスタンスタイプ — 基盤となるハードウェア構成。プロセッサ数とタイプ (vCPU および GPU)、メモリ量などのスペックに加え、価格レートを決定します。
  • SageMaker イメージ — Studio に対応したコンテナイメージ。このイメージからデプロイされたコンテナ上でノートブックカーネルがホストされます。コンテナイメージには、組み込みの Python 3 (Data Science) カーネルなど SageMaker が提供するもの以外に、カスタムで作成することも可能です。
  • SageMaker カーネルゲートウェイアプリ — 指定したインスタンスタイプで実行されるコンテナ。同じインスタンスタイプの複数のアプリは、1つのインスタンスを共有することができます。
  • 実行中のカーネルセッション — ノートブックのコードを実行するプロセス。同じインスタンスタイプかつ同じコンテナイメージの複数のノートブックカーネルは、1つのアプリを共有することができます。

Studio には KernelGatewayJupyterServer という二種類のアプリがあります。カーネルが実行される計算処理環境は KernelGateway (SageMaker カーネルゲートウェイ) アプリ で実行されます。一方、Studio UI 処理環境は、 KernelGateway アプリとは独立した JupyterServer アプリ上で実行されます。これにより、Studio UI の画面から操作中のノートブックのカーネルやインスタンスタイプを簡単に切り替えることができます。 KernelGateway アプリ、ユーザー、および Studio ドメインの詳細については、「Amazon SageMaker Studio ノートブックを使用する」を参照してください。

SageMaker Studio の料金体系

Studio の使用には追加料金はかかりません。Studio ノートブック、インタラクティブシェル、コンソール、およびターミナルの実行にかかるコストは、Studio インスタンスタイプの使用量に基づいています。料金については、「Amazon SageMaker の料金」を参照ください。

Studio 内で Studio ノートブック、インタラクティブシェル、またはイメージターミナルを実行する場合は、カーネルとインスタンスタイプを選択する必要があります。これらのリソースは、Studio インスタンス上で起動します。インスタンスタイプは Studio の UI から選択します。選択したインスタンスタイプのインスタンスが以前に起動され、かつ使用可能な場合、リソースはそのインスタンス上で実行されます。CPU ベースのイメージの場合、デフォルトのインスタンスタイプは ml.t3.medium です。GPU ベースのイメージの場合、デフォルトのインスタンスタイプは ml.g4dn.xlarge です。発生するコストはインスタンスタイプに基づいており、インスタンスごとに個別に請求されます。課金は、インスタンスの作成時に開始され、インスタンス上のすべてのアプリケーションがシャットダウンされるか、インスタンスがシャットダウンされたときに停止します。

インスタンス上で実行されているノートブックをシャットダウンしても、インスタンスをシャットダウンしなければ、課金は継続します。複数のノートブックを異なるカーネルで起動したとしても、同じインスタンスタイプである限り、ノートブックは同じインスタンス上で実行されます。複数のノートブックが開いていたとしても、実行中のインスタンスが 1 台の場合は、その 1 台のインスタンスの起動時間に対してのみ課金されます。インスタンスタイプの変更はノートブック内から行うことができます。リソースのシャットダウンは、ノートブック、ターミナル、カーネル、アプリ、またはインスタンスごとに個別に行うことができます。また、同じリソースタイプのすべてのリソースを同時にシャットダウンすることもできます。ノートブックをシャットダウンすると、ノートブック自体は削除されませんが、未保存のデータが失われます。

開いているノートブックをシャットダウンするには、Studio の上部 [File] メニューまたは左の [Running Terminal and Kernels] ペインから行います。[Running Terminal and Kernels] ペインは 4 つのセクションで構成されています。各セクションはアプリやインスタンスなどのリソースタイプに対応しており、タイプごとのリソースが一覧表示されます。前述の通り、各リソースを個別にシャットダウンすることも、同じリソースタイプのすべてのリソースを同時にシャットダウンすることもできます。同時シャットダウンを選択すると、セクションごとに次のように動作します:

  • Running Instances/Running Apps — すべてのインスタンス、アプリ、ノートブック、カーネルセッション、SageMaker Data Wrangler セッション、コンソール、シェル、そしてイメージターミナルがシャットダウンされます。システムターミナルはシャットダウンされません。インスタンスによって発生している課金を停止するにはこちらを利用します。
  • Kernel Sessions — すべてのノートブック、カーネルセッション、コンソール、そしてシェルがシャットダウンされます。
  • Terminal Sessions — すべてのイメージターミナルとシステムターミナルがシャットダウンされます。

リソースをシャットダウンするには、左側のサイドバーで、[Running Terminals and Kernels] アイコンをクリックします(下図参照)。個別のリソースをシャットダウンするには、リソースと同じ行にある電源アイコンをクリックします。

Running Terminals and Kernels

Running Instances/Running Apps の場合、シャットダウンされる前に確認ダイアログが表示されます。[Shut Down All] をクリックして、シャットダウンします。Kernel Sessions と Terminal Sessions の場合は確認ダイアログは表示されません。同時シャットダウンを行うには、セクションラベルの右側にある [X] アイコンを選択します。

JupyterLab Extension によるアイドル状態のカーネルの自動シャットダウン

ここまでは手動でリソースのシャットダウンする方法の紹介でした。しかし運用負荷軽減や消し忘れ防止などの観点から、これらの操作は自動化するのが理想的です。使用しなくなったリソースをユーザーが手動でシャットダウンする代わりに、Studio 自動シャットダウン拡張機能を使用することで、アイドル状態のリソースを自動的に検出してシャットダウンし、コストを削減することができます。JupyterLab Extensions は、ノートブック環境の機能を拡張するシンプルなアドオンです。自動シャットダウン拡張機能は、Studio 内で実行されているカーネル、アプリ、インスタンスが決められたの期間アイドル状態になると、リソースを自動的にシャットダウンします。アイドル時間のしきい値は UI を使用して分単位で設定できます。拡張機能のダウンロードとインストール手順については、GitHub リポジトリを参照してください。

ユーザーに AWS Identity and Access Management (IAM) 認証を使用している場合は、JupyterServer の起動時に拡張機能を自動的にインストールできます。シングルサインオン (SSO) 認証を使用している場合は、手動でインストールする必要があります。

拡張機能をインストールすると、Studio の左側のサイドバーにアイコンとして表示されます。この拡張機能が提供する UI を使用して、アイドル時間のしきい値を設定できます。

拡張機能のアイコン

UI の [idle time limit] パラメータがしきい値を入力する箇所です。デフォルトでは 120 分に設定されています。

制限とトラブルシューティング

自動シャットダウン拡張機能には、次の制限があります。

  • この拡張機能はターミナルの状態を監視しません。たとえば、ターミナが処理を実行中であっても、カーネルのアイドル状態の期間がしきい値を超えた場合、拡張機能はターミナルとカーネルをシャットダウンします。(訳注:拡張機能の最新のバージョンでは [Keep terminals] というオプションを有効化することで、ターミナルが開いている限りシャットダウンしないように設定することできます。詳細は GitHub リポジトリを参照ください。)
  • JupyterServer アプリを削除して作成する度に、拡張機能の再インストールとしきい値の再設定が必要です。自動インストールを使用する場合は、この制限はありません。

拡張機能のログは、Amazon CloudWatch Logs/aws/sagemaker/studio ロググループ以下の、 <Studio_domain>/<user_profile>/jupyterServer/default ログストリームで確認できます。

拡張機能を使用していないユーザーの追跡

次の図は、すべての Studio のユーザーが拡張機能をインストールしているかを追跡し、Studio ドメインの管理者に E メール通知をするアーキテクチャを示しています。

すべての Studio のユーザーが拡張機能をインストールしているかを追跡し、Studio ドメインの管理者に E メール通知をするアーキテクチャ

このアーキテクチャを利用することで、拡張機能の手動または自動インストールに関わらず、管理者は拡張機能を使用せずに実行しているユーザーを追跡し、警告することができます。これによりコンプライアンス準拠とコスト最適化に繋がります。追跡機能の設定方法は GitHub リポジトリを参照ください。

アーキテクチャ図に記載されているように、定期的(たとえば、毎時や毎夜)に CloudWatch Event ルールがトリガーされます。ルールのターゲットには、AWS Lambda 関数を指定しています。この Lambda 関数は Studio ドメイン下のすべてのユーザープロファイルに自動シャットダウン用の拡張機能がインストールされているかどうかをチェックし、要件を満たさなかったユーザープロファイル名を収集します。

ユーザープロファイルの情報は、Amazon Simple Notification Service (SNS) トピックに送信され、管理者や他の関係者が事前に登録しておいたに E メールや Slack を通して通知されます。次の図は、SageMaker ドメイン d-bo6udbiz4vmi 内のユーザープロファイル user-wuser-y が自動シャットダウン拡張機能をインストールしていないという E メール の内容を表しています。

自動シャットダウン拡張機能をインストールしていないという E メール

SageMaker Data Wrangler のリソースの自動シャットダウン

自動シャットダウン拡張機能を利用するメリットの具体例として、Studio 内で起動する Amazon SageMaker Data Wrangler の例を紹介します。Data Wrangler は SageMaker の機能の 1 つであり、データサイエンティストやエンジニアが機械学習アプリケーションのために、ビジュアルインターフェイスを利用してクエリや変換などのデータ処理を迅速に行える環境を提供します。

Studio から Data Wrangler を開始すると、ml.m5.4xlarge インスタンスが自動的に起動し、そのインスタンス上でカーネルが起動します。このインスタンスタイプは、CPU ベースの SageMaker ノートブックのデフォルトである ml.t3.meduim と比較すると、高スペックであり同時に価格レートも高めです。Data Wrangler を使用していない場合は、追加料金が発生しないように、実行中のインスタンスをシャットダウンすることが重要です。

Data Wranger が動作するインスタンス

Data Wrangler は 60 秒ごとに自動的にデータフローを保存します。作業が失われないようにするには、Data Wrangler をシャットダウンする前に、データフローを手動で保存する必要があります。これを行うには、Studio 上部の [File] メニューを選択し、[Save Data Wrangler Flow] を選択します。

Studio で Data Wrangler インスタンスをシャットダウンするには、他のインスタンスと同様に、左側のサイドバーで、[Running Terminals and Kernels] アイコンをクリックします。[Running Apps] のセクションで、sagemaker-data-wrangler-1.0 と表示されているアプリを見つけます。このアプリの横にある電源アイコンをクリックします。

ここまで紹介した手動でのシャットダウン方法は運用負荷が高く、消し忘れの可能性も高まります。自動シャットダウン拡張機能を利用すると、Data Wrangler を操作していない時にアイドル状態のリソースが自動的にシャットダウンされ、SageMaker の追加課金を回避できます。

まとめ

この記事では、SageMaker のコストを削減する方法として、Studio 内のアイドル状態のリソースをシャットダウンする自動シャットダウン拡張機能を紹介しました。また拡張機能をインストールしていない Studio 内のユーザーを追跡する方法も紹介しました。最後に、Data Wrangler のアイドル状態のリソースをシャットダウンすることで、コストを削減する方法を紹介しました。

SageMaker のコスト最適化のより詳細の内容については、ブログ「Right-sizing resources and avoiding unnecessary costs in Amazon SageMaker」を参照ください。

翻訳はソリューションアーキテクト辻が担当しました。原文はこちらです。