【AWSサービス 基礎編】Amazon SageMaker AI で機械学習モデルのトレーニングとデプロイを体験する

目次

概要

機械学習をビジネスに活用したいと考えたとき、モデルの構築からトレーニング、デプロイまでの一連のプロセスには多くのステップと専門知識が必要です。データの前処理、トレーニング用のインフラ構築、モデルのホスティングなど、それぞれを個別に管理するのは煩雑で時間がかかります。

Amazon SageMaker AI は、機械学習のワークフロー全体をカバーするフルマネージドサービスです。データの準備からモデルの構築・トレーニング・デプロイまでを一つのプラットフォームで完結でき、インフラの管理は AWS に任せることができます。

本記事では、SageMaker AI の基本的な概念を理解し、SageMaker Studio のノートブックを使って組み込みアルゴリズムによるモデルのトレーニングとエンドポイントへのデプロイを体験します。

SageMaker AI の全体像: データ準備 → トレーニング → デプロイ → 推論を 1 つのサービスで通す
SageMaker AI の全体像: データ準備 → トレーニング → デプロイ → 推論を 1 つのサービスで通す
クラウドおさる

弊猿はこの記事で、データを S3 に置くところから、学習したモデルに予測させるところまでを一気に通してみるでござる。機械学習の流れを、手を動かして掴むのでござるよ。

この記事のメリット

  • Amazon SageMaker AI の主要コンポーネント(Studio、ノートブック、トレーニングジョブ、エンドポイント)の役割を理解できる
  • SageMaker Studio の環境セットアップからノートブックの起動までの手順を習得できる
  • 組み込みアルゴリズム(XGBoost)を使ったモデルのトレーニングを体験できる
  • トレーニング済みモデルをリアルタイム推論エンドポイントにデプロイし、推論リクエストを送信できる
  • 機械学習のワークフロー全体を AWS 上で実行する流れを把握できる

執筆者とキャラクター紹介

執筆者:土肥(とひ)

株式会社ジェニュインの代表であり元エンジニア。これまでオンプレミスと AWS 環境のインフラ業務を担当。AWS 認定資格の学習で得た知識を、ハンズオンとともに解説するのが得意。直近では新人の教育も行っており、これから技術を学ぶ方が納得できる解説を心がけています。基礎編・Cloud Practitioner の記事では、解説役としても登場します。

土肥

クラウドおさる

クラウドおさる

はじめましてでござる。弊猿はクラウドおさる。IT インフラが異常に発達した猿山から、雲に乗って地上の AWS を学びに降りてきたのでござる。

クラウドおさる

基礎編や Cloud Practitioner の記事では、とひさんに素朴な疑問をぶつける役でござるな。Security - Specialty などの記事では、要所でワンポイントや注意点をひとこと添えるでござる。

クラウドおさる

猿山にもデータセンターや監視当番があって、地上で起きることはだいたい猿山にも同じ仕組みがあるのでござる。例え話がつい猿山に寄るのは、弊猿の癖でござる。

技術解説

Amazon SageMaker AI とは

クラウドおさる

とひさん、Amazon SageMaker AI とはどんなサービスでござるか?機械学習と聞くと、弊猿はどうも身構えてしまうでござる…。

土肥

SageMaker AI は、機械学習モデルの構築・トレーニング・デプロイを行うためのフルマネージドサービスだよ。機械学習に必要なインフラの構築や管理は AWS がやってくれるから、開発者はモデルの開発やビジネスロジックに集中できるんだ。

クラウドおさる

インフラを気にしなくてよいのは助かるでござるな。具体的には、どんな場面で使われるのでござる?

土肥

主なユースケースはこんな感じだよ。

  • 需要予測や異常検知などのビジネス向け機械学習モデルの構築
  • 画像認識や自然言語処理モデルの開発とデプロイ
  • 大規模データを使った分散トレーニング
  • MLOps パイプラインの構築と運用
クラウドおさる

ずいぶん幅広いでござる。猿山でも「来月のバナナの収穫量を当てたい」と長老会が言っておったが、まず SageMaker AI を考えればよいでござるか?

土肥

そうだね。AWS 上で機械学習をやるなら、SageMaker AI がまず選択肢に挙がるサービスだよ。データの準備からデプロイまで一つのプラットフォームで完結できるのが強みなんだ。

主要コンポーネント

クラウドおさる

SageMaker AI の中身は、どんな部品でできているのでござる?

土肥

SageMaker AI は複数のコンポーネントで構成されているよ。今回使う主要なものを表にまとめるとこうなるんだ。

コンポーネント説明
SageMaker Studio機械学習開発のための統合開発環境(IDE)
SageMaker ノートブックJupyter ノートブック環境。データの探索やモデルの構築に使用
トレーニングジョブモデルのトレーニングを実行するマネージドジョブ。専用のインスタンスで実行される
モデルトレーニング済みのモデルアーティファクト。S3 に保存される
エンドポイントトレーニング済みモデルをホストし、リアルタイム推論を提供する
クラウドおさる

Studio でコードを書き、トレーニングジョブで学習し、できたモデルをエンドポイントで公開する…という流れでござるか?猿山なら、修行場で鍛えた若猿を見張り台に立たせるようなものでござるな。

土肥

そのとおり!全体の流れをざっくり掴めているね。コンポーネント同士がうまく連携して、一連のワークフローを構成しているんだよ。

コンポーネントの関係: Studio のノートブックから学習し、S3 のモデルをエンドポイントでホストする
コンポーネントの関係: Studio のノートブックから学習し、S3 のモデルをエンドポイントでホストする

SageMaker Studio

クラウドおさる

SageMaker Studio というのは、普通のエディタと何が違うのでござるか?

土肥

SageMaker Studio は、機械学習のための統合開発環境なんだ。ノートブックの作成・実行はもちろん、トレーニングジョブの管理やエンドポイントの監視まで、機械学習ワークフローの各ステップを一つの画面から操作できるのが特徴だよ。

クラウドおさる

使い始めるには、どうすればよいでござる?

土肥

まず SageMaker ドメインを作成する必要があるんだ。ドメインはユーザー管理やストレージ、ネットワーク設定を管理する単位で、これを作ることで Studio が使えるようになるよ。

クラウドおさる

なるほど、ドメインが Studio の土台なのでござるな。猿山でいえば、まず縄張りを決めてから、そこに猿ごとの寝床を割り当てるのと同じでござる。

組み込みアルゴリズム

クラウドおさる

機械学習は、アルゴリズムを自分で書かねばならぬ印象があるでござる。SageMaker AI だとどうなのでござるか?

土肥

SageMaker AI には、一般的な機械学習タスクに対応した組み込みアルゴリズムが用意されているんだ。自分でアルゴリズムを実装しなくても、データを用意するだけでトレーニングを開始できるよ。

クラウドおさる

それは便利でござるな!今回はどのアルゴリズムを使うのでござる?

土肥

今回は XGBoost を使うよ。XGBoost は勾配ブースティングに基づく汎用的なアルゴリズムで、分類や回帰の問題に広く使われているんだ。組み込みアルゴリズムの中でも定番の一つだね。

クラウドおさる

データを用意するだけでよいなら、ずいぶん気が楽になったでござる。猿山の料理当番も、レシピが決まっていればバナナを並べるだけで済むのでござるよ。

トレーニングとデプロイの流れ

クラウドおさる

実際に SageMaker AI でモデルを作るときは、どういう順番で進めるのでござるか?

土肥

基本的な流れは 5 つのステップになるよ。

  1. データの準備: トレーニングデータを S3 にアップロードする
  2. トレーニングジョブの実行: アルゴリズムとハイパーパラメータを指定してトレーニングを開始する。SageMaker がトレーニング用インスタンスを自動でプロビジョニングし、完了後に自動で終了する
  3. モデルの作成: トレーニング済みのモデルアーティファクトが S3 に保存される
  4. エンドポイントのデプロイ: モデルをリアルタイム推論エンドポイントにデプロイする
  5. 推論の実行: エンドポイントにリクエストを送信して予測結果を取得する
クラウドおさる

トレーニング用のインスタンスが自動で起動し、終わったら自動で消える、と。修行の間だけ道場を借りるようなもので、バナナが無駄に飛ばずに済むでござるな。

土肥

そうなんだ。トレーニングジョブのインスタンスは学習が終われば止まるから、学習の分は動いていた間だけの課金で済むよ。ただし、デプロイしたエンドポイントは別で、削除するまで料金がかかり続けるんだ。そこだけは覚えておいてね。では、実際にこの流れを体験してみよう!

新卒・未経験の方へ
クラウドおさる

AWS を仕事にしたい方へ ── 新卒・未経験から

この記事を書いているのは、AWS の設計・構築を仕事にしている現役エンジニアです。運営元の株式会社ジェニュインでは、新卒・未経験の方も募集しています。異業種や文系からインフラエンジニアになり活躍しているメンバーもいます。

  • ✓システム開発・WEB エンジニア / インフラ構築などの職種で、未経験から応募できます
  • ✓未経験から入社した社員の声を含む社員アンケートを掲載
  • ✓応募フォームから 1 分で応募できます

実践

ハンズオンガイド8 ステップ画面 9 枚

コンソールの横に開いて、チェックしながら進めましょう。

ガイドを開く

別タブで開きます。チェックはこのブラウザに保存されます。

前提条件

  • リージョン: ap-northeast-1(東京)
  • IAM ユーザーまたはロールに SageMaker、S3、IAM の操作権限があること

作成するリソース一覧

リソース種別リソース名用途
SageMaker ドメインQuickSetupDomain-<日時>(自動命名)SageMaker Studio 環境
SageMaker ユーザープロファイルdefault-<日時>(自動命名)Studio にログインするユーザー
IAM ロールAmazonSageMaker-ExecutionRole-<日時>(自動作成)トレーニングジョブやエンドポイントの実行用
JupyterLab スペースbasic-notebookノートブックを動かす環境
S3 バケットsagemaker-ap-northeast-1-<アカウントID>(自動作成)トレーニングデータとモデルの保存先
SageMaker エンドポイントxgboost-basic-endpointリアルタイム推論用

ステップ1: SageMaker ドメインの作成

  • AWS マネジメントコンソールにログインし、リージョンが ap-northeast-1(東京)であることを確認します
  • 上部の検索バーに SageMaker と入力し、表示された「Amazon SageMaker」を選択します
  • 左側ナビゲーションの「Environment configuration」→「ドメイン」を選択します
  • 「ドメインを作成」をクリックします
  • 「シングルユーザー向けの設定 (クイックセットアップ)」を選択し、「設定」をクリックします
SageMaker ドメインの設定画面(クイックセットアップを選択した状態)
SageMaker ドメインの設定画面(クイックセットアップを選択した状態)
  • クイックセットアップでは、ドメイン名・ユーザープロファイル名・実行ロールの入力はありません。ドメイン(QuickSetupDomain-<日時>)、ユーザープロファイル(default-<日時>)、AmazonSageMakerFullAccess ポリシーが付いた実行ロール(AmazonSageMaker-ExecutionRole-<日時>)が自動で作られます
  • 1 分ほどでドメインの作成が完了します。「ドメイン」の一覧でステータスが「InService」になっていれば完了です
SageMaker ドメイン一覧(QuickSetupDomain が InService と表示されている状態)
SageMaker ドメイン一覧(QuickSetupDomain が InService と表示されている状態)

ステップ2: SageMaker Studio の起動

  • ドメインの作成が終わると、SageMaker Studio が新しいタブで自動的に開きます。開かなかった場合は、ドメイン一覧の「Studio を開く」をクリックします
  • 初回はツアーの案内(Welcome)が表示されるので、「Skip Tour」で閉じます
  • SageMaker Studio のホーム画面が表示されます(画面は英語です)
SageMaker Studio のホーム画面
SageMaker Studio のホーム画面

ステップ3: ノートブックの作成とデータの準備

  • SageMaker Studio のホーム画面で、アプリケーションの「JupyterLab」を選択します
  • 「Create JupyterLab space」をクリックします
  • 名前に basic-notebook と入力し、共有の設定は「Private」のまま「Create space」をクリックします
  • スペースの詳細画面に切り替わります。インスタンスはデフォルト(ml.t3.medium)のまま「Run space」をクリックします
  • ステータスが「Running」になったら「Open JupyterLab」をクリックします。JupyterLab が新しいタブで開きます
  • 開いたときに表示される通知やチャットのパネルは閉じてかまいません。ランチャーの「Notebook」から「Python 3 (ipykernel)」を選択し、ノートブックを新規作成します
JupyterLab のランチャー画面(Python 3 ノートブックを選択する画面)
JupyterLab のランチャー画面(Python 3 ノートブックを選択する画面)
  • JupyterLab にあらかじめ入っている SageMaker Python SDK は v3 系で、この記事のコード(v2 の書き方)はそのままでは ImportError になります。最初のセルで次のコマンドを実行して v2 を入れ、メニューの「Kernel」→「Restart Kernel」でカーネルを再起動します。依存関係の警告が表示されますが、動作には影響ありません
%pip install "sagemaker<3"
  • カーネルを再起動したら、次のセルに以下のコードを入力し、実行します(Shift + Enter)。このコードはセッションと実行ロールを取得し、データの保存先にする既定の S3 バケット(sagemaker-ap-northeast-1-<アカウントID>。無ければ自動で作成されます)を確認します
import sagemaker
import boto3
import numpy as np
import pandas as pd
from sagemaker import Session

# セッションとリージョンの設定
session = sagemaker.Session()
bucket = session.default_bucket()
role = sagemaker.get_execution_role()
region = boto3.Session().region_name

print(f"S3 バケット: {bucket}")
print(f"実行ロール: {role}")
print(f"リージョン: {region}")
  • 次のセルに以下のコードを入力して実行します。サンプルデータを生成し、S3 にアップロードします
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split

# サンプルデータの生成(二値分類)
X, y = make_classification(
    n_samples=1000,
    n_features=10,
    n_informative=5,
    n_redundant=2,
    random_state=42
)

# トレーニングデータとテストデータに分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# XGBoost 用の CSV 形式(1列目がラベル)
train_data = np.column_stack([y_train, X_train])
test_data = np.column_stack([y_test, X_test])

# CSV ファイルとして保存
pd.DataFrame(train_data).to_csv("train.csv", header=False, index=False)
pd.DataFrame(test_data).to_csv("test.csv", header=False, index=False)

# S3 にアップロード
prefix = "sagemaker-basic-xgboost"
train_path = session.upload_data("train.csv", bucket=bucket, key_prefix=f"{prefix}/train")
test_path = session.upload_data("test.csv", bucket=bucket, key_prefix=f"{prefix}/test")

print(f"トレーニングデータ: {train_path}")
print(f"テストデータ: {test_path}")
ノートブックでデータ準備コードを実行した結果(S3 パスが出力されている状態)
ノートブックでデータ準備コードを実行した結果(S3 パスが出力されている状態)

ステップ4: トレーニングジョブの実行

  • 次のセルに以下のコードを入力して実行します。XGBoost の組み込みアルゴリズムを使ってトレーニングジョブを開始します
from sagemaker.inputs import TrainingInput

# XGBoost コンテナイメージの取得
container = sagemaker.image_uris.retrieve("xgboost", region, version="1.7-1")

# Estimator の設定
xgb = sagemaker.estimator.Estimator(
    image_uri=container,
    role=role,
    instance_count=1,
    instance_type="ml.m5.large",
    output_path=f"s3://{bucket}/{prefix}/output",
    sagemaker_session=session,
)

# ハイパーパラメータの設定
xgb.set_hyperparameters(
    objective="binary:logistic",
    num_round=100,
    max_depth=5,
    eta=0.2,
)

# トレーニングデータの指定
train_input = TrainingInput(
    s3_data=train_path,
    content_type="text/csv",
)

# トレーニングジョブの開始
xgb.fit({"train": train_input})
  • トレーニングジョブが開始されると、ログがセルの出力に表示されます。完了までに数分かかります
トレーニングジョブの実行ログ(Completed - Training job completed と表示されている状態)
トレーニングジョブの実行ログ(Completed – Training job completed と表示されている状態)
  • SageMaker コンソールでもトレーニングジョブの状態を確認できます。左側ナビゲーションの「Model training & customization」→「Training & tuning jobs」を選択すると、実行したジョブの一覧が表示されます
SageMaker コンソールのトレーニングジョブ一覧(ステータスが Completed と表示されている)
SageMaker コンソールのトレーニングジョブ一覧(ステータスが Completed と表示されている)
クラウドおさる

ノートブックの fit() 1 行で、トレーニングジョブがコンソールにも 1 件残ったでござるな。学習は専用のインスタンスで走り、できたモデルは S3 に置かれるのでござる。

ステップ5: モデルのデプロイ

  • ノートブックに戻り、次のセルに以下のコードを入力して実行します。トレーニング済みモデルをリアルタイム推論エンドポイントにデプロイします
# エンドポイントへのデプロイ
predictor = xgb.deploy(
    initial_instance_count=1,
    instance_type="ml.m5.large",
    endpoint_name="xgboost-basic-endpoint",
)

print("エンドポイントのデプロイが完了しました")
  • デプロイが完了するまで数分待ちます
  • SageMaker コンソールの左側ナビゲーションの「Deployments & inference」→「エンドポイント」を選択すると、作成したエンドポイントが表示されます
SageMaker コンソールのエンドポイント一覧(xgboost-basic-endpoint が InService と表示されている状態)
SageMaker コンソールのエンドポイント一覧(xgboost-basic-endpoint が InService と表示されている状態)

ステップ6: 推論の実行

  • ノートブックで次のセルに以下のコードを入力して実行します。デプロイしたエンドポイントに推論リクエストを送信します
from sagemaker.serializers import CSVSerializer

# シリアライザーの設定
predictor.serializer = CSVSerializer()

# テストデータから数件を使って推論
test_samples = X_test[:5]
predictions = predictor.predict(test_samples)

print("予測結果:")
print(predictions.decode("utf-8"))
print("\n実際のラベル:")
print(y_test[:5])
推論結果の出力(予測値と実際のラベルが表示されている状態)
推論結果の出力(予測値と実際のラベルが表示されている状態)
  • 出力された予測結果は 0 から 1 の間の確率値です。0.5 以上であればクラス 1、0.5 未満であればクラス 0 と判定します
  • 実際のラベルと比較することで、モデルの予測精度を確認できます
クラウドおさる

データの準備 → トレーニング → デプロイ → 推論、技術解説の 5 つのステップを全部通したでござる。エンドポイントは呼べばすぐ答える見張り台、トレーニングジョブは終われば片付く道場、と分けて覚えるとよいでござるぞ。

まとめ

  • Amazon SageMaker AI は、機械学習モデルの構築・トレーニング・デプロイを一つのプラットフォームで完結できるフルマネージドサービスです
  • SageMaker Studio は機械学習開発のための統合開発環境であり、ドメインを作成することで利用を開始できます
  • 組み込みアルゴリズム(XGBoost 等)を使えば、アルゴリズムの実装なしにデータを用意するだけでモデルのトレーニングが可能です
  • トレーニングジョブ はマネージドで実行され、トレーニング用インスタンスのプロビジョニングと終了は自動で行われます
  • トレーニング済みモデルは リアルタイム推論エンドポイント にデプロイして、即座に推論リクエストを処理できます
  • SageMaker AI を利用することで、インフラ管理の負担を軽減し、モデルの開発とビジネス課題の解決に集中できます

参照先

キャリア相談
クラウドおさる

独学の先に、AWS の仕事がある ── ジュニアおさるのキャリア相談

CLF には受かったけれど、次に何をすればいいのか分からない。独学で AWS を学ぶジュニアおさるの相談に、株式会社ジェニュイン代表の土肥が答えています。

  • ✓資格はゴールか、CLF の次に何から手を付けるか
  • ✓EC2 の次に作ってみる構成と、IaC・コスト管理
  • ✓実務経験ゼロでも、面接で話せる「これまで」の作り方
新卒・未経験の方へ
クラウドおさる

AWS を仕事にしたい方へ ── 新卒・未経験から

この記事を書いているのは、AWS の設計・構築を仕事にしている現役エンジニアです。運営元の株式会社ジェニュインでは、新卒・未経験の方も募集しています。異業種や文系からインフラエンジニアになり活躍しているメンバーもいます。

  • ✓システム開発・WEB エンジニア / インフラ構築などの職種で、未経験から応募できます
  • ✓未経験から入社した社員の声を含む社員アンケートを掲載
  • ✓応募フォームから 1 分で応募できます

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

株式会社ジェニュイン(https://genuine-pt.jp)の代表取締役.

2018年〜インフラエンジニアとしてキャリアをスタートし、オンプレミスのネットワーク・サーバ環境で3年半、クラウド環境で4年半の8年間エンジニアとして従事。
2021年に佐藤氏の創業した株式会社Luxyを引き継ぎ、代表に就任。
その後アガルートグループ内の株式会社ジェニュインと合併。
合併後同社代表に就任。

目次