Amazon SageMaker Pipelines がどんなことをしているか図解しながら進めてみた

2021.01.31

はじめに

皆さんおはようございます。

SageMaker してますか?

re:Invent2020 に怒涛の新機能を発表していましたが、本稿では下記の弊社ブログでも速報されていた Amason SageMaker Pipelines (以下、Pipelines) のチュートリアルを図解してやってみました。

【速報】機械学習にもCI/CDの波が。Amazon SageMaker Pipelines 登場! #reinvent | Developers.IO

対象読者としては、 SageMaker における CI/CD に興味がある方になります。

Amason SageMaker Pipelines を理解して使いこなしている方には不要です。

本稿の背景として、公式ドキュメントである SageMaker MLOps Project Walkthrough および AWSブログ 新機能 — Amazon SageMaker Pipelines が機械学習プロジェクトに DevOps 機能を提供 を目を通してたのですが、 何だかすごいのだけど、何しているのかが全然分らない。。 という感じなのでした。

ということで、手を動かしながら何をしているのかが分かるように図解してみようと思いました。

これがその図となります。

sagemaker_pipelines_archi

この図を中心にしてチュートリアルを進めます。

なお、SageMaker MLOps Project Walkthrough に画像付きの説明がされているので、重複を避けて個人的に気になった点を中心に記載していきます。

やること

  1. SageMaker MLOps プロジェクトの作成
  2. CodeCommit のクローンを作成
  3. コードを変更する(CodePipelineが実行される)
  4. モデルを承認する
  5. モデルを本番環境にデプロイする
  6. リソース削除する

1 プロジェクトの作成

まずは、プロジェクトを作成します。

プロジェクトは以下2つから選択できます。

  • SageMaker templates: SageMakerが提供するプロジェクトテンプレート
  • Organization templates: 自分たちの組織で作成した独自のカスタムプロジェクトテンプレート

SageMaker templates は、SageMaker が SageMakerStudio ユーザーに提供するAWS Service Catalog の製品です。

SageMaker Studioをオンボードまたは更新するときにアクセス許可を有効にすると、Service Catalog コンソールに表示されます。

以下が有効化されたタイミングですね。

project_required

Service Catalog のポートフォリオにインポートされます。

portfolio

その中に今回利用する SageMaker templates があります。

MLOps_template

詳細は MLOps Project Templates を参照下さい。

なお、Service Catalog についても簡単にまとめておきます。

AWS Service Catalog の基本的な概念

下図が概要です。簡潔に述べると、組織内で一元的にデプロイリソースを管理して配布することができるサービスです。

service_catalog_img

基本的な概念は下表です。

構成要素 内容 特徴
製品(プロダクト) CloudFormationテンプレート バージョン管理が可能
ポートフォリオ 製品の集合 ポートフォリオ単位でユーザーに製品の使用を許可
製品に対する制約の管理が可能
ポートフォリオを他のAWSアカウントに共有することも可能
制約 ポートフォリオごとに各製品に制約を設定 テンプレート制約, 起動制約, 通知制約などのユーザー制約がある

本稿では、(ドキュメントでは Organization templates と書いてますが) SageMaker templates を使います。

choose_template

2 CodeCommit のクローンを作成

プロジェクト作成が完了すると、実行された CloudFormation によって冒頭の構成が作成されます。

下イメージは 作成された2つの CodeCommit リポジトリです。

codecommit_repos

codecommit_repos

CodeCommit を Jupyter Notebook にクローンします。

サイドバーにファイル群が表示されます。

clone_repos

3 コードを変更する

エラーが出るような更新をしなければ何でも良いのですが、pipelines/abalone/pipeline.pytraining_instance_typeml.m5.xlarge から ml.m5.large に変更してコミット&プッシュします。

git_push

CodeCommit の状態変更を検知して 上の CodePipeline が実行されます。

pipeline1

CodeBuildによって、前処理、トレーニング、検証などの機械学習におけるパイプライン処理を行っています。

内容としては、弊社ブログでも紹介されている Pipeline を利用します。

Amazon SageMakerでPipelineを使って推論を行う #reinvent | Developers.IO

ビルドが完了しました。

codebuild1

4 モデルを承認する

機械学習の pipeline によって、S3にアップロードされた evaluation の値を見て SageMaker Studio で承認をします。

model approved

5 モデルを本番環境にデプロイする

モデルを承認すると、モデルパッケージが変更したことを検知してモデルデプロイの CodePipeline がスタートします。

pipelines2

model_deploy

ステージング環境を構築してテストをすると手動承認プロセスが入ります。

cd_approve

承認すると本番環境にデプロイして完了になります。

done

6 リソース削除する

利用しない場合は、忘れずにインスタンスを削除しましょう。

最後に

かなり大掛かりなパイプラインでした。。

カスタムテンプレートについては、 Create Custom Project Templates - Amazon SageMaker で、「SageMaker が提供するテンプレートを使用して、コードとリソースを整理し、その上で構築する方法を理解することから始めることをお勧めします。」と記載しています。

その通り、まずは SageMaker templates を元にして手を加えてカスタムテンプレートを作成するのが適切と感じました。0から構築するとなると、相当大変だろうと思いましたが、少しずつコンポーネントを作成していって統合すると良さそうです。

以上です。

どなたかのお役に立てば幸いです。

参考: