SageMaker の各モデル開発方法まとめ

# 初めに
前回、[Amazon SageMaker Studioのアーキテクチャ](https://qiita.com/ishidahra/items/41132cb9ff1f2b838236)でSageMaker Studioのアーキテクチャについて整理しましたが、SageMakerを実際に使ってモデル開発をする方法は複数提供されています。
どのような場合に、どの方法を使うのが良いかまとめたいと思います。

# 機械学習レンズ - AWS Well-Architected フレームワーク
AWS Well-Architected は、AWSにおいて、各種アプリケーションやITシステムを、高い安全性、性能、障害耐性、効率性を備えたアーキテクチャで構築する際に参照するベストプラクティスフレームワークですが、AWSにおける機械学習開発にも同様に参照できるベストプラクティスフレームワークとして、「機械学習レンズ」が公開されています。
https://docs.aws.amazon.com/ja_jp/wellarchitected/latest/machine-learning-lens/welcome.html

詳細は割愛しますが、「一般的な設計原則」として、6つの設計原則が存在しており、その1つに以下があります。
- より高い抽象化を選ぶことで、より迅速に成果を達成する

これが何を意味するかというと、より「マネージド」なサービス、機能を使って、「差別化につながらない重労働」を排除し、開発コストを削減する方法から検討を始めるのが良いと言っています。

AWSには、多くのAI/MLサービスが存在しており、以下のように「機械学習スタック」として整理されていますが、この図でいうと、より「マネージド」な範囲が広いAIサービスから利用検討を開始して、要件に合わない場合は、MLサービス(SageMaker)を活用して、モデルを自分たちで開発していくという流れになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2532317/f02cf532-684b-2a32-9263-324e9242c54c.png)
※https://aws.amazon.com/jp/about-aws/events/2021/reinvent/
「業務データにあわせた AWS AI/ML サービスのチューニング」のセッション資料を引用

今回は、「MLサービス(SageMaker)を活用して、モデルを自分たちで開発していく」を深堀して整理したいと思います。
※ここでは、あくまでも**モデルを自分たち開発していく**を整理したいので、事前構築済みのモデルをデプロイして使うような方法（AWS Marketplace（SageMaker モデルパッケージ）や、JumpStartのソリューション、構築済みモデルなど）は対象外とします。

# SageMaker のモデル開発方法まとめ
SageMakerでモデル開発をする方法として、以下があります。順番は、「差別化につながらない重労働」を排除できる度合が大きい順番、つまり手がかからず簡単かつ迅速にモデル構築できる順番で並べています。（要件によっては順番が前後する可能性はあります）
手がかからないの裏返しにはなりますが、自分たちでカスタマイズできる領域は当然少なくなります。（より下位な方法ほどカスタマイズが多くできる）

1. SageMaker Canvas：ノーコード（GUI）
1. SageMaker Autopilot：ノーコード（GUI）
1. SageMaker JumpStart：ノーコード（GUI）
1. AWS Marketplace（SageMaker アルゴリズム）：ノーコード（GUI）
1. SageMaker 組み込みアルゴリズム：CUI
1. SageMakerマネージド機械学習フレームワークイメージ：CUI
1. カスタム Docker イメージ（BYOC）：CUI

# SageMaker の各モデル開発方法
それぞれの方法の解説および適用ケースについてまとめます。
## １．SageMaker Canvas
### 概要
ノーコードで、GUIで機械学習モデルを構築できるサービスです。データを用意しインポートするだけで、自動でモデル構築（AutoML）をしてくれ、かつモデル評価結果まで詳細に可視化してくれます。
https://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/canvas.html

動作しているものを見ると、裏ではSageMaker AutopilotやAmazon Forecastが実際には動作しているようです。（データから問題設定を自動で判別し、使うアルゴリズムを決定している）

### 適用ケース
- 機械学習やインフラの深い知識があるメンバーがいない。
- 初めての課題設定で、まずはすぐにモデル構築して、使う特徴量にあたりをつけたり、モデル構築が可能そうかのあたりをつけたい。
- 本番提供はまだ先で、検証（POC）段階。（各種MLOps機能と連携させるには検討事項が多そうなため）


## ２. SageMaker Autopilot
### 概要
データに基づいて最適なモデルを自動的に構築してくれます。こちらもSageMaker Canvasと同様にAutoML機能を提供してくれていますが、GUIで利用するには、SageMaker Studioを構築する必要があります。また、データの格納場所はS3となり、指定が必要となります。
実行後は、ノートブックファイル（.ipynb）を出力し、Autopilotで構築したモデルを再現したり、カスタマイズして使えるようにしてくれ、よりデータサイエンティスト向けの機能が充実していると思います。
https://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/autopilot-automate-model-development.html


### 適用ケース
- 初めての課題設定で、まずはすぐにモデル構築して、使う特徴量にあたりをつけたり、モデル構築が可能そうかのあたりをつけたい。
- 本番提供するモデルをなるべく手をかけずにGUIを利用して構築したい。（モデルデプロイが数クリックで可能）


## ３. SageMaker JumpStart
### 概要
わずか数クリックで導入可能なプリビルドの機械学習（ML）ソリューションを提供してくれます。自分たちでモデルを構築する場合、人気の高いアルゴリズム（例：XGBoostやLightGBMなど）をGUIで実行することが可能です。
https://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/studio-jumpstart.html

### 適用ケース
- GUIで人気の高いアルゴリズム（例：XGBoostやLightGBMなど）を使って、モデルを構築したい。
- 本番提供するモデルをなるべく手をかけずにGUIを利用して構築したい。（モデルデプロイが数クリックで可能）


## ４. AWS Marketplace（SageMaker アルゴリズム）
### 概要
AWS MarketplaceでSageMaker TrainingJobで利用できるアルゴリズム（イメージ）を購入することが可能です。
これを利用すれば、マネジメントコンソールやSDK、APIを利用してモデル構築することができます。
https://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/sagemaker-marketplace.html

### 適用ケース
- コスト的に余裕があり、自分たちの要件に最適なアルゴリズム製品を使って高精度なモデルを構築したい。
- GUIでモデルを構築したい。


## ５. SageMaker 組み込みアルゴリズム
### 概要
SageMakerが提供しているトレーニングアルゴリズム（Dockerイメージ）を利用してモデル構築できます。10を超えるアルゴリズムが用意されており、そのどれかがニーズを満たしている場合、すばやくモデル構築することが可能です。
基本的には、SageMakerSDKなどを利用してコードベースでの利用となります。
https://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/algos.html

おそらく、いろんなSageMaker入門コンテンツで解説されているのはこの方法が一番多いです。

### 適用ケース
- 高度なチューニングもできるメンバーがいる。
- 組み込みアルゴリズムで自分たちの要件にあったものが存在している。
- HPOや、Debuggerなど各種SageMakerの機能と連携したい。


## ６. SageMakerマネージド機械学習フレームワークイメージ
### 概要
組み込みアルゴリズムにはない、機械学習フレームワーク（例：TensorFlow や PyTorchなど）を利用してモデル構築したい場合、SageMakerが用意していくれているDockerイメージを利用して簡単に実行環境を用意できます。
ただし、モデルを構築するためのコードは自分たちで実装する必要があるため、やや高度なスキルを必要とします。
https://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/frameworks.html

### 適用ケース
- 高度なチューニングやコーディングができるメンバーがいる。
- 組み込みアルゴリズムにはないが、自分たちの要件にあったフレームワークがサポートされている。
- HPOや、Debuggerなど各種SageMakerの機能と連携したい。


## ７. カスタム Docker イメージ（BYOC）
### 概要
SageMakerが提供してくれていない、フレームワークや独自のソースを使ってモデル構築したい場合、自分たちでDockerイメージを利用してSageMakerの各種機能で利用できる実行環境を用意できます。
コーディングだけでなく、Dockerイメージの構築も含めて自分でやる必要があるので、非常に高度なスキルが必要となります。
一方で、最も柔軟にカスタマイズをすることができます。
https://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/docker-containers.html

### 適用ケース
- 高度なチューニングやコーディング、およびインフラスキルもあるメンバーがいる。
- 組み込みアルゴリズムも、SageMakerマネージド機械学習フレームワークイメージも自分たちの要件に合わない。
- HPOや、Debuggerなど各種SageMakerの機能と連携したい。


# まとめ
SageMakerによる各モデル構築方法について整理しました。
開発の状況によりけりとなりますが、以下の流れで使っていくのがいいのかなと思います。
- メンバーもそろっておらず、手元にデータだけある状況で早くモデル構築可否を判断したいにSageMaker Canvasを利用する。
- 機械学習の知見のあるメンバーがアサインされ、モデル開発に着手する際に、まずはSageMaker Autopilot、SageMaker JumpStartにより、特徴量やアルゴリズム、ハイパーパラメータチューニングの方法についてあたりをつける。
- 本番デプロイ可能なモデルを作れたらデプロイする。
- 今回チューニングが必要なら、上記の５～７のCUI系の方法でカスタマイズしていく。

ここ2、3年で様々な機能追加があったおかげで、GUIベースやAutoMLでモデル構築できるようになり選択肢が増えて大変うれしいですが、使い分けについてAWSからも公式見解があるとよりうれしいなと思っています。（公開情報を知らないだけだったらすみません、、、）