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を使用する」を参照してください。
- CVPR 2023におけるGoogle
- オムニバースへ:マーベラスデザイナーのためのUniversal Scene Descriptionサポートにより、ユーザーは3Dキャラクターのためのデジタルアセットや衣服をカスタマイズできます
- ホワイトキャッスルへようこそそれに人との会話を希望されますか?
前提条件
始める前に、次の前提条件を満たしていることを確認してください。
- 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_type –
JupyterServer
はユニークなサーバー自体に対応し、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
の場合があります。
-
仮想環境を作成します:
- macOS/Linuxの場合、
python3 -m venv .cdk-venv
を使用します。 - Windowsの場合、
python3 -m venv .cdk-venv
を使用します。
- macOS/Linuxの場合、
-
仮想環境を有効にします:
- macOS/Linuxの場合、
source .cdk-venv\bin\activate
を使用します。 - Windowsの場合、
.cdk-venv/Scripts/activate.bat
を使用します。 - PowerShellの場合、
.cdk-venv/Scripts/activate.ps1
を使用します。
- macOS/Linuxの場合、
-
必要な依存関係をインストールします:
pip install -r requirements.txt
pip install -r requirements-dev.txt
-
この時点で、このコードのCloudFormationテンプレートをオプションで合成できます:
cdk synth
-
以下のコマンドでソリューションをデプロイします:
aws configure
cdk bootstrap
cdk deploy
スタックが正常にデプロイされたら、CloudFormationコンソールでスタックを表示できます。
SageMakerコンソールでライフサイクル構成も表示できます。
シェルコードと割り当てたタグを表示するには、ライフサイクル構成を選択してください。
スタジオライフサイクル構成を添付する
ライフサイクル構成を添付する方法には複数の方法があります。このセクションでは、AWS Management Consoleを使用する方法と、提供されたインフラストラクチャをプログラムで使用する方法の2つを紹介します。
コンソールを使用してライフサイクル構成を添付する
コンソールを使用するには、以下の手順を実行してください。
- SageMakerコンソールで、ドメインを選択します。
- 使用しているドメイン名と現在のユーザープロファイルを選択し、編集を選択します。
- 使用するライフサイクル構成を選択し、添付を選択します。
ここから、デフォルトとして設定することもできます。
プログラムでライフサイクル設定を添付する
構築物によって作成されたスタジオライフサイクル設定の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
)
)
クリーンアップ
このセクションの手順を完了してリソースをクリーンアップします。
スタジオライフサイクル設定の削除
ライフサイクル設定を削除するには、以下の手順を完了します。
- SageMakerコンソールで、ナビゲーションペインでスタジオライフサイクル設定を選択します。
- ライフサイクル設定を選択し、削除を選択します。
AWS CDKスタックの削除
作成したリソースを使用し終わった場合は、リポジトリをクローンした場所で以下のコマンドを実行してAWS CDKスタックを破棄できます。
cdk destroy
スタックの削除を確認するよう求められた場合、yes
を入力します。
以下の手順でAWS CloudFormationコンソールでスタックを削除することもできます。
- AWS CloudFormationコンソールで、ナビゲーションペインでスタックを選択します。
- 削除するスタックを選択します。
- スタックの詳細ペインで、削除を選択します。
- プロンプトが表示されたら、スタックの削除を選択します。
エラーが発生した場合は、アカウント構成に応じて、一部のリソースを手動で削除する必要がある場合があります。
結論
このポストでは、スタジオがMLワークロード用のIDEとして機能する方法について説明しました。スタジオは、起動時に自動化タスクを実行するためのカスタムシェルスクリプトを設定したり、開発環境を設定するためのライフサイクル設定サポートを提供します。AWS CDKコンストラクトを使用してカスタムリソースとライフサイクル設定のインフラストラクチャを構築しました。コンストラクトは、CloudFormationスタックに合成され、スタジオとノートブックカーネルで使用されるカスタムリソースとライフサイクルスクリプトを作成するために展開されます。
詳細については、Amazon SageMaker Studioをご覧ください。
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles