次世代のSageMakerの中核となるSageMaker Unified Studioを使ってみた
こんちには。
データ事業本部 インテグレーション部 機械学習チームの中村( @nokomoro3 )です。
今回はre:Invent 2024で発表のありました、次世代SageMakerの根幹を担うSageMaker Unified Studioについてご紹介します。
- What's New
- AWS Blog
- Author visual ETL flows on Amazon SageMaker Unified Studio (preview) | AWS Big Data Blog
- Build generative AI applications quickly with Amazon Bedrock IDE in Amazon SageMaker Unified Studio | AWS Machine Learning Blog
- Author visual ETL flows on Amazon SageMaker Unified Studio (preview) | AWS Big Data Blog
- Build generative AI applications quickly with Amazon Bedrock IDE in Amazon SageMaker Unified Studio | AWS Machine Learning Blog
Unified Studioのリソース階層のイメージ
使用するまでのリソース階層が少し複雑ですので、全体像を冒頭で抑えておきたいと思います。
次世代SageMakerのリソースは上記のようになっており、トップのリソースとしてドメインがあります。まずはドメインの作成から始める必要があります
このドメイン内で使える統合開発環境がUnified Studioで、プロジェクト(後述)の作成などをしてデータを操作する作業を行うことができます。
プロジェクトは、プロジェクトのテンプレートとなるプロジェクトプロファイル(青点線の枠、SQL Analyticsなど)から、実体化して作成します。
各プロジェクトプロファイルには、いくつかのブループリント(オレンジ点線の枠、Tooling)が含まれており、それぞれはあるCloudFormationのテンプレートで実体化できます。
プロジェクトを作成する際は、ベースとなるプロジェクトプロファイルが含む、ブループリントのテンプレート群により、リソースのデプロイが行われることを意識しておきましょう。
以下も併せてご覧いただければと思います。
事前準備
Lake Formationの有効化
SageMaker Unified Studioを使う上でLake Formationを有効化は必須と明記されてはいないのですが、
後述するプロジェクトプロファイル(ひな型のようなもの)にはSageMaker Lakehouseが含まれるものしか現状存在しないため、事実上必須となります。
(SageMaker Lakehouseを使う上では、Lake Formationの有効化が必須となっています)
後述のプロジェクト作成で、以下のようなエラーがでる場合は、Lake Formationが有効化されていませんので、ご自身の環境をご確認ください。
マネジメントコンソールからLake Formationを選択してアクセスすると以下のようなダイアログが表示されますので、「Get started」を押下して有効化します。
作成後の「Administrative roles and tasks」は以下のようになります。
ドメイン作成
セットアップ方式の選択
マネジメントコンソールで「Amazon SageMaker」を選択します。(この前までは「Amazon SageMaker Platform」だったかと思いますが)
ドメイン作成ボタンを押下します。
セットアップ方式としてクイックセットアップか、手動設定が選択できます。
クイックセットアップには、Unified Studio向けのVPCのセットアップや各種ロールの作成が含まれています。
今回はクイックセットアップを選択肢して進めます。
Unified Studio用のVPC作成
クイックセットアップの画面で、以下のように表示されていると思います。
この場合、SageMaker Unified Studio用のVPCを作成する必要があります。
(ここで、VPCを作成せずに既存のVPCをドメイン作成時に指定することも可能ですが、ネットワーク関連のエラーに遭遇する可能性が高まります)
上記の「VPCを作成」を押下すると、以下のようなCloudFormationのスタック作成画面に遷移します。
今回はデフォルトのままで「スタックを作成」を押下します。
VPCスタックで作成されるリソース
このテンプレートで作成されるリソースは主に以下となっています。
- VPC
- サブネット
- パブリック1つ
- プライベート3つまたは4つ(リージョンによって異なる)
- ネットワークコンポーネント
- インターネットゲートウェイ
- NATゲートウェイ
- ルートテーブル
- セキュリティグループ
- VPCエンドポイント(パラメータ
useVpcEndpoints
をtrueにすると作成、デフォルトはfalse)
またVPCエンドポイントを作成する場合、以下の27個がプライベートサブネットの個数分作成されますので、料金の発生にはご注意ください。
- データ分析系
- Glue
- EMR / EMR Serverless / EMR on EKS
- Athena
- Redshift Serverless / Redshift / Redshift Data
- DataZone
- AIML系
- SageMaker API / SageMaker Runtime
- CodeWhisperer
- Q
- Bedrock (API, Runtime, Agent, Agent Runtime)
- その他
- S3 (Gateway型)
- CodeCommit / Git CodeCommit / Code Connections API / Codestar Connections
- STS
- KMS
- Secrets Manager
- EC2 / EC2 Messages / SSM / SSM Messages
- CloudWatch Logs
以下も併せてご確認ください。
今回は useVpcEndpoints
をfalseとして、以下が作成されました。
論理 ID | タイプ |
---|---|
PrivateRoute | AWS::EC2::Route |
PrivateSubnetRouteTableAssociation1 | AWS::EC2::SubnetRouteTableAssociation |
PrivateSubnetRouteTableAssociation2 | AWS::EC2::SubnetRouteTableAssociation |
PrivateSubnetRouteTableAssociation3 | AWS::EC2::SubnetRouteTableAssociation |
PublicRouteTable | AWS::EC2::RouteTable |
PublicRouteTableIGWRoute | AWS::EC2::Route |
PublicSubnetRouteTableAssociation | AWS::EC2::SubnetRouteTableAssociation |
SageMakerUnifiedStudioEIP | AWS::EC2::EIP |
SageMakerUnifiedStudioPrivateSubnet1 | AWS::EC2::Subnet |
SageMakerUnifiedStudioPrivateSubnet2 | AWS::EC2::Subnet |
SageMakerUnifiedStudioPrivateSubnet3 | AWS::EC2::Subnet |
SageMakerUnifiedStudioPublicSubnet | AWS::EC2::Subnet |
SageMakerUnifiedStudioPublicSubnetNATGateway | AWS::EC2::NatGateway |
SageMakerUnifiedStudioRouteTable | AWS::EC2::RouteTable |
SageMakerUnifiedStudioS3VpcEndpoint | AWS::EC2::VPCEndpoint |
SageMakerUnifiedStudioSecurityGroup | AWS::EC2::SecurityGroup |
SageMakerUnifiedStudioVpc | AWS::EC2::VPC |
SageMakerUnifiedStudioVpcInternetGateway | AWS::EC2::InternetGateway |
SageMakerUnifiedStudioVpcInternetGatewayAttachment | AWS::EC2::VPCGatewayAttachment |
補足:Unified Studio用のVPCについて
マネジメントコンソール上では以下のように表示されていますので、
Amazon SageMaker Unified Studio で使用するために特別にセットアップされた VPC はありません
新しい VPC を作成する (推奨) か、適切に設定された既存の VPC を選択します。作成された VPC はタグ付けされ、新しいドメインを選択しない限り、後続のドメインで再利用されます。
VPCをSageMaker Unified用かどうかは以下のタグで判断していると推測されます。
Tags:
- Key: CreatedForUseWithSageMakerUnifiedStudio
Value: true
以降、スタックの作成完了後に、ドメイン作成の画面に戻り、クイックセットアップの設定を確認していきます。
ドメインのリソースについて
ドメインのリソースとして以下のようになっています。
ドメイン名は自動で時刻を元に自動入力されています。
またドメインのリソースとして以下のような2つのロールが作成されるようです。
- ドメイン実行ロール:
AmazonSageMakerDomainExecution
- Unified Studioが、Unified Studio にログインしているユーザーを含め、許可されたユーザーに代わってAPIを呼び出すために必要とするIAMロール
SageMakerStudioDomainExecutionRolePolicy
というAWS管理ポリシーがアタッチ
- ドメインサービスロール:
AmazonSageMakerDomainService
- Unified Studio によって実行されるドメインレベルアクションのサービスロール
SageMakerStudioDomainServiceRolePolicy
というAWS管理ポリシーがアタッチ
データ分析、機械学習、SQL 分析リソース
データ分析、機械学習、SQL 分析リソースは以下のようになっています。
こちらでも以下のような2つのロールが作成されるようです。
- プロビジョニングロール:
AmazonSageMakerProvisioning-{アカウントID}
- Unified Studioは、このロールを使用して、アカウント内の選択したBlueprintで定義されているリソースをプロビジョニングおよび管理するためのロール
SageMakerStudioProjectProvisioningRolePolicy
というAWS管理ポリシーがアタッチ
- アクセスロール:
AmazonSageMakerManageAccess-{リージョン}-{ドメインID}
- Unified Studioに、SageMaker Lakehouse、AWS Glue Data Catalog、および Amazon Redshift データへの公開、アクセス権の付与、およびアクセス権の取り消しを行うための許可を付与
- また、Amazon SageMaker CatalogのデータとAIアセットでのサブスクリプションを公開および管理するためのロール
- 以下の3つのAWS管理ポリシーがアタッチ
AmazonDataZoneGlueManageAccessRolePolicy
AmazonDataZoneRedshiftManageAccessRolePolicy
AmazonDataZoneSageMakerManageAccessRolePolicy
- それに加えて、
AmazoneSageMakerManageAccessPolicy-{ドメインID}
というカスタムポリシーがアタッチ
このうちアクセスロールはドメインIDに紐づいていますので、ドメインごとに作成が必要なロールとなっています。
また、Unified Studio内で作成するプロジェクト向けのS3バケットが以下の名前で作成されます。
s3://amazon-sagemaker-{アカウントID}-{リージョン名}-{文字列}
また、ネットワーク設定としてVPCとサブネットを設定します。
サブネットは少なくとも3つ必要で、プライベートを設定することが推奨されています。
生成AIのリソース
生成AIのリソースは以下のようになっています。
まずはこのアカウントの今のリージョンで有効なBedrockの基盤モデルについての情報が表示されています。
ここで何も表示されておらず、有効化する必要がある場合は「モデルアクセスを付与」を押下して有効化されてください。
またこちらでも以下のような2つのロールが作成されるようです。
- モデルのプロビジョニングロール:
AmazonSageMakerBedrockModelManagementRole-{アカウントID}
- システムがこのロールを使用して、プロジェクトの Amazon Bedrock モデルにアクセスできる推論プロファイルを作成する
AmazonDataZoneBedrockModelManagementPolicy
というAWS管理ポリシーがアタッチ
- モデルの消費(Consumption)ロール
- システムがこのロールを使用して、プレイグラウンドの Amazon Bedrock モデルへのアクセス権をユーザーに付与する
AmazonSageMakerBedrockModelConsumptionRole-
というprefixのロールが基盤モデルごとに作成
最後に、続行を押下すると、次に進みます。
IAMアイデンティティセンターユーザの作成
Unified StudioはSSOまたはIAMユーザでログインする必要があり、他のアカウントからスイッチロールしたIAMロールではログインできません。
SSOでログインしたい方はここで以下のようにIAM Identify Centerの設定を行います。(今回はこの設定を実施しました)
最後に「ドメインを作成」を押下します。
ドメイン作成結果
操作後しばらくまつと、ドメインが作成され、ARNは以下のようになります。(DataZoneのドメイン名との共通点を感じますね)
arn:aws:datazone:us-east-1:{アカウントID}:domain/dzd_{ドメインID}
Unified Studioにログインする
※既にSSOを使用している場合は、メールアドレスの指定のみでこの節の設定は不要な可能性があります
ドメイン作成後に以下のようなダイアログが出た場合は、メールを確認します。
以下のようなメールが受信されていると思いますので、「Accept Invitation」を押下します。
パスワードを設定します。
サインイン画面に遷移しますので、サインインします。
MFAデバイスの登録を画面に従って行います。
割り当てを押下します。
その後、「完了」を押下すると以下のようにドメインが確認できる画面に遷移します。ドメインを選択して遷移します。
Unified Studioのログイン画面に遷移しますので、SSOでログインします。
無事にUnified Studioの画面に入ることができました。
ドメインの確認
早速、Unified Studioを操作していきたいところですが、ドメインの情報を少し確認して補足しておきます。
プロジェクトプロファイルの確認
Unified Studioではプロジェクトを作成していくのですが、そのテンプレートのようなものとしてプロジェクトプロファイルがドメインに作成されています。
以下の3つがそれに該当します。
例えば「SQL analytics」を選択すると、プロジェクトプロファイルの詳細を確認することができます。
このプロジェクトプロファイルに含まれる、ブループリントを確認することができます。
また「ツーリング設定」タブに移動すると、ツーリングのブループリントの設定を確認できます。
ここで、プロジェクトプロファイルに含まれる、ブループリントを追加したり、編集することが可能なようです。
ブループリントの確認
ブループリントとは何かという話もあるので、またドメインの画面に移動して、次はブループリントのタブを確認します。
ブループリントは全部で以下の10個ありました。
名前 | 説明 |
---|---|
AmazonBedrockGenerativeAI | これにより、ユーザーは、エージェント、ナレッジベース、ガードレール、フロー、関数、モデル評価などのツールを使用して生成 AI アプリケーションを構築できます。 |
EmrOnEc2 | Provides a reusable CloudFormation template to create an Amazon EMR on EC2 cluster to run and scale Apache Spark, Hive, and other big data workloads |
EmrServerless | Provides a reusable CloudFormation template to create an Amazon EMR Serverless application that is ready to serve Apache Spark batch jobs and interactive sessions |
LakehouseCatalog | Provisions a new catalog in the SageMaker Lakehouse that is backed by Redshift Managed Storage |
LakeHouseDatabase | Provides a reusable CloudFormation template to create a data lake environment with AWS Glue database for data management and an Amazon Athena workgroup for querying data. |
MLExperiments | Provides OnDemand blueprint to enable MLflow tracking server for the experimentation inside a project |
PartnerApps | Creates an AWS IAM role and a Connection that enables access to Partner AI Apps. Through Partner AI Apps you can leverage integrated and fully-managed third-party solutions for AI/ML development |
RedshiftServerless | Provides a reusable CloudFormation template to create an Amazon Redshift Serverless environment to get insights from data without managing infrastructure |
Tooling | Creates resources for the project, including IAM user role, security groups, and Amazon SageMaker domain. |
Workflows | Provides a CloudFormation template to create the MWAA environment for Airflow-based workflows |
それぞれが以下のようにCloudFormationのテンプレートとなっているようです。
テンプレートの詳細を確認したり、編集する方法は分かりませんでした。そのままでは課金が大きめになるブループリントもあるため、ここが柔軟に編集できると活用しやすそうです。
プロジェクト作成
プロファイルの選択
先ほどのUnified Studioログイン後の画面に戻り、ドメイン内でプロジェクトを作成していきます。
先ほどの以下の画面から「プロジェクトを作成」を押下します。
するとプロジェクト作成画面に遷移します。
プロジェクトのプロファイルとして、先ほど確認した3種類が表示されています。
「SQL analytics」が最もシンプルなプロファイルとなっており、以下のブループリントを含んでいます。
- Tooling
- Data Lake
- Redshift Serverless
- Lakehouse Catalog
今回はこの「SQL analytics」を選択して、「Continue」を押下します。
各ブループリントの設定
すると各ブループリントの設定に遷移します。
Toolingは共通のブループリントですが、CodeCommitなどのリソースが含まれていそうです。ここはデフォルトのままにします。
LakehouseやRedshift Serverlessの設定もデフォルトのままとします。
最終確認画面が表示されるので、問題なければ「プロジェクトを作成」を押下します。
作成中の画面に遷移しますので、完了を待ちます。
プロジェクト作成結果の確認
作成完了後、CloudFormationで確認すると、3つのスタックが作成されていることが分かります。
各スタックの「AmazonDataZoneBlueprint」というタグを確認すれば、どのブループリントのものか確認ができます。
Toolingのスタック
この中でToolingのスタックは DataZone-Env-d50kofo71ka2s9
で、主に以下のようなリソースが含まれていました。
論理 ID | タイプ |
---|---|
CodeRepository | AWS::CodeCommit::Repository |
ConnectorManageAccessPolicy | AWS::IAM::ManagedPolicy |
EMREC2InstanceProfile | AWS::IAM::InstanceProfile |
EMREC2InstanceRole | AWS::IAM::Role |
EMRInstanceProfileRolePolicy | AWS::IAM::ManagedPolicy |
EMRServiceRole | AWS::IAM::Role |
EMRServiceRoleEc2RolePolicy | AWS::IAM::ManagedPolicy |
EMRServiceSecurityGroup | AWS::EC2::SecurityGroup |
GlueNetworkConnection | AWS::Glue::Connection |
SageMakerMLResourcesAccessPolicy | AWS::IAM::ManagedPolicy |
ToolingCloudWatchLogGroup | AWS::Logs::LogGroup |
ToolingSecurityGroup | AWS::EC2::SecurityGroup |
ToolingSecurityGroupIngress | AWS::EC2::SecurityGroupIngress |
ToolingUserRole | AWS::IAM::Role |
Data Lakeのスタック
この中でData Lakeのスタックは DataZone-Env-4kl8gyh8j0lt09
で、主に以下のようなリソースが含まれていました。
論理 ID | タイプ |
---|---|
AthenaWorkgroupathenaworkgroup7B7EC980 | AWS::Athena::WorkGroup |
GlueDatabase | AWS::Glue::Database |
GlueDatabaseLakeFormationResource | AWS::LakeFormation::Resource |
Redshift Serverlessのスタック
この中でRedshift Serverlessのスタックは DataZone-Env-bwqq53ffm5zhnd
で、主に以下のようなリソースが含まれていました。
論理 ID | タイプ |
---|---|
RedshiftServerlessAdminPolicy | AWS::IAM::ManagedPolicy |
RedshiftServerlessAdminRole | AWS::IAM::Role |
RedshiftServerlessNamespace | AWS::RedshiftServerless::Namespace |
RedshiftServerlessWorkgroup | AWS::RedshiftServerless::Workgroup |
Lakehouse Catalogのスタック
この時点ではまだ、Lakehouse Catalogのスタックの作成は確認できませんでした。
参考:Redshiftのパラメータ変更
デフォルトの設定のままでは、Redshift Serverlessのキャパシティが128と大きめであるため、パラメータを変更してスタックを更新します。
redshiftBaseCapacityを以下のように最小設定となる8にして、スタックを更新しました。
Unified Studio上でのプロジェクトの確認
プロジェクトの作成が終わると、以下のような画面がUnified Studioで確認することができます。
プロジェクトの操作
クエリエディタ
右上の新規をクリックすると、操作を選ぶことができます。今回は「クエリ」を選択してみます。
クエリエディタが立ち上がるので、どこに接続をするか右上のメニューから選択します。
今回は「Athena (Lakehouse)」->「AwsDataCatalog」->「glue_db_xxxx」を選択して、「Choose」を押下してみました。
これで以下のようにクエリが実行できます。
Data explorerで、このデータソースを確認できます。現状は何も入っていないようです。
3点リーダからアップロードができるようなので試してみます。
csvのアップロード
データはMovieLensのデータの ratings.csv
をアップロードしてみます。以下から ml-latest-small.zip
をダウンロードして解凍し、 ratings.csv
を使えるようにしてください。
先ほどの「Upload data」をクリックすると、以下のような画面に遷移します。
ファイルを選択して必要事項を入力した後、「Upload data」を押下します。
すると、Data explorerでテーブルが確認できるようになり、クエリエディタで参照することもできるようになりました。
なおこのテーブルはLakehouseだけでなく、Redshiftからでも確認することができ、
Data explorerのS3でもファイルとしてアップロードされていることが分かります。
他リソースからの見え方
Glueの画面からデータベース、テーブルが見え、S3のロケーションも確認することができます。
Redshiftからは外部テーブルとしてみますが、クエリはできなくなっています。
おそらく、PermissionがLake Formation管理下にあるためと考えられます。
クエリの保存
「Actions」から「Save to project」を選択することで、クエリを保存することができます。
sqlnbファイルとして保存されるようです。
「Save changes」を押下すると、以下のようにCodeCommitとして保存されていることが分かります。
まとめ
いかがでしたでしょうか。今回は次世代SageMakerの根幹を担うSageMaker Unified Studioについてご紹介しました。
カタログの作成等もUnified Studioからできるようですので、今後試していきたいと思います。
本ブログが皆様のご参考になれば幸いです。