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モデルは、主に公開されているソースコードと自然言語テキストで訓練されています大規模...

機械学習

「Perplexity(パープレキシティ)が2つの新たなオンラインLLMモデルを発表:『pplx-7b-online』と『pplx-70b-online』」

パープレキシティ(Perplexity)は、革新的なAIスタートアップとして、情報検索システムを変革する解決策を発表しました。こ...

AIニュース

「AIの成長に伴い、ラスベガスの労働者たちは変化に備える」

ラスベガスの労働者たちは、労働コストを削減しようとして人工知能や他の技術の採用が増える雇用主を注視しています

AIニュース

商務省は、「米国人工知能安全研究所」を設立し、AIの安全に関する取り組みを主導します

「米国人工知能安全研究所は、先週バイデン大統領が署名した大統領令で商務省に割り当てられた責任を支援します」

AIニュース

「チャンドラヤーン3の着陸:AIとセンサーがISROの壮大な月探査を支援」

宇宙探査の魅惑的な広がりの中で、すべてのミッションは未知へのサイコロのような賭けです。インドの国立宇宙機関であるイン...

データサイエンス

「LP-MusicCapsに会ってください:データの乏しさ問題に対処するための大規模言語モデルを使用したタグから疑似キャプション生成アプローチによる自動音楽キャプション作成」

音楽のキャプション生成は、与えられた音楽トラックの自然言語による説明を生成することによる音楽情報の検索です。生成され...