AmazonSageMakerパイプライン 最初の専用です CI/CD 機械学習(ML)のサービス。 エンドツーエンドのMLワークフローを構築、自動化、管理、スケーリングし、CI / CDのDevOpsベストプラクティスをML(MLOpsとも呼ばれます)に適用するのに役立ちます。
組織のすべてのリソースを整理するために複数のアカウントを作成することは、 優れたDevOpsプラクティス。 マルチアカウント戦略は、ガバナンスを改善するだけでなく、組織のビジネスをサポートするリソースのセキュリティと制御を強化するためにも重要です。 この戦略により、組織内のさまざまなチームが、実稼働環境を安全で顧客が利用できるように保ちながら、実験、革新、統合をより迅速に行うことができます。
パイプラインを使用すると、MLモデルのデプロイに同じ戦略を簡単に適用できます。 データサイエンス、ステージング、本番の各環境にXNUMXつずつ、合計XNUMXつの異なるAWSアカウントがあるユースケースを想像してみてください。 データサイエンティストは、自分のアカウントでいつでも実験を実行し、さまざまなモデルをトレーニングおよび最適化する自由を持っています。 モデルが本番環境にデプロイするのに十分な場合、データサイエンティストは、モデルの承認ステータスを次のように切り替える必要があります。 Approved
。 その後、自動化されたプロセスがモデルをステージングアカウントにデプロイします。 ここでは、単体テストまたは統合テストを使用してモデルのテストを自動化するか、モデルを手動でテストできます。 手動または自動の承認後、モデルは本番アカウントにデプロイされます。本番アカウントは、実際のデータの推測を提供するために使用される、より厳密に制御された環境です。 Pipelinesを使用すると、すぐに使用できるマルチアカウント環境を実装できます。
この投稿では、パイプラインを使用して独自のマルチアカウントMLパイプラインを実装する方法を学習します。 まず、環境を構成し、事前定義されたテンプレートを使用するように環境を準備する方法を学習します。 SageMakerプロジェクト ステージングと本番のXNUMXつの異なるアカウントでモデルをトレーニングおよびデプロイするため。 次に、このカスタムテンプレートがどのように作成されたか、および独自のSageMakerプロジェクト用にテンプレートを作成およびカスタマイズする方法について詳しく説明します。
環境の準備
このセクションでは、XNUMXつの異なるAWSアカウントを設定し、 SageMaker スタジオ CI / CDパイプラインをデータサイエンティストによって作成されたMLパイプラインと統合するプロジェクトを作成します。 次の図は、SageMakerカスタムプロジェクトによって作成される環境のリファレンスアーキテクチャとその方法を示しています AWS組織 異なるアカウントを統合します。
この図には、組織によって管理されるXNUMXつの異なるアカウントが含まれています。 また、XNUMXつの異なるユーザーロール(同じ人物である可能性があります)がこの環境を操作します。
- MLエンジニア – CI / CDパイプライン、モデルレジストリ、およびその他のリソースを作成するSageMakerStudioプロジェクトのプロビジョニングを担当します
- データ科学者 –モデルグループに登録されたトレーニング済みモデルで終了するMLパイプラインの作成を担当します(別名 モデルパッケージグループ)
- 承認者 –ステージングアカウントにデプロイされたモデルのテストと本番デプロイメントの承認を担当します
必要に応じて、組織なしで同様のソリューションを実行することもできます(ただし推奨されません)。 ただし、アカウント間のアクセス許可と信頼関係を手動で準備し、テンプレートを変更して組織の依存関係を削除する必要があります。 また、複数のAWSアカウントとチームを持つ企業の場合は、を使用することを強くお勧めします AWS Control Tower アカウントと組織をプロビジョニングするため。 AWS Control Towerは、新しく安全なマルチアカウントAWS環境をセットアップおよび管理するための最も簡単な方法を提供します。 この投稿では、ソリューションの実装について組織とのみ説明します。
ただし、先に進む前に、次のセクションで詳しく説明する次の手順を完了する必要があります。
- データサイエンティストが使用するAWSアカウント(データサイエンスアカウント)を作成します。
- を作成して構成します SageMakerStudioドメイン データサイエンスアカウントで。
- 本番環境とステージング用にXNUMXつの追加アカウントを作成します。
- 組織を使用して組織構造を作成し、追加のアカウントを招待して統合します。
- パイプラインを実行し、外部アカウントにモデルをデプロイするために必要な権限を構成します。
- 複数のアカウントにモデルをデプロイするためのSageMakerプロジェクトテンプレートをインポートし、SageMakerStudioで利用できるようにします。
アカウントでのSageMakerStudioの設定
パイプラインは、の組み込みサポートを提供します MLOpsテンプレート MLプロジェクトでCI / CDを簡単に使用できるようにします。 これらのMLOpsテンプレートは、次のように定義されています。 アマゾンクラウドフォーメーション テンプレートと経由で公開 AWSサービスカタログ。 これらは、ML用のIDEであるSageMakerStudioを介してデータサイエンティストが利用できるようになっています。 アカウントでStudioを構成するには、次の手順を実行します。
既存のドメインがある場合は、ドメインまたは個々のユーザーの設定を編集するだけで、このオプションを有効にできます。 このオプションを有効にすると、XNUMXつの異なるが作成されます AWSIDおよびアカウント管理 AWSアカウントでの(IAM)ロール:
- AmazonSageMakerサービスカタログ製品の起動ロール – SageMakerがプロジェクトテンプレートを実行し、必要なインフラストラクチャリソースを作成するために使用します
- AmazonSageMakerServiceCatalogProductsUseRole – CI / CDパイプラインがジョブを実行し、ターゲットアカウントにモデルをデプロイするために使用します
re:Invent2020より前にSageMakerStudioドメインを作成した場合は、進行中のすべての作業を保存して環境を更新することをお勧めします。 に File メニュー、選択 シャットダウン、選択を確認します。
- ステージングと本番用に他のXNUMXつのAWSアカウントを作成して準備します(まだ持っていない場合)。
組織の構成
組織の構造にデータサイエンスアカウントとXNUMXつの追加アカウントを追加する必要があります。 組織は、AWSリソースを拡張および拡張するときに、環境を一元管理および管理するのに役立ちます。 これは無料で、ガバナンス戦略に役立ちます。
各アカウントは異なるに追加する必要があります 組織単位(OU).
- 組織コンソールで、次のようなOUの構造を作成します。
- ルート
multi-account-deploymen
Uへ)- 111111111111(データサイエンスアカウント-SageMaker Studio)
production
(OU)- 222222222222(AWSアカウント)
staging
(OU)- 333333333333(AWSアカウント)
組織を構成した後、各アカウント所有者は招待状を受け取ります。 所有者は招待を受け入れる必要があります。そうしないと、アカウントは組織に含まれません。
このプロセスにより、データサイエンスアカウントはターゲットアカウントのリソースをプロビジョニングできます。 そうしないと、展開プロセスは失敗します。 また、この機能セットは組織と連携するための推奨される方法であり、課金機能の統合が含まれています。
- 次に、組織コンソールで、 アカウントを整理する.
- 選択する ステージング.
- OUIDを書き留めます。
- に対してこのプロセスを繰り返します
production
OU。
権限の構成
追加のアカウントごとにSageMaker実行ロールを作成する必要があります。 これらの役割は、 AmazonSageMakerServiceCatalogProductsUseRole
データサイエンスアカウントでエンドポイントをターゲットアカウントに展開し、テストします。
- にサインインする AWSマネジメントコンソール ステージングアカウントで。
- 以下を実行します CloudFormationテンプレート.
このテンプレートは、新しいSageMakerロールを作成します。
- 以下のパラメーターを指定します。
- SageMakerRoleSuffix –次のプレフィックスの後にロール名に追加される短い文字列(スペースや英数字を含まない最大10個の小文字)。
sagemaker-role-
。 最終的な役割名はsagemaker-role-<<sagemaker_role_suffix>>
. - パイプライン実行ロールArn –作成しているSageMakerの役割を引き受けるデータサイエンスアカウントの役割のARN。 ARNを見つけるには、データサイエンスアカウントでコンソールにサインインします。 IAMコンソールで、 役割 とを検索
AmazonSageMakerServiceCatalogProductsUseRole
。 この役割を選択し、ARNをコピーします(arn:aws:iam::<<data_science_acccount_id>>:role/service-role/AmazonSageMakerServiceCatalogProductsUseRole
).
- SageMakerRoleSuffix –次のプレフィックスの後にロール名に追加される短い文字列(スペースや英数字を含まない最大10個の小文字)。
- ステージングアカウントでこの役割を作成した後、本番アカウントに対してこのプロセスを繰り返します。
データサイエンスアカウントで、次のポリシーを構成します。 Amazon シンプル ストレージ サービス (Amazon S3)トレーニング済みモデルを保存するために使用されるバケット。 この投稿では、現在のリージョンのデフォルトのSageMakerバケットを使用します。 次の名前形式があります。 sagemaker-<<region>>-<<aws_account_id>>
.
- Amazon S3コンソールで、このバケットを検索し、使用しているリージョンとデータサイエンスアカウントのIDを入力します。
見つからない場合は、この名前の形式に従って新しいバケットを作成してください。
- ソフトウェア設定ページで、下図のように 権限 タブで、次のポリシーを追加します。
- 設定を保存します。
これで、ターゲットアカウントには、展開中にトレーニング済みモデルを読み取る権限があります。
次のステップは、役割に新しい権限を追加することです AmazonSageMakerServiceCatalogProductsUseRole
& AmazonSageMakerServiceCatalogProductsLaunchRole
.
- データサイエンスアカウントのIAMコンソールで、 役割.
- 見つける
AmazonSageMakerServiceCatalogProductsUseRole
役割とそれを選択します。 - 新しいポリシーを追加し、次のように入力します JSONコード.
- 変更を保存します。
- 今、
AmazonSageMakerServiceCatalogProductsLaunchRole
役割、それを選択し、次の内容で新しいポリシーを追加します。
- 変更を保存します。
それでおしまい! 環境はほぼ準備ができています。 あとXNUMXつの手順が必要で、さまざまなアカウントでモデルのトレーニングと展開を開始できます。
カスタムSageMakerStudioプロジェクトテンプレートのインポート
このステップでは、カスタムプロジェクトテンプレートをインポートします。
- データサイエンスアカウントを使用してコンソールにサインインします。
- AWSサービスカタログコンソールの[ 管理部門、選択する ポートフォリオ.
- 選択する 新しいポートフォリオを作成する.
- ポートフォリオに名前を付ける
SageMaker Organization Templates
. - 以下をダウンロードする template お使いのコンピュータに。
- 新しいポートフォリオを選択します。
- 選択する 新製品をアップロードする.
- 商品名入る
Multi Account Deployment
. - 説明、 入る
Multi account deployment project
. - オーナー、 あなたの名前を入力してください。
- バージョンの詳細、用 方法、選択する テンプレートファイルを使用する.
- 選択する テンプレートをアップロードする.
- ダウンロードしたテンプレートをアップロードします。
- バージョンタイトル、選択する 1.0.
残りのパラメーターはオプションです。
- 選択する レビュー.
- 設定を確認して、 製品を作成する.
- 選択する Refresh 新製品を一覧表示します。
- 作成したばかりの製品を選択してください。
- ソフトウェア設定ページで、下図のように タグ タブで、次のタグを製品に追加します。
- キー –
sagemaker:studio-visibility
- 値 –
True
- キー –
ポートフォリオの詳細に戻ると、次のスクリーンショットのようなものが表示されます(IDが異なります)。
- ソフトウェア設定ページで、下図のように 制約 タブを選択 制約を作成する.
- プロダクト、選択する マルチアカウント展開 (作成したばかりの製品)。
- 制約タイプ、選択する 起動する.
- 起動制約、用 方法、選択する IAMロールを選択します.
- 選択する AmazonSageMakerサービスカタログ製品の起動ロール.
- 選択する 創造する.
- ソフトウェア設定ページで、下図のように グループ、役割、およびユーザー タブを選択 グループ、役割、ユーザーを追加する.
- ソフトウェア設定ページで、下図のように 役割 タブで、SageMakerStudioドメインを設定するときに使用したロールを選択します。
- 選択する アクセスを追加.
選択したロールを覚えていない場合は、データサイエンスアカウントで、SageMakerコンソールに移動して[ Amazon SageMakerスタジオ。 スタジオで まとめ セクションで、属性を見つけます 実行の役割。 前の手順でこの役割の名前を検索します。
完了です。 次に、このテンプレートを使用してプロジェクトを作成します。
プロジェクトを作成する
前のセクションでは、マルチアカウント環境を準備しました。 次のステップは、新しいテンプレートを使用してプロジェクトを作成することです。
- データサイエンスアカウントを使用してコンソールにサインインします。
- SageMakerコンソールで、ユーザーと一緒にSageMakerStudioを開きます。
- 選択する コンポーネントとレジストリ
- ドロップダウンメニューで、 プロジェクト.
- 選択する プロジェクトを作成する.
ソフトウェア設定ページで、下図のように プロジェクトを作成する ページ SageMakerテンプレート デフォルトで選択されています。 このオプションは、組み込みのテンプレートを一覧表示します。 ただし、マルチアカウント展開用に準備したテンプレートを使用する必要があります。
- 選択する 組織テンプレート.
- 選択する マルチアカウント展開.
- 選択する プロジェクトテンプレートを選択します.
テンプレートが表示されない場合は、前のセクションのすべての手順を正しく完了していることを確認してください。
- プロジェクト詳細 セクション、 名前 、iris-multi-01と入力します。
プロジェクト名は15文字以下である必要があります。
- プロジェクトテンプレートパラメータ、各ターゲットアカウント(ステージングと本番)で作成したロールの名前を使用し、次のプロパティを提供します。
SageMakerExecutionRoleStagingName
SageMakerExecutionRoleProdName
- ステージングおよび本番OU用に以前に作成したOUIDを取得し、次のプロパティを提供します。
OrganizationalUnitStagingId
OrganizationalUnitProdId
- 選択する プロジェクトを作成する.
すべてのリソースのプロビジョニングには数分かかります。その後、プロジェクトは プロジェクト セクション。 プロジェクトを選択すると、プロジェクトのメタデータを含むタブが開きます。 ザ・ モデルグループ tabは、プロジェクトと同じ名前のモデルグループを選択します。 また、プロジェクトのプロビジョニング中に作成されました。
これで、データサイエンティストがモデルのトレーニングを開始する準備が整いました。
モデルのトレーニング
プロジェクトの準備ができたので、モデルをトレーニングします。
- ダウンロード サンプルノート このウォークスルーに使用します。
- 選択する フォルダ アイコンをクリックして、作業領域をファイル管理に変更します。
- 選択する フォルダを作成する
- フォルダの名前を入力します。
- フォルダ名を選択します。
- 選択する ファイルをアップロード
- ダウンロードしたJupyterノートブックを選択し、新しいディレクトリにアップロードします。
- ノートブックを選択して、新しいタブを開きます。
カーネルを選択するように求められます。
- 選択する Python3(データサイエンス).
- 選択する 選択.
- ノートブックのXNUMX番目のセルで、
project_name
プロジェクトに付けた名前の変数(この投稿では、iris-multi-01
).
これで、Jupyterノートブックを実行できます。 このノートブックは、モデルのトレーニングと登録のXNUMXつのステップだけで非常に単純なパイプラインを作成します。 それは使用します アイリスデータセット と XGBoostビルトインコンテナ アルゴリズムとして。
- ノートブック全体を実行します。
次のコードを含むセルを実行した後、プロセスには時間がかかります。
これによりトレーニングジョブが開始され、完了するまでに約3分かかります。 トレーニングが終了すると、Jupyterノートブックの次のセルは、モデルレジストリ内のモデルの最新バージョンを取得し、次のようにマークします。 Approved
。 または、SageMaker StudioUIからモデルを承認することもできます。 に モデルグループ タブで、モデルグループと目的のバージョンを選択します。 選択 最新状況 & 承認 保存する前に。
これはデータサイエンティストの仕事の終わりですが、CI / CDパイプラインの実行の始まりです。
アマゾンイベントブリッジ モデルレジストリを監視します。 リスナーは、プロビジョニングされた状態で新しいデプロイメントジョブを開始します AWS コードパイプライン ワークフロー(SageMaker Studioプロジェクトを起動して作成)。
- CodePipelineコンソールで、プレフィックスで始まるパイプラインを選択します
sagemaker
-、その後にプロジェクトの名前が続きます。
モデルを承認するとすぐに、デプロイメントパイプラインの実行が開始されます。 パイプラインが状態に達するのを待ちます DeployStaging
。 この段階は、完了するまでに約10分かかる場合があります。 ステージングアカウントに最初のエンドポイントを展開した後、パイプラインがテストされ、次のステップに進みます。 ApproveDeployment
。 このステップでは、手動による承認を待ちます。
- 選択する レビュー.
- テキストボックスに承認理由を入力します。
- 選択する 承認.
これで、モデルが本番アカウントにデプロイされました。
AWS CloudFormationコンソールでパイプラインを監視して、ターゲットアカウントにエンドポイントをデプロイするためにパイプラインが作成するスタックとスタックセットを確認することもできます。 各アカウントにデプロイされたエンドポイントを確認するには、ステージングアカウントまたは本番アカウントとしてSageMakerコンソールにサインインし、 エンドポイント ナビゲーションペインで。
清掃
この例でプロビジョニングしたすべてのリソースをクリーンアップするには、次の手順を実行します。
- メインアカウントでコンソールにサインインします。
- AWS CloudFormationコンソールで、をクリックします StackSetsと削除 次の項目(エンドポイント):
- 突く –
sagemaker-<<sagemaker-project-name>>-<<project-id>>-deploy-prod
- 上演 –
sagemaker-<<sagemaker-project-name>>-<<project-id>>-deploy-staging
- 突く –
- ラップトップまたはワークステーション端末で、 AWSコマンドラインインターフェイス (AWS CLI)そして次のコードを入力してプロジェクトを削除します:
を使用していることを確認してください AWSCLIの最新バージョン.
独自のSageMakerプロジェクトのテンプレートを作成してカスタマイズする
SageMakerプロジェクト & SageMakerMLOpsプロジェクトテンプレート は、MLモデルのトレーニング、最適化、評価、デプロイに必要なインフラストラクチャ全体を自動的に作成および構成するために使用できる強力な機能です。 SageMakerプロジェクトは、エンドツーエンドのMLソリューションを簡単に作成できるようにするAWS ServiceCatalogでプロビジョニングされた製品です。 詳細については、を参照してください。 AWSサービスカタログ管理者ガイド.
製品は、AWS ServiceCatalogによって管理されるCloudFormationテンプレートです。 テンプレートとその要件の詳細については、を参照してください。 AWSCloudFormationテンプレートフォーマット.
MLエンジニアは、Infrastructure as Code(IaC)の概念を使用して、複数の環境を設計し、このセットアップのすべての詳細をCloudFormationテンプレートとして表現できます。 CI / CDパイプラインを使用して、これらのさまざまな環境とタスクを統合することもできます。 SageMakerプロジェクトは、インフラストラクチャの複雑さを単純なプロジェクトの形式でラップする簡単で安全かつ簡単な方法を提供します。このプロジェクトは、他のMLエンジニアやデータサイエンティストが何度も起動できます。
次の図は、カスタムSageMakerプロジェクトテンプレートを作成して公開するために完了する必要のある主な手順を示しています。
これらの手順については、セクションで詳しく説明しました。 カスタムSageMakerStudioプロジェクトテンプレートのインポート & プロジェクトを作成する.
MLエンジニアとして、設計と 新しいCloudFormationテンプレートを作成します プロジェクトの場合は、AWS Service Catalogポートフォリオを準備し、それに新しい製品を追加します。
データサイエンティストとMLエンジニアの両方が、SageMaker Studioを使用して、カスタムテンプレートを使用して新しいプロジェクトを作成できます。 SageMakerはAWSService Catalogを呼び出し、CloudFormationテンプレートで説明されているインフラストラクチャのプロビジョニングを開始します。
データサイエンティストとして、モデルのトレーニングを開始できます。 モデルレジストリに登録すると、CI / CDパイプラインが自動的に実行され、モデルがターゲットアカウントに展開されます。
この投稿のCloudFormationテンプレートをテキストエディターで見ると、この投稿で概説したアーキテクチャが実装されていることがわかります。
次のコードは、テンプレートのスニペットです。
テンプレートにはXNUMXつの重要なセクションがあります。 Parameters
(テンプレートの入力パラメータ)および Resources
。 SageMakerプロジェクトテンプレートでは、テンプレートにXNUMXつの入力パラメーターを追加する必要があります。 SageMakerProjectName
& SageMakerProjectId
。 これらのパラメーターは、SageMakerStudioによって内部的に使用されます。 必要に応じて、他のパラメーターを追加できます。
スニペットの[リソース]セクションで、次のように作成されていることがわかります。
- あるステージから別のステージに渡された中間アーティファクトを格納するためにCI / CDパイプラインによって使用される新しいS3バケット。
- An AWS コードコミット デプロイメントおよびテスト段階で使用されるアーティファクトを格納するリポジトリ。
- An AWS コードビルド プロジェクトでアーティファクトを取得し、プロジェクト用に検証および構成します。 マルチアカウントテンプレートでは、このプロジェクトは新しいモデルレジストリも作成し、CI / CDパイプラインが新しいモデルを展開するために使用します。
- CI / CDパイプラインのすべてのステップを調整するCodePipelineワークフロー。
新しいモデルをモデルレジストリに登録するか、新しいアーティファクトをCodeCommitリポジトリにプッシュするたびに、このCodePipelineワークフローが開始されます。 これらのイベントは、 EventBridgeルール、同じテンプレートでプロビジョニングされます。 CI / CDパイプラインには次の段階があります。
- ソース – CodeCommitリポジトリからアーティファクトを読み取り、他のステップと共有します。
- 完成に向けてあなたの背中を押してくれる、執筆のための持続可能で本物のモーメンタムを作り出す。 – CodeBuildプロジェクトを実行して、以下を実行します。
- モデルレジストリがすでに作成されているかどうかを確認し、必要に応じて作成します。
- 次のXNUMXつの展開段階で使用される新しいCloudFormationテンプレートを準備します。
- デプロイステージング –次のコンポーネントが含まれています。
- DeployResourcesステージング –で準備されたCloudFormationテンプレートを取得します
Build
ステップし、新しいスタックをデプロイします。 このスタックは、ターゲットアカウントに新しいSageMakerエンドポイントをデプロイします。 - テストステージング –デプロイされたエンドポイントをテストするカスタムPythonスクリプトを実行するXNUMX番目のCodeBuildプロジェクトを呼び出します。
- 承認導入 –手動承認ステップ。 承認された場合は、次の段階に進んでエンドポイントを本番環境にデプロイします。承認されなかった場合は、ワークフローを終了します。
- DeployResourcesステージング –で準備されたCloudFormationテンプレートを取得します
- 製品のデプロイ - に似ている
DeployStaging
、同じCloudFormationテンプレートを使用しますが、入力パラメーターが異なります。 新しいSageMakerエンドポイントを本番アカウントにデプロイします。
新しいトレーニングプロセスを開始して、SageMakerプロジェクトに関連付けられたモデルレジストリにモデルを登録できます。 この投稿で提供されているJupyterノートブックを使用して、独自にカスタマイズしてください MLパイプライン データセットを準備し、モデルをデプロイする前にモデルをトレーニング、最適化、およびテストします。 これらの機能の詳細については、を参照してください。 SageMakerプロジェクトでMLOpsを自動化する。 その他のパイプラインの例については、 GitHubレポ.
結論と次のステップ
この投稿では、SageMaker Pipelinesを使用して、複数のAWSアカウントでMLモデルをトレーニングおよびデプロイするための独自の環境を準備する方法を説明しました。
SageMakerプロジェクトでは、MLプロジェクトをSageMakerプロジェクトテンプレートのライブラリとして管理し始めると、環境のガバナンスとセキュリティを大幅に向上させることができます。
次のステップとして、SageMakerプロジェクトテンプレートを変更し、組織のニーズに合わせてカスタマイズしてみてください。 必要な数のステップを追加し、CI / CDイベントをキャプチャしてユーザーに通知したり、他のサービスを呼び出して包括的なソリューションを構築したりできることを覚えておいてください。
著者について
サミール・アラウージョ AWSのAI / MLソリューションアーキテクトです。 彼は、AI / MLソリューションを作成する顧客が、AWSプラットフォームを使用してビジネス上の課題を解決するのを支援しています。 彼は、コンピュータービジョン、自然言語処理、予測、エッジでのMLなどに関連するいくつかのAI / MLプロジェクトに取り組んできました。 彼は自由な時間にハードウェアと自動化プロジェクトで遊ぶのが好きで、ロボット工学に特に興味があります。