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

AIテクノロジー

プロンプトエンジニアリングにおける並列処理:思考の骨格技術

「スケルトン・オブ・ソウトと呼ばれるプロンプトエンジニアリング技術が、レイテンシを削減し、構造化された出力を提供し、...

機械学習

このAIニュースレターはあなたが必要なものです #68

今週は、マルチモーダルの能力を持つ GPT-4 に対抗する候補として、新しいオープンソースのマルチモーダルモデルである LLaVA...

機械学習

GoogleのSymbol Tuningは、LLM(Language Learning Models)におけるIn-Context Learningを行う新しいFine-Tuningテクニックです

言語モデルのスケーリングアップにより、機械学習は革命的な急増を経験し、インコンテキスト学習を通じて難しい推論タスクを...

AIニュース

「除細動器を搭載したドローンが命を救っています」

「研究者は、調査対象のケースの67%で、自動外部除細動器を搭載したドローンが疑われる心肺停止発生現場に救急車よりも3分以...

データサイエンス

「バイオメディカルデジタルツイン」

「生物現象とシステムのシミュレーションモデルの変革的な可能性を、複数のスケールで考慮する」

人工知能

ChatGPT プラグイン:知っておく必要があるすべて

OpenAIが展開したサードパーティのプラグインについて学び、ChatGPTsの実際の使用を理解しましょう