AWS公式資料で挑むMLS認定(10)-Amazon SageMakerの基本

##### [前回] [AWS公式資料で挑むMLS認定(9)-Amazon PollyをPython Boto3で検証](https://qiita.com/mingchun_zhao/items/c66500645dd9b2a7e06e)

## はじめに

今回から、Amazon SageMakerを勉強します。

## Amazon SageMakerとは

- 機械学習に基づいたモデルを、アプリケーションとすばやく簡単に統合できる、フルマネージドサービス
    - Amazon社の機械学習アプリケーションの開発における20年の経験に基づいて構築
- 迅速、簡単に機械学習モデルの構築とトレーニングを行い、稼働準備が整った環境に直接デプロイ可能
- サーバー管理不要で、統合されたJupyterオーサリングノートブックインスタンスから、調査/分析用データソースにアクセス可能
- 一般的な機械学習アルゴリズムを使用可能
    - 大規模データを分散環境で効率良く実行できるよう最適化されている
- 独自のアルゴリズムやフレームワークもネイティブでサポートされる
    - 特定ワークフローに適応する柔軟な分散トレーニングオプションを提供
- ユースケース例
    - 製品のレコメンデーション
    - パーソナライズ
    - インテリジェントショッピング
    - ロボット工学
    - 音声支援デバイス

## 機械学習モデルを作成するための典型的なワークフロー
※ 引用元: [Amazon SageMakerデベロッパーガイド](https://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/how-it-works-mlconcepts.html)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2523098/b95ed136-d047-55c0-e690-12b150de5921.png)

### 機械学習処理フローの概要
- アルゴリズムとサンプルデータを使用しモデルをトレーニング
- モデルをアプリケーションに統合し、リアルタイムで大規模な推論を生成
    - 推論(inference)とは、入力データに対し、機械学習のモデル(計算式/計算方法)を用いて、出力を生成する作業
- ※ 本番環境で、モデルは通常、数百万のサンプルデータ項目から学習し、20ミリ秒未満で数百の推論を生成

### 機械学習ワークフローの詳細アクティビティ

- サンプルデータを生成
    - モデルのトレーニングには、サンプルデータが必要
    - 必要なデータタイプは、ビジネス要件(モデルにより生成させる推論)によって異なる
        - 例えば、手書き数字の画像から数字を予測するモデルのトレーニングには、手書き数字画像が必要

- データ前処理
    - モデルのトレーニングに生のデータをそのまま使用できない場合が多い
    - データ前処理の手順
        - ① データ取得
            - 社内のサンプルデータリポジトリ
            - 公開データセット
            - 通常、データセットをリポジトリにプル
        - ② データクリーンアップ
            - モデルトレーニングを改善するため、データ検査とクリーンアップ
                - 例えば、スペルチェックを使って、コメントや説明を含む列のスペルミスをクリーンアップ
        - ③ データを準備/変換
            - データ変換を実行し、パフォーマンス向上させる
                - 例えば、二つの属性(温度と湿度)を結合し、新しい属性にすることでより良いモデルを得られる
    - SageMakerのデータ前処理
        - ノートブックインスタンス上のJupyterノートブックでサンプルデータを前処理
            - ノートブックを使用しデータセットを取得
            - モデルトレーニングを行うための確認と準備

- モデルのトレーニングと評価
    - モデルのトレーニング
        - アルゴリズムを選択
            - Amazon SageMaker組み込みアルゴリズムを使用可能
        - コンピューティングリソースも必要
            - 考慮事項
                - トレーニングデータセットのサイズ
                - どれほど早く結果を得たいか
            - Amazon SageMakerで使用可能なリソース
                - 単一の汎用インスタンスから
                - GPUインスタンスの分散クラスターまで
    - モデルの評価
        - トレーニングしたモデルを評価し、推論の正確性が許容可能か判断
        - SageMakerでは推論のため、下記を使用しモデルにリクエストを送信
            - AWS SDK for Python(Boto)
            - SageMakerが提供する高レベルPythonライブラリ
        - SageMakerノートブックインスタンスのJupyterノートブックを使用し、モデルのトレーニングと評価を行う
- モデルのデプロイ
    - モデルをアプリケーションと統合しデプロイする前に、モデルを従来の方法で設計し直す必要あり
    - SageMakerのホスティングサービスでは、モデルを独立してデプロイし、アプリケーションコードから切り離す

## 機械学習は継続的なサイクル

モデルをデプロイしたら終わり、ではない。

- 推論のモニタリング
- グラウンドトゥルース(Ground Truth)の収集
    - グラウンドトゥルースとは、推論によって提供される情報ではなく
        - 直接観察と測定によって提供される、実際または真実であることがわかっている情報
- モデルの評価
- ドリフトを特定
    - データドリフトとは、機械学習モデルをトレーニングした時のデータと、予測を行う時点でのデータがずれていく現象(モデルの劣化)
- トレーニングデータを更新し、新しく収集したグランドトゥルースを含めることで、推論の精度を高める
- 新しいデータセットでモデルを再トレーニング
    - より多くのサンプルデータが利用可能になれば
    - モデルの再トレーニングを続け、精度を上げることができる


## Amazon SageMakerのサービス構成

- SageMaker Canvas
    - ビジネスアナリスト向け
    - ビジュアルインターフェイスを使用し、機械学習予測を行う
- SageMaker Studio
    - データサイエンティスト向け
    - 統合された機械学習環境で、下記処理をすべて同じアプリケーションで行うことが可能
        - データ準備
        - モデル構築
        - トレーニング
        - デプロイ
        - 分析
- SageMaker MLOps
    - 機械学習エンジニア向け
    - モデルを大規模にデプロイおよび管理

## Amazon SageMakerの特徴

- 主要な機械学習フレームワーク/ツールキット/プログラミング言語をサポート
    - TensorFlow
    - PyTorch
    - MXNet

## Amazon SageMaker Processingによる、データの調査/分析/処理

- Processingを用いて、下記機能を持つジョブを簡単かつ大規模に実行可能
    - データの事前/事後処理
    - 特徴エンジニアリングの実行
    - モデルの評価
- Processingを、SageMakerの他の重要機械学習タスク(トレーニングやホスティングなど)と組み合わせて使用可能
    - フルマネージド機械学習環境のメリットを提供
        - SageMakerに組み込まれたすべてのセキュリティおよびコンプライアンスのサポートを含む
- Processing使用により生まれる柔軟性
    - 組み込みのデータ処理コンテナを使用したり、独自のコンテナを持ち込み可能
    - マネージドインフラストラクチャで実行するカスタムジョブを送信し、以下を実現
        - コンピューティングインスタンスを起動
        - 入力データを処理および分析
        - 完了時にリソースを解放

## おわりに

Amazon SageMakerの基本を勉強しました。
機能と特徴から、試験準備におけるその重要性が窺えます。
次回も、Amazon SageMakerを続けます。お楽しみに。

##### [次回] [AWS公式資料で挑むMLS認定(11)-Amazon SageMakerチュートリアル(XGBoostモデルの構築)](https://qiita.com/mingchun_zhao/items/637c4a25ffa7fa0919d2)