Upgrade to Pro — share decks privately, control downloads, hide ads and more …

【雲勉】Amazon SageMaker 入門 〜組み込みアルゴリズムで機械学習を試してみよう〜

mfukuta
January 13, 2022

【雲勉】Amazon SageMaker 入門 〜組み込みアルゴリズムで機械学習を試してみよう〜

mfukuta

January 13, 2022
Tweet

More Decks by mfukuta

Other Decks in Technology

Transcript

  1. アイレットご紹介 – 会社概要 3 ◼ 社名 アイレット株式会社 ◼ 所在地 〒105-6307

    東京都港区⻁ノ⾨1-23-1 ⻁ノ⾨ヒルズ森タワー7F 設⽴2003年10⽉15⽇ ◼ 資本⾦ 7,000万円 ◼ 代表者名 岩永充正 ◼ 従業員数 682名(2021年4⽉末時点) ◼ 事業内容 ITコンサルティング、システム開発、 システム保守・運⽤、 サーバハウジング・ホスティング ◼ 主要株主 KDDI株式会社 AWS 認定保有数2,000突破 https://cloudpack.jp/info/20220104.html
  2. アイレットご紹介 – AWS APNパートナー 4 cloudpackは、Amazon Elastic Compute Cloud (Amazon

    EC2)やAmazon Simple Storage Service (Amazon S3)をはじめとする AWSの各種プロダクトを利⽤する際の導⼊・設計から運⽤保守を含んだフルマネージドのサービスを提供し、バックアップや24時間 365⽇の監視/障害対応、技術的な問い合わせに対するサポートなどを⾏っております。 2013年6⽉4⽇には、AWSパートナーネットワーク(APN)において、⽇本初のAPNプレミアティアコンサルティングパートナーの⼀社と して認定されたのをはじめ、その後9年連続で認定されています。 『APNプレミアティアコンサルティングパートナー』はAPNプログラムの中で最上位のパートナーであり、厳しいクライテリアを満たした パートナーのみが選出され、世界で128社のみが認定されています。9年連続で認定された⽇本企業としては、cloudpack(アイレット) と株式会社野村総合研究所の2社のみとなります。
  3. アイレットご紹介 – APN Consulting Partner of the Year 2019 –

    Japan 5 AWSのパートナーネットワークに登録している企業が参加した「AWS Partner Summit Tokyo」の中で、数あるアワードの中で最も実績 をあげたパートナーであることを⽰す『APN Consulting Partner of the Year 2019 – Japan』を受賞しました。cloudpackは、同賞を5度 ⽬の受賞となります。 『APN Consulting Partner of the Year 2019 – Japan』は、AWSが年間を通じて営業・技術・マーケティング分野においてパートナーと しての総合⼒を判断し、AWSのビジネスに最も貢献したパートナーに贈られるものです。cloudpackは、2013年から継続的にプレミアコン サルティングパートナーとして認定されているほか、業界に影響を与える多数のお客様事例のリリースや、数千台規模のマイグレーション 案件、基幹システムの移⾏を⼿掛けるなど、さらなるAWSビジネスの拡⼤に貢献しました。 また、サーバーレスやマシンラーニングなどの新サービスも積極的に採⽤して成功させる⼀⽅で、エンタープライズ案件も推進してきた結 果、著しい売り上げ伸び率を達成 したことが評価されました。
  4. 0.講師自己紹介 7 ◼ 岩佐 孝浩(いわさ たかひろ) • クラウドインテグレーション事業部 大阪開発セクション •

    AWS を活用したアプリケーションの要件定義・設計・開発が主業務 • 2020年11月入社 • 最近は SageMaker と Greengrass を利用したエッジ推論の PoC をお手伝いしています • AWS Top Engineers 2020/2021 (AWS 以外の勉強もしていきたい)
  5. アジェンダ 8 0. 自己紹介 1. はじめに(19:05~19:05) 2. 機械学習概要 (19:05~19:25) 3.

    SageMaker 概要 (19:25~19:35) 4. SageMaker Studio セットアップ (19:35~19:45) 5. 組み込みアルゴリズムによる機械学習 (19:45~19:55)
  6. 1.はじめに 10 ◼ 前提 • SageMaker に興味がある • AWS と機械学習の基礎知識がある

    ◼ 目的 • 機械学習の概要をおさらいする • SageMaker エコシステムの概要を理解する • 組み込みアルゴリズムを利用して、機械学習を試してみる ◼ 免責 • iret のプロジェクト事例紹介ではありません • ボリュームが多めなので、少し駆け足で進めます • スピーカー自身が機械学習の知見がまだまだのレベルですので、 全員で機械学習/SageMaker の理解を深めるきっかけになれば幸いです
  7. 2.機械学習概要 – 機械学習 (Machine Learning) 12 ◼ 前もってごめんなさい ⚫ とても1時間で終わらないので、最低限の概念と用語の紹介となります。

    ◼ 機械学習 (Machine Learning) の分類 ⚫ 教師あり学習 (Supervised Learning) • 入力データと出力すべきデータをセットで機械学習アルゴリズムに与える手法 • データセットの準備(ラベリング)に人が必要 • 分類 (Classification) と回帰 (Regression) に利用されることが多い • 余談ですが、管理会計でも回帰分析(最小二乗法)を使います。会計とAIの相性の良さが窺えます。 ⚫ 教師なし学習 (Unsupervised Learning) • 入力データのみを機械学習アルゴリズムに与える手法 • 良い結果が得られたとして、「なぜ」を説明することが困難 (これはディープラーニングでも) • クラスタリングや次元削減 (Dimensionality Reduction) に利用されることが多い
  8. 2.機械学習概要 – 機械学習 (Machine Learning) 13 ◼ (続き)機械学習 (Machine Learning)

    ⚫ 強化学習 (Reinforcement Learning) • 入力データと報酬をセットで機械学習アルゴリズムに与える手法 • 出力値に応じて報酬(重み)を与え、報酬が最大になるよう学習 • 統計的解析手法ではない(心理学に近いと思います)
  9. 2.機械学習概要 – 機械学習 (Machine Learning) 14 0 0.2 0.4 0.6

    0.8 1 1.2 0 0.1 0.2 0.3 0.4 0.5 0.6 分類 (Classification) クラスタリング (Clustering) 0 0.2 0.4 0.6 0.8 1 1.2 0 0.2 0.4 0.6 0.8 1 1.2 回帰 (Regression) データが属するクラスやクラスターを推測 例)合格・不合格、犬・猫・鳥 入力値から特定の値を推測 赤い線は訓練で得られた式 (y = ax + b) 例)1 -> 3, 0.5 -> 0.9
  10. 2.機械学習概要 – 深層学習 (Deep Learning) 15 ◼ 深層学習 (Deep Learning)

    • 機械学習手法の一つで、近年の機械学習は、ディープラーニングを指していることが多い • ニューラルネットワーク (Neural Network) を多層化することで、圧倒的な精度を実現 • 特徴量を自動選択できるようになりつつある • 「教師なし学習の一種です」と解説しているページがありますが、正しくは「教師なし学習 にも応用できる」です (特徴量の自動選択と教師なし学習を混同していると思われる) • 良い結果が得られたとして、「なぜ」を説明することが困難 • 訓練に多くのコンピューティング・リソースが必要
  11. 2.機械学習概要 – 深層学習 (Deep Learning) 16 y = 出力 x

    = 特徴量 w = 重み h1, h2 = 隠れ層 (hidden layer) h1[0], h1[1], … h2[2] = 隠れユニット ニューラルネットワークの複雑さを推定する1つの指 標として、重みの総数がある。 入力層 (特徴量) と隠れ層1の重み数 = 4 * 3 (隠れ層1のユニット数) 隠れ層1と隠れ層2の重み数 = 3 * 3 (隠れ層2のユニット数) 隠れ層2と出力層の重み数 = 3 * 1 重み総数 = 12 + 9 + 3 = 24 x[0] x[1] x[2] x[3] h1[0] h1[1] h1[2] h2[0] h2[1] h2[2] y w[0, 0] w[3, 2] 入力層 出力層 隠れ層1 隠れ層2
  12. 2.機械学習概要 – 特徴量 17 ◼ 入力データの形式 • 行列データ • 行をサンプルやデータポイントと呼ぶ

    • 列を特徴量 (Feature) と呼ぶ ◼ 特徴量エンジニアリング • 機械学習の精度・効率を高めるために、特徴量を抽出・変換すること • 収集したデータは、機械学習に不要なデータや変換したほうが良いデータが含まれることが 多いため、前処理 (Preprocessing) と呼ばれるプロセスでデータを加工 • One-hot encoding, Rescaling, PCA など様々な手法がある
  13. 2.機械学習概要 – モデルの評価方法 (k分割交差検証) 18 0% 20% 40% 60% 80%

    100% 分割4 分割3 分割2 分割1 4分割交差検証 (Cross Validation) 緑=訓練データ 青=テストデータ • 分割ごとに訓練データとテストデータの組み合わせを変 更し、各分割の精度を計算する。 • 全ての平均値をモデルの平均値とみなすことができる。 • 分割間で精度のばらつきがある場合、特定の分割に反応 しており、うまく汎化できていない可能性がある。
  14. 2.機械学習概要 – モデルの評価指標 (混同行列) 19 予測 陽性 (Positive) 陰性 (Negative)

    実際 陽性 (Positive) 真陽性 (TP) 偽陰性 (FN) 陰性 (Negative) 偽陽性 (FP) 真陰性 (TN) 2クラス分類 (Binary Classification) の混同行列 (Confusion Matrix) 指標 名称 計算式 説明 問題点 精度 (Accuracy) (TP + TN) / (TP + TN + FP + FN) 正しく予測できた割合 サンプル総数100個のうち、99個が陰性の時、全てを 陰性と予測するだけで、精度は 99% になる。 適合率 (Precision) TP / (TP + FP) 正しく陽性と予測できた割合 (上図の緑色に着目) 偽陰性が重要なケースの場合、この指標だけでは評 価できない。(実際は癌だが健康と予測) 再現率 (Recall) TP / (TP + FN) 実際の陽性データの割合 (上図の赤色に着目) 偽陽性が重要なケースの場合、この指標だけでは評 価できない。(癌の精密検査代が非常に高額など) 全てを陽性と予測するだけで、再現率は100%になる。 f値 (f-score) 2 * (適合率 * 再現率 / (適合率 + 再現 率)) 適合率と再現率の調和平均 サンプルの全てが真陰性の場合、0除算でエラーにな る。 * 癌検診の、陽性=癌、陰性=健康、に置き換えて考えてみると分かりやすいです。
  15. 2.機械学習概要 – AI の歴史 21 • チューリングマシンに端を発するコンピューターが登場して間も無く、1950年代に AI という ワードが出現

    (余談ですが、映画「イミテーション・ゲーム」面白かったです) • AIブームは、第1次 (1950年代後半~1960年代)、第2次 (1980年代~1990年代前半)、第3 次 (2000年代前半~現在) と出現しており、過去2回は期待と現実に大きな乖離があったこと から、失望とともに終焉 • 特に第2次ブームは、日本でも「第五世代コンピュータ」という国家プロジェクトが推進され、 10年間で約540億円が投入されたが、失敗に終わったとの評価が一般的 • 過去のAIブームで課題となった「大規模データ」「コンピューティング・リソース」は、「イ ンターネットの登場」「ハードウェアの性能向上」「クラウドの普及」により、解消されつつ ある • 第3次の期待と現実の乖離は緩やかに収斂し、過去2回のような「終焉」という結果にはならな いと思われる
  16. 2.機械学習概要 – その他 22 ◼ おすすめリソース • 『Pythonではじめる機械学習 ―scikit-learnで学ぶ特徴量エンジニアリングと機械学習の 基礎』O’REILLY

    • 総務省 ICTスキル総合習得プログラム コース3(データ分析) 3-5 人工知能と機械学習 • データ分析以外にも、データ収集、データ蓄積に関する資料もあります • Amazon Machine Learning – Machine Learning Concepts • 現在は利用不可となった Amazon ML のドキュメントですが、機械学習の概念について理 解しやすい内容になっています
  17. 3.SageMaker 概要 – 特徴 24 ◼ AWS で機械学習するためのマネージド・サービス ◼ 機械学習ワークフローに対応する機能が豊富で、SageMaker

    エコシステムが急速に整備されている *1 • 便利になる一方、全体像の把握が困難で、ドキュメントの整備が追いついていない印象 ◼ 機械学習の選択肢が豊富 • 17種類の組み込みアルゴリズム *2 • SageMaker の外で訓練したモデルの利用 (BYOM: Bring Your Own Model) • AWS 提供のコンテナを利用 • TensorFlow, PyTorch などのフレームワークをサポート *3 • 独自アルゴリズムの利用 (BYOC: Bring Your Own Container) • Container も含めて自分で準備したものを持ち込み • マーケットプレイス *1) 「AWS の歴史の中で最も急速に成長しているサービスの 1 つ」と紹介https://aws.amazon.com/jp/sagemaker/ *2) https://docs.aws.amazon.com/sagemaker/latest/dg/common-info-all-im-models.html (2021年12月時点) *3) https://docs.aws.amazon.com/sagemaker/latest/dg/frameworks.html
  18. 3.SageMaker 概要 – ワークフローとエコシステム 25 Clean Prepare Train model Evaluate

    model Deploy to production Monitor SageMaker Studio (IDE) SageMaker Projects (CI/CD) SageMaker Model Building Pipelines (CI/CD) SageMaker Studio Notebooks (Jupyter Notebook) SageMaker Notebook Instances (Jupyter Notebook) SageMaker ML Lineage Tracking (Collecting Information) SageMaker Data Wrangler (Feature of SageMaker Studio) SageMaker Processing (SDK) SageMaker Debugger SageMaker Experiments SageMaker Edge Manager 黄色:よく使いそう 青色:IoTで使う 緑色:個人的に期待
  19. 3.SageMaker 概要 – ワークフローとエコシステム 26 Clean Prepare Train model Evaluate

    model Deploy to production Monitor SageMaker Clarify (Improving Models) Amazon Augmented AI (Workflow for Human Reviews) SageMaker Ground Truth (Labeling) SageMaker Ground Truth Plus (Labeling) SageMaker Feature Store SageMaker Training Compiler SageMaker Autopilot (Auto ML) SageMaker Canvas (Auto ML) SageMaker Hosting Services SageMaker Serverless Endpoints (Preview) SageMaker Elastic Inference SageMaker Inference Recommender SageMaker Model Registry SageMaker Neo (Compile) SageMaker Model Monitor
  20. 3.SageMaker 概要 – ワークフローとエコシステム 27 https://docs.aws.amazon.com/sagemaker/latest/dg/how-it-works-training.html • エコシステム全体は巨大・複雑なため、 フル活用する場合の学習コストは高め •

    しかし、コアとなる部分は結局のところ 右の図のとおり • AWS がコンテナやインフラを管理するた め、重要な部分の実装に集中できる • もちろん、自力で構築も可能だが、構 築・管理が大変 (API GW/Lambda, ALB/Fargate, AWS Batch, EC2 など)
  21. 3.SageMaker 概要 – 推論エンドポイント 28 ◼ 推論エンドポイント ⚫ リアルタイム •

    SageMaker Hosting Services • EC2 が常時起動のイメージ • SageMaker Serverless Endpoints (Preview) • 機能制限(特に SageMaker Python SDK 未対応) あり (2021年12月時点) • GA (Generally Available) になれば、SageMaker での推論が低コストで利用可能 ⚫ 非同期、バッチ • Asynchronous Inference • 処理すべきリクエストが存在しない時は、オートスケーリングでインスタンスを0に設定 するため、低コストで利用可能 • Batch Transform
  22. 4.SageMaker Studio セットアップ – 概要 30 ◼ SageMaker Studio/RStudio on

    SageMaker • 機械学習 IDE で、ユーザー管理等のセキュリティを気にする場合はコレ • Onboard to SageMaker Domain の実施が必要 • SageMaker JumpStart (学習用) が利用可能 ◼ SageMaker Notebook Instances • 1人~少人数のデータサイエンティストが SageMaker を一時的に利用したい時に便利 • 新規起動の場合、SageMaker Studio Notebooks が推奨されている *1 ◼ ローカル環境 + AWS SDK + SageMaker SDK • 1人~少人数の開発者が SageMaker を一時的に利用したい時に便利 ◼ SageMaker Studio Lab • AWS アカウント不要&無料で SageMaker Studio の一部機能を試用可能 *1) https://docs.aws.amazon.com/sagemaker/latest/dg/notebooks-comparison.html
  23. 4.SageMaker Studio セットアップ – 概要 31 Onboard to SageMaker Domain

    を実施すると、以下が作成される。 *1 ◼ Domain (1リージョンあたり1つまで) • EFS Volume • 承認ユーザーリスト (Notebooks/Artifacts の共有可能) • その他設定 (セキュリティ、アプリケーション、ポリシー、VPC) ◼ User Profile • 1ユーザーを表現する Profile ◼ App • Notebooks, ターミナル, コンソール *1) https://docs.aws.amazon.com/sagemaker/latest/dg/studio-entity-status.html
  24. 5. 組み込みアルゴリズムによる機械学習 – 概要 40 • 本日のサンプルコードは、Notebook として GitHub にアップロードしています。

    • https://github.com/iwstkhr/amazon-sagemaker-sample • コードの細部の解説は割愛しますが、特に複雑な処理はありませんので、コードを見れば把握 していただけると思います。
  25. 5. 組み込みアルゴリズムによる機械学習 – 概要 41 ⚫ SageMaker 組み込みアルゴリズムの k-NN (k-Nearest

    Neighbor: k近傍法) を使用して、 お馴染みの Iris (アヤメ科の植物) の種別分類 (Multi-class classification) を実装 ⚫ サンプルコードは、ローカル環境の Jupyter Notebook (Python3) でも動作します タスク 説明 備考 Notebook 起動 Python コード実行環境 管理者による集中管理が必要な場合は必須 データセット準備(前処理) アルゴリズムによる訓練で使用するデータ セットの準備 SageMaker Processing を使用して、 Notebook インスタンスとは別のインスタン スを使用することも可能 訓練 前処理で準備したデータセットを使用して訓 練 マネジメント・コンソールから訓練ジョブを 作成することも可能 *1 推論 訓練済みモデルを使用して推論 マネジメント・コンソールから推論エンドポ イントを作成することも可能 *1 リソース削除 推論エンドポイントとモデルを削除 - *1) 一度作成して終わりというよりも、定期的に変更するケースが多いと思われるので、最初からコードでの実行がお勧め
  26. 5. 組み込みアルゴリズムによる機械学習 – 共通処理 43 %env S3_DATASET_BUCKET={{YOUR_BUCKET_NAME}} %env S3_DATASET_TRAIN=knn/input/iris_train.csv %env

    S3_DATASET_TEST=knn/input/iris_test.csv %env S3_TRAIN_OUTPUT=knn/output %env SAGEMAKER_ROLE={{YOUR_SAGEMAKER_ROLE}} 環境変数の初期化
  27. 5. 組み込みアルゴリズムによる機械学習 – 共通処理 44 import (“Python3 Data Science” instance

    にセットアップ済み) import os import random import string import boto3 import matplotlib.pyplot as plt import pandas as pd import sagemaker from IPython.display import display from sagemaker import image_uris from sagemaker.deserializers import JSONDeserializer from sagemaker.estimator import Estimator, Predictor from sagemaker.inputs import TrainingInput from sagemaker.serializers import CSVSerializer from sklearn.model_selection import train_test_split
  28. 5. 組み込みアルゴリズムによる機械学習 – 共通処理 45 # Define constants CSV_PATH =

    './tmp/iris.csv' S3_DATASET_BUCKET = os.getenv('S3_DATASET_BUCKET') S3_DATASET_TRAIN = os.getenv('S3_DATASET_TRAIN') S3_DATASET_TEST = os.getenv('S3_DATASET_TEST') S3_TRAIN_OUTPUT = os.getenv('S3_TRAIN_OUTPUT') SAGEMAKER_ROLE = os.getenv('SAGEMAKER_ROLE') ESTIMATOR_INSTANCE_COUNT = 1 ESTIMATOR_INSTANCE_TYPE = 'ml.m5.large' PREDICTOR_INSTANCE_TYPE = 'ml.t2.medium' PREDICTOR_ENDPOINT_NAME = f'sagemaker-knn-{PREDICTOR_INSTANCE_TYPE}'.replace('.', '-') 複数セルで使用する定数の初期化
  29. 5. 組み込みアルゴリズムによる機械学習 – 共通処理 46 # Define variables used over

    this notebook bucket = boto3.resource('s3').Bucket(S3_DATASET_BUCKET) train_df = None test_df = None train_object_path = None test_object_path = None knn = None predictor = None 複数セルで使用する変数の初期化
  30. 5. 組み込みアルゴリズムによる機械学習 – データセット準備(前処理) 48 # Download a sample csv

    !mkdir -p tmp !curl -o "$(pwd)/tmp/iris.csv" -L https://raw.githubusercontent.com/aws/amazon-sagemaker- examples/master/hyperparameter_tuning/r_bring_your_own/iris.csv お馴染みの Iris Dataset *1 を利用します。 (AWS 公式の amazon-sagemaker-examples に CSV があります *2) *1) https://archive.ics.uci.edu/ml/datasets/iris *2) https://github.com/aws/amazon-sagemaker-examples/blob/master/hyperparameter_tuning/r_bring_your_own/iris.csv
  31. 5. 組み込みアルゴリズムによる機械学習 – データセット準備(前処理) 49 def load_csv(path: str) -> pd.DataFrame:

    df = pd.read_csv(path) # Move the last label column to the first # See https://docs.aws.amazon.com/sagemaker/latest/dg/cdf-training.html#cdf-csv-format df = df[['Species', 'Sepal.Length', 'Sepal.Width', 'Petal.Length', 'Petal.Width']] # Convert target string to int df['Species'] = df['Species'].map({'setosa': 0, 'versicolor': 1, 'virginica': 2}) return df CSV ロード *1) https://docs.aws.amazon.com/sagemaker/latest/dg/cdf-training.html#cdf-csv-format • SageMaker は、CSV の1番目の列をターゲットのラベルとみなす(教師あり学習の場合)ため、 Species を先頭に移動 *1 • ターゲットのラベルを、文字列 (string) から数値 (int) に変換
  32. 5. 組み込みアルゴリズムによる機械学習 – データセット準備(前処理) 50 def plot(df: pd.DataFrame) -> None:

    pd.plotting.scatter_matrix(df, figsize=(15, 15), c=df['Species']) plt.show() 特徴量を散布図にプロット • X軸は左から Species, Sepal.Length, Sepal.Width, Petal.Length, Petal.Width • Y軸は下から Petal.Width, Petal.Length, Sepal.Width, Sepal.Length, Species • 図が小さくて分かりにくいですが、Species で綺麗に分離してい るので、特徴量から Species を予測できる可能性が高いことが分 かる
  33. 5. 組み込みアルゴリズムによる機械学習 – データセット準備(前処理) 51 def upload_csv_to_s3(df: pd.DataFrame, object_path: str)

    -> str: filename = ''.join([random.choice(string.digits + string.ascii_lowercase) for i in range(10)]) path = os.path.abspath(os.path.join('./tmp', filename)) df.to_csv(path, header=False, index=False) # Change content-type because the default is binary/octet-stream bucket.upload_file(path, object_path, ExtraArgs={'ContentType': 'text/csv'}) return f's3://{bucket.name}/{object_path}' CSV アップロード (S3) Protobuf RecordIO Format のほうが訓練パフォーマンスが高いのですが、今回は確認しやすいように CSV にしました。 https://docs.aws.amazon.com/sagemaker/latest/dg/cdf-training.html#cdf-recordio-format
  34. 5. 組み込みアルゴリズムによる機械学習 – データセット準備(前処理) 52 if __name__ == '__main__': #

    Prepare data df = load_csv(CSV_PATH) display(df) plot(df) train_df, test_df = train_test_split(df, shuffle=True, random_state=0) # type: (pd.DataFrame, pd.DataFrame) train_object_path = upload_csv_to_s3(train_df, S3_DATASET_TRAIN) test_object_path = upload_csv_to_s3(test_df, S3_DATASET_TEST) 実行
  35. 5. 組み込みアルゴリズムによる機械学習 – 訓練 54 def get_estimator(**hyperparams) -> Estimator: estimator

    = Estimator( image_uri=image_uris.retrieve('knn', boto3.Session().region_name), # AWS provided container in ECR, role=SAGEMAKER_ROLE, instance_count=ESTIMATOR_INSTANCE_COUNT, instance_type=ESTIMATOR_INSTANCE_TYPE, input_mode='Pipe', output_path=f's3://{S3_DATASET_BUCKET}/{S3_TRAIN_OUTPUT}', sagemaker_session=sagemaker.Session(), ) hyperparams.update({'predictor_type': 'classifier'}) estimator.set_hyperparameters(**hyperparams) return estimator Estimator 設定・取得 • image_uri は k-NN を使用した訓練用コンテナのイメージ URI (ECR) *1 • k-NN の Hyperparameters は公式ページに記載 *2 *1) https://docs.aws.amazon.com/sagemaker/latest/dg/ecr-ap-northeast-1.html *2) https://docs.aws.amazon.com/sagemaker/latest/dg/kNN_hyperparameters.html
  36. 5. 組み込みアルゴリズムによる機械学習 – 訓練 55 def train(estimator: Estimator, train_object_path: str,

    test_object_path: str) -> None: # Specify content-type because the default is application/x-recordio-protobuf train_input = TrainingInput(train_object_path, content_type='text/csv', input_mode='Pipe') test_input = TrainingInput(test_object_path, content_type='text/csv', input_mode='Pipe') estimator.fit({'train': train_input, 'test': test_input}) 訓練 • 組み込みアルゴリズムの訓練用チャネル名は、”train” 固定 *1 • “test” というチャネル名でジョブを作成すると、機械学習モデルのテストもあわせて実行される *2 • TrainingInput の input_mode 引数を Pipe にしておくと、S3 から直接データをSageMaker Training Instance にストリーミング可能 (Pipe Mode) *3 *1) https://docs.aws.amazon.com/sagemaker/latest/dg/cdf-training.html#cdf-recordio-format *2) https://docs.aws.amazon.com/sagemaker/latest/dg/k-nearest-neighbors.html#kNN-input_output *3) https://aws.amazon.com/jp/blogs/news/using-pipe-input-mode-for-amazon-sagemaker-algorithms/
  37. 5. 組み込みアルゴリズムによる機械学習 – 訓練 56 if __name__ == '__main__': knn

    = get_estimator(k=1, sample_size=1000) train(knn, train_object_path, test_object_path) 実行 • k=近傍点の個数 • sample_size=訓練データセットからサンプリングされるデータポイント数(今回は全件) • k-NN の Hyperparameters は公式ページに記載 *1 *1) https://docs.aws.amazon.com/sagemaker/latest/dg/kNN_hyperparameters.html
  38. 5. 組み込みアルゴリズムによる機械学習 – 訓練 57 2022-01-08 13:38:34 Starting - Starting

    the training job... 2022-01-08 13:38:57 Starting - Launching requested ML instancesProfilerReport-1641649113: InProgress ...... [01/08/2022 13:43:00 INFO 140667182901056] #test_score (algo-1) : ('accuracy', 0.9736842105263158) [01/08/2022 13:43:00 INFO 140667182901056] #test_score (algo-1) : ('macro_f_1.000', 0.97170347) 訓練ログ • Accuracy (精度) ≒ 97.4% Macro F1 ≒ 97.2% • F1 が高い値のため、Precision/Recall のバランスがとれている
  39. 5. 組み込みアルゴリズムによる機械学習 – 推論 59 def deploy(estimator: Estimator) -> Predictor:

    return estimator.deploy( initial_instance_count=1, instance_type=PREDICTOR_INSTANCE_TYPE, serializer=CSVSerializer(), deserializer=JSONDeserializer(), endpoint_name=PREDICTOR_ENDPOINT_NAME ) 推論エンドポイント・デプロイ • serializer/deserializer は使用したい入出力フォーマット
  40. 5. 組み込みアルゴリズムによる機械学習 – 推論 60 def validate(predictor: Predictor, test_df: pd.DataFrame)

    -> pd.DataFrame: rows = [] for i, data in test_df.iterrows(): predict = predictor.predict( pd.DataFrame([data.drop('Species')]).to_csv(header=False, index=False), initial_args={'ContentType': 'text/csv'} ) predicted_label = predict['predictions'][0]['predicted_label'] row = data.tolist() row.append(predicted_label) row.append(data['Species'] == predicted_label) rows.extend([row]) return pd.DataFrame(rows, columns=('Species', 'Sepal.Length', 'Sepal.Width', 'Petal.Length', 'Petal.Width', 'Prediction', 'Result')) 推論結果の評価
  41. 5. 組み込みアルゴリズムによる機械学習 – 推論 61 if __name__ == '__main__': predictor

    = deploy(knn) predictions = validate(predictor, test_df) display(predictions) 実行
  42. 5. 組み込みアルゴリズムによる機械学習 – リソース削除 62 def delete_model(predictor: Predictor) -> None:

    try: predictor.delete_model() print(f'Deleted a model') except BaseException as e: print(e) def delete_endpoint(predictor: Predictor) -> None: try: predictor.delete_endpoint(delete_endpoint_config=True) print(f'Deleted {predictor.endpoint_name}') except BaseException as e: print(e) モデルと推論エンドポイント削除
  43. 5. 組み込みアルゴリズムによる機械学習 – リソース削除 63 if __name__ == '__main__': delete_model(predictor)

    delete_endpoint(predictor) 実行 • リアルタイム推論エンドポイントは利用状況に関係なく課金されるため、不要になった時は削除する • 必要に応じてその他のリソース (S3, EFS, IAM など) も削除してください
  44. 66