AWS CDK を使用して Amazon SageMaker Studio ライフサイクル構成をデプロイします

Deploy Amazon SageMaker Studio lifecycle configuration using AWS CDK.

Amazon SageMaker Studioは、機械学習(ML)のための完全に統合された開発環境(IDE)です。Studioは、データの準備、モデルの構築、トレーニング、展開に必要なすべてのML開発ステップを実行できる単一のWebベースのビジュアルインターフェイスを提供します。ライフサイクル設定は、新しいStudioノートブックの開始などのStudioライフサイクルイベントによってトリガーされるシェルスクリプトです。ライフサイクル設定を使用すると、Studio環境のカスタマイズを自動化できます。このカスタマイズには、カスタムパッケージのインストール、ノートブック拡張機能の構成、データセットのプリロード、およびソースコードリポジトリの設定が含まれます。たとえば、Studioドメインの管理者として、ノートブックアプリケーションを長時間アクティブでない場合に自動的にシャットダウンさせることでコストを削減したい場合があります。

AWS Cloud Development Kit(AWS CDK)は、コードを介してクラウドインフラストラクチャを定義し、AWS CloudFormationスタックを介してプロビジョニングするためのフレームワークです。スタックは、プログラムで更新、移動、または削除できるAWSリソースのコレクションです。AWS CDKコンストラクトは、AWS CDKアプリケーションの構築ブロックであり、クラウドアーキテクチャを定義するための設計図を表します。

この記事では、AWS CDKを使用してStudioをセットアップし、Studioライフサイクル設定を使用して、組織内のデータサイエンティストや開発者がStudioにアクセスできるようにする方法を紹介します。

ソリューション概要

ライフサイクル設定のモジュラリティにより、ドメイン内のすべてのユーザーまたは特定のユーザーに適用できます。これにより、ライフサイクル設定を設定し、StudioカーネルゲートウェイまたはJupyterサーバーで参照することができます。カーネルゲートウェイは、ノートブックインスタンスとの対話のエントリポイントであり、JupyterサーバーはStudioインスタンスを表します。これにより、DevOpsのベストプラクティスを適用し、すべてのAWSアカウントとリージョンで安全性、コンプライアンス、および構成の標準を満たすことができます。この記事では、主要言語としてPythonを使用しますが、コードを他のAWS CDKサポート言語に簡単に変更できます。詳細については、「AWS CDKを使用する」を参照してください。

前提条件

始める前に、次の前提条件を満たしていることを確認してください。

  • AWSコマンドラインインターフェイス(AWS CLI)がインストールされていること。
  • AWS CDKがインストールされていること。詳細については、「AWS CDKのはじめ方」と「PythonでAWS CDKを使用する」を参照してください。
  • AWS Identity and Access Management(IAM)ロール、Studioドメイン、およびStudioユーザープロファイルを作成するためのアクセス許可があるAWSプロファイル。
  • Python 3+。

GitHubリポジトリをクローンする

最初に、GitHubリポジトリをクローンしてください。

リポジトリをクローンすると、studio-lifecycle-config-constructというディレクトリを含むクラシックなAWS CDKプロジェクトがあることがわかります。このディレクトリには、ライフサイクル設定を作成するために必要な構成要素とリソースが含まれています。

AWS CDKコンストラクト

私たちが調べたいファイルはaws_sagemaker_lifecycle.pyです。このファイルには、ライフサイクル設定をセットアップして作成するために使用するSageMakerStudioLifeCycleConfigコンストラクトが含まれています。

SageMakerStudioLifeCycleConfigコンストラクトは、カスタムAWS Lambda関数とファイルから読み込まれたシェルコードを使用してライフサイクル設定を構築するためのフレームワークを提供します。このコンストラクトには、次のパラメータが含まれます。

  • ID – 現在のプロジェクトの名前。
  • studio_lifecycle_content – base64エンコードされたコンテンツ。
  • studio_lifecycle_tags – Amazonリソースを整理するために割り当てるラベル。キーと値のペアとして入力され、この構成ではオプションです。
  • studio_lifecycle_config_app_typeJupyterServerはユニークなサーバー自体に対応し、KernelGatewayアプリは実行中のSageMakerイメージコンテナに対応します。

Studioノートブックアーキテクチャの詳細については、「Amazon SageMaker Studioノートブックアーキテクチャに深く入り込む」を参照してください。

以下は、Studioライフサイクル構成コンストラクト(aws_sagemaker_lifecycle.py)のコードスニペットです。

class SageMakerStudioLifeCycleConfig(Construct):
 def __init__(
 self,
 scope: Construct,
 id: str,
 studio_lifecycle_config_content: str,
 studio_lifecycle_config_app_type: str,
 studio_lifecycle_config_name: str,
 studio_lifecycle_config_arn: str,
 **kwargs,
 ):
 super().__init__(scope, id)
 self.studio_lifecycle_content = studio_lifecycle_content
 self.studio_lifecycle_config_name = studio_lifecycle_config_name
 self.studio_lifecycle_config_app_type = studio_lifecycle_config_app_type

 lifecycle_config_role = iam.Role(
 self,
 "SmStudioLifeCycleConfigRole",
 assumed_by=iam.ServicePrincipal("lambda.amazonaws.com"),
 )

 lifecycle_config_role.add_to_policy(
 iam.PolicyStatement(
 resources=[f"arn:aws:sagemaker:{scope.region}:{scope.account}:*"],
 actions=[
 "sagemaker:CreateStudioLifecycleConfig",
 "sagemaker:ListUserProfiles",
 "sagemaker:UpdateUserProfile",
 "sagemaker:DeleteStudioLifecycleConfig",
 "sagemaker:AddTags",
 ],
 )
 )

 create_lifecycle_script_lambda = lambda_.Function(
 self,
 "CreateLifeCycleConfigLambda",
 runtime=lambda_.Runtime.PYTHON_3_8,
 timeout=Duration.minutes(3),
 code=lambda_.Code.from_asset(
 "../mlsl-cdk-constructs-lib/src/studiolifecycleconfigconstruct"
 ),
 handler="onEvent.handler",
 role=lifecycle_config_role,
 environment={
 "studio_lifecycle_content": self.studio_lifecycle_content,
 "studio_lifecycle_config_name": self.studio_lifecycle_config_name,
 "studio_lifecycle_config_app_type": self.studio_lifecycle_config_app_type,
 },
 )

 config_custom_resource_provider = custom_resources.Provider(
 self,
 "ConfigCustomResourceProvider",
 on_event_handler=create_lifecycle_script_lambda,
 )

 studio_lifecyle_config_custom_resource = CustomResource(
 self,
 "LifeCycleCustomResource",
 service_token=config_custom_resource_provider.service_token,
 )
 self. studio_lifecycle_config_arn = studio_lifecycle_config_custom_resource.get_att("StudioLifecycleConfigArn")

構築物をインポートしてインストールした後、それを使用できます。以下のコードスニペットは、app.pyまたは別の構成でスタック内で構成を作成する方法を示しています。

my_studio_lifecycle_config = SageMakerStudioLifeCycleConfig(
 self,
 "MLSLBlogPost",
 studio_lifecycle_config_content="base64content",
 studio_lifecycle_config_name="BlogPostTest",
 studio_lifecycle_config_app_type="JupyterServer",
 
 )

AWS CDK構成のデプロイ

AWS CDKスタックをデプロイするには、リポジトリをクローンした場所で以下のコマンドを実行してください。

パスの構成に応じて、コマンドはpythonではなくpython3の場合があります。

  1. 仮想環境を作成します:

    1. macOS/Linuxの場合、python3 -m venv .cdk-venvを使用します。
    2. Windowsの場合、python3 -m venv .cdk-venvを使用します。
  2. 仮想環境を有効にします:

    1. macOS/Linuxの場合、source .cdk-venv\bin\activateを使用します。
    2. Windowsの場合、.cdk-venv/Scripts/activate.batを使用します。
    3. PowerShellの場合、.cdk-venv/Scripts/activate.ps1を使用します。
  3. 必要な依存関係をインストールします:

    1. pip install -r requirements.txt
    2. pip install -r requirements-dev.txt
  4. この時点で、このコードのCloudFormationテンプレートをオプションで合成できます:

    cdk synth
  5. 以下のコマンドでソリューションをデプロイします:

    1. aws configure
    2. cdk bootstrap
    3. cdk deploy

スタックが正常にデプロイされたら、CloudFormationコンソールでスタックを表示できます。

SageMakerコンソールでライフサイクル構成も表示できます。

シェルコードと割り当てたタグを表示するには、ライフサイクル構成を選択してください。

スタジオライフサイクル構成を添付する

ライフサイクル構成を添付する方法には複数の方法があります。このセクションでは、AWS Management Consoleを使用する方法と、提供されたインフラストラクチャをプログラムで使用する方法の2つを紹介します。

コンソールを使用してライフサイクル構成を添付する

コンソールを使用するには、以下の手順を実行してください。

  1. SageMakerコンソールで、ドメインを選択します。
  2. 使用しているドメイン名と現在のユーザープロファイルを選択し、編集を選択します。
  3. 使用するライフサイクル構成を選択し、添付を選択します。

ここから、デフォルトとして設定することもできます。

プログラムでライフサイクル設定を添付する

構築物によって作成されたスタジオライフサイクル設定のARNを取得し、スタジオ構築物にプログラムで添付することもできます。以下のコードは、ライフサイクル設定ARNがスタジオ構築物に渡される例です。

default_user_settings=sagemaker.CfnDomain.UserSettingsProperty(
                execution_role=self.sagemaker_role.role_arn,
                jupyter_server_app_settings=sagemaker.CfnDomain.JupyterServerAppSettingsProperty(
                    default_resource_spec=sagemaker.CfnDomain.ResourceSpecProperty(
                        instance_type="system",
                        lifecycle_config_arn = my_studio_lifecycle_config.studio_lifeycycle_config_arn

                    )
                )

クリーンアップ

このセクションの手順を完了してリソースをクリーンアップします。

スタジオライフサイクル設定の削除

ライフサイクル設定を削除するには、以下の手順を完了します。

  1. SageMakerコンソールで、ナビゲーションペインでスタジオライフサイクル設定を選択します。
  2. ライフサイクル設定を選択し、削除を選択します。

AWS CDKスタックの削除

作成したリソースを使用し終わった場合は、リポジトリをクローンした場所で以下のコマンドを実行してAWS CDKスタックを破棄できます。

cdk destroy

スタックの削除を確認するよう求められた場合、yesを入力します。

以下の手順でAWS CloudFormationコンソールでスタックを削除することもできます。

  1. AWS CloudFormationコンソールで、ナビゲーションペインでスタックを選択します。
  2. 削除するスタックを選択します。
  3. スタックの詳細ペインで、削除を選択します。
  4. プロンプトが表示されたら、スタックの削除を選択します。

エラーが発生した場合は、アカウント構成に応じて、一部のリソースを手動で削除する必要がある場合があります。

結論

このポストでは、スタジオがMLワークロード用のIDEとして機能する方法について説明しました。スタジオは、起動時に自動化タスクを実行するためのカスタムシェルスクリプトを設定したり、開発環境を設定するためのライフサイクル設定サポートを提供します。AWS CDKコンストラクトを使用してカスタムリソースとライフサイクル設定のインフラストラクチャを構築しました。コンストラクトは、CloudFormationスタックに合成され、スタジオとノートブックカーネルで使用されるカスタムリソースとライフサイクルスクリプトを作成するために展開されます。

詳細については、Amazon SageMaker Studioをご覧ください。

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

機械学習

「SegGPT」にお会いください:コンテキスト推論を通じて画像または動画の任意のセグメンテーションタスクを実行する汎用モデル

コンピュータビジョンでは、前景、カテゴリ、オブジェクトインスタンスなどの重要な概念をピクセルレベルで特定し、再構成す...

AI研究

KAIST(韓国科学技術院)からの新しいAI研究、FLASK(スキルセットに基づく言語モデルの細かい評価フレームワーク)を紹介

驚くべきことに、LLMは人間の価値観と一致し、役立ち、正直な、無害な応答を提供することが証明されています。特に、この能力...

AIニュース

「音波センサーを使用したロボットのネットワークは、パイプを監視します」

研究者たちは、誘導音波センサーを使用することで、独立したロボットのネットワークが大型パイプの欠陥を検査できることを示...

AI研究

Google AI Researchは、大規模言語モデル(LLM)を使用した個別のテキスト生成の一般的なアプローチを提案しています

AIを利用したコンテンツ生成を容易にするためにAIベースの技術が台頭してきたことで、個別のテキスト生成が注目されています...