結論

Amazon SageMakerは、機械学習モデルの学習・デプロイ・運用をまとめて行うAWSのサービスです。今は機械学習の部分を SageMaker AI と呼びます。

この記事でわかること

  • 機能12種と推論4方式・Bedrockとの違いの早見表
  • SDK v3が送ったCreateTrainingJobなど4つの実物
  • 無料枠6項目・止め忘れ30日の金額と削除コマンド

2026年10月23日更新|SDK 3.27.0・moto 5.2.4で実行確認

SageMaker の基本の流れは、S3 に置いたデータでコンテナを動かして学習し、できたモデルのファイルを推論用のエンドポイントに載せて、アプリから呼ぶ、という形です。料金は、学習や推論で動いているインスタンスの時間で決まります。

flowchart TD
    D[S3 の学習データ] --> T[学習ジョブ<br>ml インスタンスでコンテナを実行]
    T --> M[model.tar.gz<br>S3 に保存]
    M --> E[エンドポイント<br>推論用のインスタンス]
    A[アプリ] -->|InvokeEndpoint| E

急いでいる人向けに、よく調べられることの答えを先にまとめます。

知りたいこと 答え 詳しい節
SageMakerとは 機械学習の学習・推論・運用の AWS サービス とは
SageMaker AI との違い 2024年12月に旧 SageMaker が SageMaker AI に改名 とは
料金 インスタンスの使用時間+ストレージなど 料金
無料枠 最初の2か月、Studio ノートブック 250 時間など 料金
止め忘れの確認 aws sagemaker list-endpoints など 止め忘れ
Python から使う SDK v3 の ModelTrainer と ModelBuilder SDK
v2 のコードが動かない v3 で Estimator が無くなった。sagemaker<3 か書き換え v2 から v3
Bedrock との違い Bedrock は API で使う、SageMaker は自分で学習・運用 違い
ノーコードで使う SageMaker Canvas 機能

確認環境:SageMaker の構成・料金・無料枠・推論の種類・API の仕様は、AWS の公式ドキュメント(Developer Guide・API Reference・料金ページ・Bedrock と SageMaker AI の選び方のガイド)と SageMaker Python SDK のドキュメントで確かめました。SDK は PyPI の sagemaker 3.27.0(sagemaker-core 2.27.0・sagemaker-train 1.27.0・sagemaker-serve 1.27.0)と 2.257.7 を Python 3.11.15 に入れ、AWS の動きをまねる moto 5.2.4 のサーバーモード(boto3 1.43.118・AWS CLI 1.46.1)に向けて動かしました。学習ジョブの作成・モデルのデプロイ・推論の呼び出し・削除で SDK が送ったリクエストは、間に置いた記録用のプロキシで保存しています。学習スクリプトは NumPy 2.4.6 で、SageMaker と同じ環境変数を与えて実行しました(確認日 2026年10月23日)。

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「SageMakerとは|できること・料金・SDKの使い方とBedrockとの違い」

SageMakerとは(SageMaker AI・Unified Studioとの関係)

この節では、SageMaker が何をするサービスで、名前がどう変わったのかが分かります。

Amazon SageMaker(セージメーカー)は、機械学習(ML)のモデルを作って、学習させて、本番で使えるようにするまでを、AWS の上でまとめて行うためのサービスです。 自分でサーバーを用意しなくても、学習用の GPU インスタンスを必要な時間だけ借り、学習が終わったら自動で止め、できたモデルを API として公開できます。公式ドキュメントは SageMaker AI を「フルマネージド型の機械学習 (ML) サービス」と説明しています。

2024年12月に名前が変わった

2024年12月3日、それまでの Amazon SageMaker は「Amazon SageMaker AI」に名前が変わりました。 同じ日に、データ分析と AI をまとめた「次世代の Amazon SageMaker」が発表され、SageMaker という名前はその全体を指すようになりました。

flowchart LR
    S[次世代の<br>Amazon SageMaker] --> AI[SageMaker AI<br>旧 SageMaker]
    S --> U[Unified Studio<br>1つの開発画面]
    S --> L[Lakehouse・Catalog<br>データの統合と管理]
    S --> B[Amazon Bedrock<br>生成 AI アプリ]

公式ドキュメント(Amazon SageMaker AI とは)が挙げている次世代の SageMaker の部品です(2026年10月23日時点)。

部品 役割
SageMaker AI(旧 Amazon SageMaker) ML モデル・基盤モデルの構築・学習・デプロイ
SageMaker Unified Studio 分析と AI のデータ・ツールを1つの開発環境で使う
SageMaker Lakehouse S3 のデータレイク・Redshift などのデータを統一して扱う
SageMaker Data and AI Governance SageMaker Catalog でデータと AI を検出・管理
SQL Analytics Amazon Redshift で SQL 分析
SageMaker データ処理 Athena・EMR・Glue でデータを準備
Amazon Bedrock 生成 AI アプリの構築

製品ページには、トヨタ・Charter Communications・Lennar・Carrier・NatWest Group の事例が紹介されています。

「SageMaker で学習・推論をする」という話は、今は SageMaker AI の機能を指します。 この記事も主に SageMaker AI を扱います。名前が変わっても、API の名前空間 sagemaker、AWS CLI の aws sagemaker、AmazonSageMaker で始まる管理ポリシー、CloudFormation の AWS::SageMaker などは変わっていません(下位互換のため)。以前のコードや手順はそのまま動きます。

SageMaker Studio と Unified Studio の違い

名前が似ている画面が2つあります。

SageMaker Studio(SageMaker AI の画面)

ML の作業のための Web の画面

JupyterLab・Code Editor・RStudio・Studio Classic

「ドメイン」と「ユーザープロファイル」で使う

SageMaker Unified Studio

データ・分析・AI をまとめた開発画面

SQL 分析・データ処理・Bedrock も同じ画面

「ドメイン」と「プロジェクト」で使う

Code Editor は VS Code のオープンソース版(Code-OSS)をもとにしたエディターです。2023年11月30日より前の Studio の画面は「Studio Classic」と呼ばれています。Unified Studio は2026年4月に、IAM ドメインのプロジェクトで複数のコードスペースを作れるようになり、IAM Identity Center(IdC)のドメインでもサーバーレスのノートブックとデータエージェントが使えるようになりました(AWS の What's New)。

SageMakerでできること(機能の早見表)

この節では、SageMaker AI の主な機能と、どれを使えばよいかが一覧で分かります。

1作る

Studio の JupyterLab・Code Editor でデータを見てコードを書く。ノーコードなら Canvas

2学習する

学習ジョブで必要な時間だけインスタンスを借りる。終われば止まる

3使う・運用する

エンドポイントで API にする。Pipelines・Model Registry で繰り返しを自動化

機能 何をするか 使う場面
Studio(JupyterLab・Code Editor) ブラウザで使う開発環境 データの確認・コードを書く
ノートブックインスタンス 1台の Jupyter サーバー 以前からの手軽な環境
学習ジョブ(Training) コンテナで学習して S3 にモデルを保存 モデルを作る
ハイパーパラメーター調整 値を変えて学習を何回も走らせる 精度を上げる
推論エンドポイント モデルを HTTPS の API にする アプリから予測を呼ぶ
バッチ変換 大量のデータにまとめて推論 夜間の一括処理
JumpStart 公開・事前学習済みのモデルを選んで使う 基盤モデルをデプロイ・微調整
Canvas ノーコードで予測モデル・LLM とのチャット コードを書かない人
Pipelines 前処理→学習→登録をワークフローにする MLOps
Model Registry モデルの版と承認を管理 本番に出すモデルの管理
HyperPod 大きな学習用の長く動くクラスター 基盤モデルの学習
Processing 前処理・評価のジョブ 学習の前後の処理

Canvas は、公式ドキュメントによると、コードを書かずに数値の予測(回帰)・カテゴリの予測(分類)・時系列の予測・画像や文章の分類のモデルを作れ、LLM とのチャットや Amazon Rekognition・Textract・Comprehend を使った「すぐ使えるモデル」も使えます。

組み込みアルゴリズムと学習の3つのやり方

学習のやり方は、公式ドキュメント(学習の概要)で3つに分けられています。

やり方 中身 向いている人
ノーコード Canvas の画面で作る コードを書かない人
組み込みアルゴリズム・JumpStart AWS が用意したアルゴリズム・事前学習済みモデルを SDK で使う 自分でアルゴリズムを書かずに学習したい人
スクリプトモード・独自コンテナ PyTorch・scikit-learn などの自分のスクリプトか、自作の Docker イメージ 細かく決めたい人(この記事の SDK の例)

組み込みアルゴリズムは、公式ドキュメントの一覧では次のものがあります(2026年10月23日時点)。

分野 主な組み込みアルゴリズム
表のデータ(分類・回帰) XGBoost・LightGBM・CatBoost・Linear Learner・k-NN・AutoGluon-Tabular・TabTransformer・Factorization Machines
時系列の予測 DeepAR
教師なし学習 PCA・K-Means・Random Cut Forest(異常検知)・IP Insights
文章 BlazingText・Sequence-to-Sequence・LDA・Neural Topic Model・Text Classification
画像 Image Classification・Object Detection・Semantic Segmentation

無料で試せた SageMaker Studio Lab は、新しい利用者の受け付けを終えています。 公式ドキュメントには「no longer open to new customers」とあり、今の利用者は使い続けられますが、新しい機能は足さないと書かれています(2026年10月23日時点)。

SageMakerの仕組み(学習ジョブと推論エンドポイント)

この節では、学習から推論までの間に SageMaker が裏で何をしているのかが分かります。

学習ジョブの中で起きること

SageMaker の学習は「指定したコンテナのイメージを、指定したインスタンスで、指定した時間だけ動かす」ジョブです。 公式ドキュメントによると、SageMaker は既定で docker run image train の形でコンテナを起動します。コンテナの中は次のフォルダの決まりで動きます。

コンテナの中の場所 中身
/opt/ml/input/data/チャネル名/ S3 から取ってきた学習データ(チャネルごと)
/opt/ml/input/config/hyperparameters.json ハイパーパラメーター
/opt/ml/input/config/inputdataconfig.json 入力データの設定
/opt/ml/model/ ここに保存したものが model.tar.gz になる
/opt/ml/output/failure 失敗の理由を書く場所

学習が終わると、SageMaker は /opt/ml/model/ の中身を model.tar.gz にまとめて、出力先の S3 に置き、インスタンスを止めます。止める操作(StopTrainingJob)は docker stop -t 120 と同じで、SIGTERM を送ってから 120 秒で SIGKILL になります。

推論エンドポイントの3つの部品

推論の API は、3つのリソースを順に作ってできあがります。エンドポイントを消しても、モデルとエンドポイント設定は残ります。 課金されるのはインスタンスが動いているエンドポイントです。

flowchart TD
    M[Model<br>イメージと model.tar.gz] --> C[EndpointConfig<br>インスタンスの種類と台数]
    C --> E[Endpoint<br>HTTPS の API]
    E --> I[InvokeEndpoint<br>アプリからの推論]

アプリからは、POST /endpoints/エンドポイント名/invocations に本文(CSV や JSON)を送ります(SageMaker Runtime API)。

SageMakerの料金と無料枠

この節では、何にいくらかかるのか、無料で使える範囲がどこまでかが分かります。

SageMaker AI の料金は、選んだインスタンスが動いている時間・ストレージ・処理したデータの量で決まる従量課金です。 最低料金や前払いはありません。Studio の画面そのものは無料で、動かしたコンピューティングとストレージに料金がかかります。使用量を約束する SageMaker Savings Plans では、公式の料金ページによると最大 64% 安くなります。

使い方 何に課金されるか
Studio の JupyterLab・Code Editor スペースが動いている時間(インスタンスの種類で単価が違う)+ストレージ
ノートブックインスタンス 動いている時間
学習ジョブ ジョブが動いている時間×台数
リアルタイム推論 エンドポイントが動いている時間×台数(リクエストが無くてもかかる)
サーバーレス推論 推論の処理時間(ミリ秒)・メモリの設定・処理したデータの量
非同期推論・バッチ変換 動いているインスタンスの時間
ストレージ 料金例では 1GB あたり月 0.1125 USD のリージョン

無料枠(最初の2か月)

料金ページの「AWS 無料利用枠」の表です(2026年10月23日時点)。最初の SageMaker AI のリソースを作った月から数えて、2か月の間、毎月次の量が無料です。

対象 1か月あたりの無料の量
Studio ノートブック・ノートブックインスタンス ml.t3.medium を 250 時間
学習 m4.xlarge か m5.xlarge を 50 時間
リアルタイム推論 m4.xlarge か m5.xlarge を 125 時間
サーバーレス推論 150,000 秒
Canvas セッション 160 時間
HyperPod m5.xlarge を 50 時間

AWS の無料のページは、新しく作るアカウントに「最大200USD のクレジット」と「無料プラン・有料プラン」の仕組みを案内しています。無料プランで使えるのは一部のサービスに限られます。自分のアカウントで SageMaker AI の無料枠やクレジットがどう当たるかは、請求のコンソールで確かめます。

止め忘れるといくらかかるか

料金ページの計算例に出てくる時間単価(リージョンの記載なし)で、1台を止めずに置いたときの金額を計算しました。実際の単価はリージョンで違うので、AWS 料金見積りツールで確かめます。

rates = {"ml.c5.xlarge": 0.204, "ml.m5.xlarge": 0.23, "ml.g4dn.xlarge": 0.7364, "ml.m5.4xlarge": 0.922}
for k, r in rates.items():
    print(f"{k:15s} {r:7.4f} USD/時  1日 {r*24:7.2f}  30日 {r*24*30:8.2f} USD")
ml.c5.xlarge     0.2040 USD/時  1日    4.90  30日   146.88 USD
ml.m5.xlarge     0.2300 USD/時  1日    5.52  30日   165.60 USD
ml.g4dn.xlarge   0.7364 USD/時  1日   17.67  30日   530.21 USD
ml.m5.4xlarge    0.9220 USD/時  1日   22.13  30日   663.84 USD

1台を30日止めずに置いたときの金額料金ページの計算例の単価で計算(USD)

c5.xlarge146.88
m5.xlarge165.60
g4dn.xlarge530.21
m5.4xlarge663.84

リアルタイム推論のエンドポイントは、リクエストが1件も来なくても、動いている間ずっと課金されます。 無料枠のリアルタイム推論 125 時間は、1台を24時間動かすと約5.2日で使い切ります。学習ジョブは終われば止まりますが、エンドポイント・ノートブック・Studio のスペースは自分で止めるまで動き続けます。

止め忘れで課金されないための確認と削除

この節では、動いたままのリソースを見つけて止める方法が、コマンドとコードで分かります。

動いているものを一覧にする(AWS CLI)

AWS CLI で、課金が続くリソースを一覧にするコマンドです。moto に向けて実行した出力も並べます。

aws sagemaker list-endpoints --query 'Endpoints[].[EndpointName,EndpointStatus]' --output text
aws sagemaker list-notebook-instances --status-equals InService \
  --query 'NotebookInstances[].[NotebookInstanceName,InstanceType,NotebookInstanceStatus]' --output text
aws sagemaker list-training-jobs --status-equals InProgress --query 'TrainingJobSummaries[].TrainingJobName' --output text
# Studio のアプリ(JupyterLab・Code Editor のスペース)
aws sagemaker list-apps --query 'Apps[?Status==`InService`].[AppName,AppType,SpaceName]' --output text
s360-realtime   InService
s360-serverless InService
s360-nb ml.t3.medium    InService

コマンドはリージョンごとに見ます。東京で作ったものは --region ap-northeast-1 で見ないと出てきません。

消す順番

エンドポイントは「エンドポイント → エンドポイント設定 → モデル」の順に消します。ノートブックインスタンスは止めてから消します。

aws sagemaker delete-endpoint --endpoint-name s360-realtime
aws sagemaker delete-endpoint-config --endpoint-config-name s360-realtime
aws sagemaker delete-model --model-name s360-sklearn-model
aws sagemaker stop-notebook-instance --notebook-instance-name s360-nb
aws sagemaker describe-notebook-instance --notebook-instance-name s360-nb --query NotebookInstanceStatus --output text
aws sagemaker delete-notebook-instance --notebook-instance-name s360-nb
Stopped

動いたままのノートブックインスタンスを消そうとすると、moto は次のエラーを返しました。

An error occurred (ValidationException) when calling the DeleteNotebookInstance operation: Status (InService) not in ([Stopped, Failed]). Unable to transition to (Deleting) for Notebook Instance (arn:aws:sagemaker:ap-northeast-1:123456789012:notebook-instance/s360-nb2)

Python でまとめて消す(SDK v3)

SDK v3 の sagemaker-core には、AWS のリソースをそのままクラスにした sagemaker.core.resources があります。動いているエンドポイントを探して、設定とモデルまで消すスクリプトです。

from sagemaker.core.resources import Endpoint, EndpointConfig, Model, NotebookInstance

for ep in Endpoint.get_all():
    print("稼働中のエンドポイント:", ep.endpoint_name, ep.endpoint_status)
    cfg = EndpointConfig.get(endpoint_config_name=ep.endpoint_config_name)
    models = [v.model_name for v in cfg.production_variants]
    ep.delete()
    cfg.delete()
    for name in models:
        Model.get(model_name=name).delete()
    print("  削除:", ep.endpoint_name, "/", cfg.endpoint_config_name, "/", ", ".join(models))

for nb in NotebookInstance.get_all(status_equals="InService"):
    print("稼働中のノートブックインスタンス:", nb.notebook_instance_name)

print("残りのエンドポイント:", [e.endpoint_name for e in Endpoint.get_all()])
稼働中のエンドポイント: s360-realtime InService
  削除: s360-realtime / s360-realtime / s360-sklearn-model
残りのエンドポイント: []

Studio のアイドルシャットダウンを設定する

Studio の JupyterLab と Code Editor には、使っていない時間が続くと自動で止めるアイドルシャットダウンがあります。公式ドキュメントでは、ドメインかユーザープロファイルの単位で設定し、画面で時間を入れないと既定は 10,080 分(7日)、ユーザーが変えられる最小値は 60 分です。AWS CLI では update-domain に次の JSON を渡します(SageMaker Distribution 2.0 以降のイメージが条件)。

{
  "JupyterLabAppSettings": {
    "AppLifecycleManagement": {
      "IdleSettings": {
        "LifecycleManagement": "ENABLED",
        "IdleTimeoutInMinutes": 120,
        "MinIdleTimeoutInMinutes": 60,
        "MaxIdleTimeoutInMinutes": 240
      }
    }
  }
}
aws sagemaker update-domain --domain-id d-xxxxxxxxxxxx --default-user-settings file://default-user-settings.json

この JSON を botocore 1.43.118 の API の定義で検査すると通り、IdleTimeoutInMinutes を 30 にすると次のエラーになりました。定義の範囲は 60〜525,600 分です。

UpdateDomain: OK
ParamValidationError Invalid value for parameter DefaultUserSettings.JupyterLabAppSettings.AppLifecycleManagement.IdleSettings.IdleTimeoutInMinutes, value: 30, valid min value: 60

請求の金額の見方と予算アラートの作り方は、関連記事「AWSの料金を確認する方法|Cost Explorer・CLI・予算アラート」で扱っています。

SageMakerの始め方(ドメイン・Studio・IAMロール)

この節では、SageMaker AI を使い始めるまでの順番が分かります。

1

AWS アカウントと予算アラート

アカウントを作り、ルートユーザーに MFA を付け、AWS Budgets で予算アラートを作る。

2

リージョンを選ぶ

コンソール右上でリージョン(例:東京 ap-northeast-1)を選ぶ。リソースはリージョンごとに分かれる。

3

ドメインを作る

SageMaker AI のコンソールでドメインを作る。1人で試すなら「Set up for single user (Quick setup)」を選ぶ。ドメインとユーザープロファイルが自動で作られる。

4

実行ロールを確かめる

クイックセットアップでは AmazonSageMakerFullAccess を付けた実行ロール(IAM ロール)が作られる。学習ジョブやエンドポイントはこのロールの権限で S3 などを読む。

5

Studio を開いて JupyterLab を起動

スペースを作り、インスタンス(無料枠なら ml.t3.medium)を選んで起動する。使い終わったら止める。

実行ロールは、SageMaker のサービス(sagemaker.amazonaws.com)が引き受ける IAM ロールです。 信頼ポリシーにこのサービスが入っていないと、学習ジョブは「Could not assume role」で失敗します。手元でロールを作るときの信頼ポリシーです。

{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"Service":"sagemaker.amazonaws.com"},"Action":"sts:AssumeRole"}]}

ロールと信頼ポリシーの仕組みは、関連記事「IAMロールとは|ユーザー・ポリシーとの違いとAssumeRole、信頼ポリシー」で扱っています。JupyterLab の操作は、関連記事「JupyterLabの使い方|ショートカット・マジックコマンド一覧」で扱っています。

SageMaker Python SDKの書き方(v3のModelTrainer)

この節では、Python から学習ジョブを作るコードと、そのとき SDK が実際に AWS へ送る中身が分かります。

SDK v3 で変わったこと

SageMaker Python SDK は 2025年11月20日の 3.0 で大きく作り直され、v2 の Estimator・Model・Predictor が無くなりました。 学習は ModelTrainer、推論は ModelBuilder の1つのクラスにまとめられています(SDK の公式ドキュメント)。PyPI の最新は 3.27.0 です(2026年10月23日時点)。v3 は役割ごとのパッケージに分かれています。

パッケージ 役割 主なクラス
sagemaker-core AWS のリソースを直接扱う TrainingJob・Endpoint・Model
sagemaker-train 学習 ModelTrainer・SFTTrainer・DPOTrainer
sagemaker-serve 推論 ModelBuilder
sagemaker-mlops パイプライン Pipeline・TrainingStep
pip install sagemaker            # v3(上の4つがまとめて入る。Python 3.10 以上)
pip install "sagemaker<3"        # v2 のコードを動かし続けるとき

学習スクリプトを書く

学習スクリプトは、環境変数 SM_CHANNEL_チャネル名 からデータの場所、SM_MODEL_DIR から保存先を読み、ハイパーパラメーターをコマンドライン引数で受け取ります。NumPy だけでロジスティック回帰を学習する例です。

# src/train.py
import argparse, json, os
import numpy as np

p = argparse.ArgumentParser()
p.add_argument("--lr", type=float, default=0.5)
p.add_argument("--epochs", type=int, default=300)
a = p.parse_args()

train_dir = os.environ.get("SM_CHANNEL_TRAIN", "/opt/ml/input/data/train")
model_dir = os.environ.get("SM_MODEL_DIR", "/opt/ml/model")
d = np.loadtxt(os.path.join(train_dir, "train.csv"), delimiter=",")
y, X = d[:, 0], np.c_[d[:, 1:], np.ones(len(d))]

w = np.zeros(X.shape[1])
for _ in range(a.epochs):                      # ロジスティック回帰を勾配降下で学習
    p_ = 1 / (1 + np.exp(-X @ w))
    w -= a.lr * X.T @ (p_ - y) / len(y)

acc = float(((1 / (1 + np.exp(-X @ w)) > 0.5) == y).mean())
print(json.dumps({"train_accuracy": round(acc, 3), "weights": [round(v, 3) for v in w]}))
with open(os.path.join(model_dir, "model.json"), "w") as f:
    json.dump({"weights": w.tolist()}, f)

AWS に送る前に、同じ環境変数を与えて手元で動かすと、パスや引数の間違いを先に見つけられます。 200行の CSV(1列目が正解の 0・1)で実行しました。

mkdir -p optml/input/data/train optml/model && cp data/train.csv optml/input/data/train/
SM_CHANNEL_TRAIN=$PWD/optml/input/data/train SM_MODEL_DIR=$PWD/optml/model \
  python src/train.py --lr 0.5 --epochs 300
tar czf model.tar.gz -C optml/model . && tar tzvf model.tar.gz
{"train_accuracy": 0.95, "weights": [3.935, 4.426, -3.865]}
drwxr-xr-x root/root         0 2026-10-23 16:33 ./
-rw-r--r-- root/root        71 2026-10-23 16:33 ./model.json

SageMaker は /opt/ml/model/ をこれと同じ形の model.tar.gz にして S3 に置きます。

ModelTrainer で学習ジョブを作る

from sagemaker.train import ModelTrainer
from sagemaker.core.training.configs import (
    SourceCode, Compute, InputData, StoppingCondition, OutputDataConfig)
from sagemaker.core import image_uris
from sagemaker.core.helper.session_helper import Session

image = image_uris.retrieve(framework="sklearn", region="ap-northeast-1", version="1.2-1")
trainer = ModelTrainer(
    training_image=image,
    source_code=SourceCode(source_dir="src", entry_script="train.py"),
    compute=Compute(instance_type="ml.m5.xlarge", instance_count=1, volume_size_in_gb=30),
    stopping_condition=StoppingCondition(max_runtime_in_seconds=3600),
    hyperparameters={"lr": 0.5, "epochs": 300},
    role="arn:aws:iam::123456789012:role/SageMakerExecutionRole",
    base_job_name="s360-sklearn",
    sagemaker_session=Session(default_bucket="s360-ml-demo"),
    output_data_config=OutputDataConfig(s3_output_path="s3://s360-ml-demo/output"),
)
trainer.train(input_data_config=[
    InputData(channel_name="train", data_source="s3://s360-ml-demo/data/train/")], wait=False)

image_uris.retrieve は、AWS が用意している学習用コンテナのイメージの URI を返します。SDK の中の表から引くので、AWS に接続しなくても値が出ます。

sklearn 354813040037.dkr.ecr.ap-northeast-1.amazonaws.com/sagemaker-scikit-learn:1.2-1-cpu-py3
xgboost 354813040037.dkr.ecr.ap-northeast-1.amazonaws.com/sagemaker-xgboost:1.7-1
pytorch 763104351884.dkr.ecr.ap-northeast-1.amazonaws.com/pytorch-training:2.5-gpu-py311

SDK が実際に送ったリクエスト(実物)

このコードを moto に向けて動かし、間に置いたプロキシで記録しました。train() の1行で、SDK はまず学習スクリプトと「ドライバー」のファイル 25 個を S3 に上げ、それから CreateTrainingJob を1回呼びます。

PUT  /s360-ml-demo/s360-sklearn/s360-sklearn-20261023164252/input/code/train.py
PUT  /s360-ml-demo/s360-sklearn/s360-sklearn-20261023164252/input/sm_drivers/__init__.py
PUT  /s360-ml-demo/s360-sklearn/s360-sklearn-20261023164252/input/sm_drivers/sourcecode.json
…(sm_train.sh・sm_drivers の下の Python ファイルなど、合わせて 25 個)
POST /  X-Amz-Target: SageMaker.CreateTrainingJob
POST /  X-Amz-Target: SageMaker.DescribeTrainingJob

CreateTrainingJob の本文です(User-Agent の末尾は lib/AWS-SageMakerCore#2.27.0)。

{
  "TrainingJobName": "s360-sklearn-20261023164252",
  "HyperParameters": {"lr": "0.5", "epochs": "300"},
  "AlgorithmSpecification": {
    "TrainingInputMode": "File",
    "TrainingImage": "354813040037.dkr.ecr.ap-northeast-1.amazonaws.com/sagemaker-scikit-learn:1.2-1-cpu-py3",
    "ContainerEntrypoint": ["/bin/bash"],
    "ContainerArguments": ["-c", "chmod +x /opt/ml/input/data/sm_drivers/sm_train.sh && /opt/ml/input/data/sm_drivers/sm_train.sh"]
  },
  "RoleArn": "arn:aws:iam::123456789012:role/SageMakerExecutionRole",
  "InputDataConfig": [
    {"ChannelName": "train", "DataSource": {"S3DataSource": {"S3DataType": "S3Prefix",
      "S3Uri": "s3://s360-ml-demo/data/train/", "S3DataDistributionType": "FullyReplicated"}}, "InputMode": "File"},
    {"ChannelName": "code", "DataSource": {"S3DataSource": {"S3DataType": "S3Prefix",
      "S3Uri": "s3://s360-ml-demo/s360-sklearn/s360-sklearn-20261023164252/input/code", "S3DataDistributionType": "FullyReplicated"}}, "InputMode": "File"},
    {"ChannelName": "sm_drivers", "DataSource": {"S3DataSource": {"S3DataType": "S3Prefix",
      "S3Uri": "s3://s360-ml-demo/s360-sklearn/s360-sklearn-20261023164252/input/sm_drivers", "S3DataDistributionType": "FullyReplicated"}}, "InputMode": "File"}
  ],
  "OutputDataConfig": {"S3OutputPath": "s3://s360-ml-demo/output", "CompressionType": "GZIP"},
  "ResourceConfig": {"InstanceType": "ml.m5.xlarge", "InstanceCount": 1, "VolumeSizeInGB": 30},
  "StoppingCondition": {"MaxRuntimeInSeconds": 3600}
}

読み取れることは次のとおりです。

  • ハイパーパラメーターは文字列に変えて送られます(0.5 → "0.5")。API の定義でも文字列の組で、最大 100 個です。
  • 学習スクリプトは code、SDK が用意する起動用のスクリプトは sm_drivers という入力チャネルとして渡され、コンテナの /opt/ml/input/data/code などに置かれます。
  • コンテナは /bin/bash -c "… sm_train.sh" で始まり、sm_train.sh が環境変数を整えてから学習スクリプトを動かします。SDK のソースでは、ハイパーパラメーターは {'lr': '0.5', 'epochs': '300'} → ['--lr', '0.5', '--epochs', '300'] の引数に変えられます(手元でその関数を呼んで確かめた結果)。
  • MaxRuntimeInSeconds は止まる時間の上限です。API の既定は1日、最大は28日です。入れておくと、終わらない学習で課金が続くのを防げます。

moto の DescribeTrainingJob は、学習の結果の置き場所を s3://s360-ml-demo/output/s360-sklearn-20261023162645/output/model.tar.gz の形で返しました。「出力先/ジョブ名/output/model.tar.gz」です。

SDK v3 の役割の確認とテレメトリー

v3 は、学習ジョブを作る前に、渡したロールの権限を IAM の SimulatePrincipalPolicy で確かめます(sagemaker-core の iam_role_resolver.py)。権限や信頼ポリシーが足りないと、AWS に送る前に RoleValidationError で止まります。確かめを省くときは、ソースにあるとおり環境変数 SAGEMAKER_VALIDATE_ROLE=false を設定します。

SDK は、使い方の情報(テレメトリー)を AWS に送ります。止めるときは SDK の設定ファイル(config.yaml)に書きます。

SchemaVersion: '1.0'
SageMaker:
  PythonSDK:
    Modules:
      TelemetryOptOut: true

設定ファイルの場所は ~/.config/sagemaker/config.yaml か、環境変数 SAGEMAKER_USER_CONFIG_OVERRIDE で指定したパスです。読み込まれると Applied value from config key = SageMaker.PythonSDK.Modules.TelemetryOptOut と表示されました。

AWS に接続せずに試す(moto)

SDK のコードは、moto のサーバーに向けると AWS の料金をかけずに動きを確かめられます。この記事のリクエストはこの形で取りました。moto は API を受け付けて記録するだけで、学習や推論の計算はしません。

pip install moto flask flask-cors
moto_server -H 127.0.0.1 -p 36000 &
export AWS_ACCESS_KEY_ID=testing AWS_SECRET_ACCESS_KEY=testing AWS_DEFAULT_REGION=ap-northeast-1
export AWS_ENDPOINT_URL=http://127.0.0.1:36000      # boto3・AWS CLI の向き先をまとめて変える
aws s3api create-bucket --bucket s360-ml-demo --create-bucket-configuration LocationConstraint=ap-northeast-1

Session() の既定のバケット名は STS で取ったアカウント ID から作られ、そのとき SDK はリージョンの STS のエンドポイントを直接指定して呼びます。moto で試すときは、上のコードのように Session(default_bucket=…) でバケットを渡すと、STS を呼ばずに進みます。

SDK v2(Estimator)からv3への書き換え

この節では、検索でよく見る v2 のコードを v3 に直す方法が分かります。

v3 を入れた環境で v2 のコードを動かすと、import の時点でエラーになります。 v3.27.0 で実際に出たエラーです。

from sagemaker.estimator import Estimator     → ModuleNotFoundError: No module named 'sagemaker.estimator'
from sagemaker.pytorch import PyTorch         → ModuleNotFoundError: No module named 'sagemaker.pytorch'
from sagemaker import get_execution_role      → ImportError: cannot import name 'get_execution_role' from 'sagemaker'
import sagemaker; sagemaker.Session()         → AttributeError: module 'sagemaker' has no attribute 'Session'

v2(2.257.7)を入れると、import のたびに次の警告が出ます。

SKLearn is part of the SageMaker Python SDK v2, which is on path of deprecation. In v3, use `ModelTrainer` (`from sagemaker.train import ModelTrainer`).
See https://github.com/aws/sagemaker-python-sdk/blob/master/migration.md for the migration guide. Set SAGEMAKER_SUPPRESS_V2_WARNING=1 to silence this warning.

SDK の公式ドキュメントの対応表です。

v2 v3
sagemaker.estimator.Estimator・PyTorch・SKLearn など sagemaker.train.ModelTrainer
estimator.fit({"train": "s3://..."}) trainer.train(input_data_config=[InputData(...)])
instance_type="ml.m5.xlarge" Compute(instance_type="ml.m5.xlarge")
entry_point="train.py"・source_dir="./src" SourceCode(entry_script=..., source_dir=...)
TrainingInput(s3_data=...) InputData(channel_name=..., data_source=...)
max_run=3600 StoppingCondition(max_runtime_in_seconds=3600)
estimator.deploy() → Predictor ModelBuilder(...).deploy() → Endpoint
predictor.predict(data) endpoint.invoke(body=data, content_type=...)
sagemaker.Session() sagemaker.core.helper.session_helper.Session()
sagemaker.image_uris.retrieve(...) sagemaker.core.image_uris.retrieve(...)
HyperparameterTuner sagemaker.core.resources.HyperParameterTuningJob

同じ学習を v2 の SKLearn で書いたコードです。

import sagemaker
from sagemaker.sklearn import SKLearn
from sagemaker.inputs import TrainingInput

sess = sagemaker.Session(default_bucket="s360-ml-demo")
est = SKLearn(
    entry_point="train.py", source_dir="src", framework_version="1.2-1",
    role="arn:aws:iam::123456789012:role/SageMakerExecutionRole",
    instance_type="ml.m5.xlarge", instance_count=1, max_run=3600,
    hyperparameters={"lr": 0.5, "epochs": 300}, base_job_name="s360-v2", sagemaker_session=sess,
    output_path="s3://s360-ml-demo/output",
)
est.fit({"train": TrainingInput("s3://s360-ml-demo/data/train/", content_type="text/csv")}, wait=False)

同じ学習で、SDK が送ったものの違い

v2 の SKLearnsourcedir.tar.gz を1つ上げる。HyperParameters に sagemaker_program・sagemaker_submit_directory など5つの項目が足される。DebugHookConfig・ProfilerConfig も付く
→
v3 の ModelTrainerスクリプトとドライバーを25個のファイルで上げ、code・sm_drivers のチャネルで渡す。HyperParameters は自分で書いた lr・epochs だけ

v2 は sagemaker_program などの値をコンテナが読んでスクリプトを起動し、v3 は SDK が上げる sm_train.sh が起動する

v2 が送った HyperParameters の実物です。値の文字列に " が入っているのは、v2 が JSON にしてから文字列にするためです。

{
  "lr": "0.5",
  "epochs": "300",
  "sagemaker_submit_directory": "\"s3://s360-ml-demo/s360-v2-2026-10-23-07-34-39-415/source/sourcedir.tar.gz\"",
  "sagemaker_program": "\"train.py\"",
  "sagemaker_container_log_level": "20",
  "sagemaker_job_name": "\"s360-v2-2026-10-23-07-34-39-415\"",
  "sagemaker_region": "\"ap-northeast-1\""
}

すぐに書き換えられないときは、pip install "sagemaker<3" で v2 に固定すると以前のコードが動きます。 v2 には新しい機能(SFTTrainer などのモデルのカスタマイズ)が入らないので、新しく書くコードは v3 にします。

モデルのデプロイと推論の種類(リアルタイム・サーバーレス・非同期・バッチ)

この節では、学習したモデルを API にする方法と、4つの推論の方式から選ぶ基準が分かります。

ModelBuilder でエンドポイントを作る

from sagemaker.serve import ModelBuilder
from sagemaker.core import image_uris
from sagemaker.core.helper.session_helper import Session

mb = ModelBuilder(
    image_uri=image_uris.retrieve(framework="sklearn", region="ap-northeast-1", version="1.2-1"),
    s3_model_data_url="s3://s360-ml-demo/output/s360-sklearn-20261023162645/output/model.tar.gz",
    role_arn="arn:aws:iam::123456789012:role/SageMakerExecutionRole",
    instance_type="ml.m5.xlarge",
    sagemaker_session=Session(default_bucket="s360-ml-demo"),
)
mb.build(model_name="s360-sklearn-model")
endpoint = mb.deploy(endpoint_name="s360-realtime", initial_instance_count=1)
print("endpoint:", endpoint.endpoint_name, endpoint.endpoint_status)
r = endpoint.invoke(body="0.9,0.8", content_type="text/csv")
print("response:", r.body.read())
endpoint: s360-realtime InService
response: b'1\n'

(推論の答え 1 は、moto に前もって登録しておいた返り値です。)deploy() は InService になるまで待ち、SDK は CreateModel → CreateEndpointConfig → CreateEndpoint の順に3回 API を呼びました。それぞれの本文です。

// CreateModel
{"ModelName": "s360-sklearn-model",
 "ExecutionRoleArn": "arn:aws:iam::123456789012:role/SageMakerExecutionRole",
 "PrimaryContainer": {
   "Image": "354813040037.dkr.ecr.ap-northeast-1.amazonaws.com/sagemaker-scikit-learn:1.2-1-cpu-py3",
   "Environment": {},
   "ModelDataUrl": "s3://s360-ml-demo/output/s360-sklearn-20261023162645/output/model.tar.gz"}}

// CreateEndpointConfig
{"EndpointConfigName": "s360-realtime",
 "ProductionVariants": [{"VariantName": "AllTraffic", "ModelName": "s360-sklearn-model",
   "InitialVariantWeight": 1, "InitialInstanceCount": 1, "InstanceType": "ml.m5.xlarge"}],
 "Tags": [{"Key": "sagemaker.amazonaws.com/model-source",
   "Value": "s3://s360-ml-demo/output/s360-sklearn-20261023162645/output/model.tar.gz"}]}

// CreateEndpoint
{"EndpointName": "s360-realtime", "EndpointConfigName": "s360-realtime",
 "Tags": [{"Key": "sagemaker.amazonaws.com/model-source",
   "Value": "s3://s360-ml-demo/output/s360-sklearn-20261023162645/output/model.tar.gz"}]}

endpoint.invoke() は、POST /endpoints/s360-realtime/invocations に Content-Type: text/csv、本文 0.9,0.8 を送りました。boto3 で直接呼ぶなら boto3.client("sagemaker-runtime").invoke_endpoint(EndpointName=..., ContentType="text/csv", Body="0.9,0.8") です。

サーバーレス推論にする

同じモデルを、リクエストがあるときだけ動くサーバーレス推論にするときは、inference_config を渡します。

from sagemaker.core.inference_config import ServerlessInferenceConfig

ep = mb.deploy(endpoint_name="s360-serverless",
               inference_config=ServerlessInferenceConfig(memory_size_in_mb=2048, max_concurrency=5))

SDK が送った CreateEndpointConfig では、インスタンスの種類と台数の代わりに ServerlessConfig が入りました。

{"EndpointConfigName": "s360-serverless",
 "ProductionVariants": [{"VariantName": "AllTraffic", "ModelName": "s360-sklearn-sls",
   "InitialVariantWeight": 1,
   "ServerlessConfig": {"MemorySizeInMB": 2048, "MaxConcurrency": 5}}], …}

v3.27.0 には同じ名前の ServerlessInferenceConfig が2か所にあります。 sagemaker.core.serverless_inference_config から import したものを渡すと、ValueError: Deployment Options not supported で止まりました。ModelBuilder が受け付けるのは sagemaker.core.inference_config のほうです。

4つの推論の方式の選び方

公式ドキュメント(推論のオプション)の値です(2026年10月23日時点)。

方式 向いている場面 上限(ドキュメントの値)
リアルタイム推論 低いレイテンシ・続けて来るアクセス 本文 25MB まで・60秒(ストリーミングは8分)
サーバーレス推論 アクセスがときどき・読めない 本文 4MB まで・60秒
非同期推論 大きな入力・長い処理をキューに入れる 本文 1GB まで・1時間。0台まで縮められる
バッチ変換 前もってある大量のデータを一括 GB 単位のデータ・日単位の処理
状況 選ぶもの 理由
画面から呼ばれて、すぐ答えを返す リアルタイム推論 常に動いていて速い
1日に数十件しか来ない サーバーレス推論 使った時間だけの課金
動画・大きな文書を1件ずつ時間をかけて処理 非同期推論 1GB・1時間まで、使わない時は0台
毎晩、全件にスコアを付ける バッチ変換 常に動くエンドポイントが要らない
GPU で大きな LLM を動かし続ける リアルタイム推論(Inference Components など) インスタンスの使い方を細かく決められる

サーバーレス推論は、最初のリクエストでインスタンスの準備に時間がかかることがあり、その間は ModelNotReadyException(HTTP 429)が返ることがあります(API リファレンス)。

JumpStart・Canvas・Pipelinesの使いどころ

この節では、自分でコードを書く以外の SageMaker の使い方が分かります。

JumpStart(公開モデルを選んでデプロイ)

JumpStart は、公開されている事前学習済みのモデルや基盤モデルを、画面かコードで選んでデプロイ・微調整できる機能です。 Studio の「Models」から、モデルのカードで「Deploy」「Fine-tune」「Evaluate」を選びます。SDK v3 では JumpStartConfig でモデルの ID を指定します(SDK のドキュメントの例)。

from sagemaker.serve import ModelBuilder
from sagemaker.core.jumpstart.configs import JumpStartConfig

model_builder = ModelBuilder.from_jumpstart_config(
    JumpStartConfig(model_id="huggingface-llm-falcon-7b-bf16"))

公式ドキュメントには、2026年3月13日に一部のモデルがカタログから外されたこと(既存のエンドポイントは動き続ける)と、第三者のモデルはライセンスを自分で確かめる必要があることが書かれています。Bedrock と SageMaker AI の選び方のガイドによると、JumpStart には約1,000のモデルがあります。

Pipelines(MLOps のワークフロー)

前処理・学習・モデルの登録をつないで、繰り返し動かせるようにするのが SageMaker Pipelines です。SDK v3 では sagemaker-mlops のパッケージに入っています。

from sagemaker.mlops.workflow.steps import ProcessingStep, TrainingStep, CacheConfig
from sagemaker.mlops.workflow.model_step import ModelStep
from sagemaker.mlops.workflow.pipeline import Pipeline

pipeline = Pipeline(name="my-pipeline", steps=[step_process, step_train, step_register],
                    sagemaker_session=pipeline_session)
pipeline.upsert(role_arn=role)   # 定義を作る・更新する
pipeline.start()                 # 実行する

使えるステップは ProcessingStep・TrainingStep・ModelStep・TuningStep・EMRServerlessStep などです(SDK のドキュメント)。

Canvas(ノーコード)

Canvas は、CSV などのデータを読み込み、予測したい列を選ぶだけでモデルを作る画面です。料金ページでは、Canvas の無料枠はセッション時間で月160時間です。

SageMakerとBedrockの違い・使い分け

この節では、生成 AI を使いたいときに SageMaker と Bedrock のどちらを選ぶかが分かります。

Bedrock は「用意されたモデルを API で呼ぶ」サービス、SageMaker AI は「自分のモデルを学習させて、インスタンスを選んで動かす」サービスです。 AWS の選び方のガイド(2026年7月23日更新)の比較をまとめました。

項目 Amazon Bedrock Amazon SageMaker AI
主な使い方 AI アプリ・エージェントを API で作る モデルの学習・カスタマイズ・デプロイ
想定する人 アプリの開発者・技術の意思決定者 ML エンジニア・データサイエンティスト
モデル Claude・Nova・Llama・Mistral など(Marketplace に100以上) JumpStart に約1,000・自分のモデル
カスタマイズ ファインチューニング・蒸留・モデルの取り込み SFT・DPO・RLVR・RLAIF、学習ジョブ、HyperPod
料金 入出力のトークン数で課金 学習・推論のインスタンスの時間(サーバーレスのカスタマイズはトークン)
インフラの管理 要らない(サーバーレス) インスタンスの種類と台数を自分で決める
呼び方 SDK・REST・OpenAI 互換のエンドポイント SageMaker の SDK・API(InvokeEndpoint)
flowchart TD
    Q[生成 AI を使いたい] --> P{プロンプトと<br>RAG で足りる?}
    P -->|はい| B[Bedrock の API]
    P -->|いいえ| C{どこまで<br>自分で決める?}
    C -->|SFT・DPO| S1[SageMaker AI<br>サーバーレス<br>カスタマイズ]
    C -->|大規模| S2[SageMaker AI<br>学習ジョブ<br>HyperPod]

ガイドは、2つは排他ではなく「Bedrock で始めて、足りなければ SageMaker AI でカスタマイズし、どちらかにデプロイする」という順番を示しています。SageMaker AI でカスタマイズしたモデルを Bedrock に取り込んでサーバーレスで使う道もあります。

やりたいこと 選ぶもの
Claude などをアプリから呼ぶ・RAG を作る Bedrock
売上予測・不正検知など、表のデータで自分のモデルを作る SageMaker AI
社内のデータで LLM を微調整する SageMaker AI(Bedrock のファインチューニングも可)
オープンなモデルを自分の GPU インスタンスで動かす SageMaker AI(JumpStart)
エージェントを本番で動かす Bedrock AgentCore(推論は Bedrock か SageMaker AI)

Bedrock の Converse API の呼び方は、関連記事「Bedrock Python入門|Converse APIでClaudeを呼ぶ」で扱っています。RAG とファインチューニングのどちらにするかは、関連記事「RAGとファインチューニングの違いと使い分け判断基準の早見表」で扱っています。

SageMakerのよくあるエラーと直し方

この節では、エラーの原文から原因と直し方を引けます。

エラー原文 原因 直し方
ModuleNotFoundError: No module named 'sagemaker.estimator' v3 で Estimator が無くなった ModelTrainer に書き換えるか pip install "sagemaker<3"
ImportError: cannot import name 'get_execution_role' from 'sagemaker' v3 で場所が変わった sagemaker.core.helper.session_helper から import
AttributeError: module 'sagemaker' has no attribute 'Session' v3 で場所が変わった 同じく session_helper の Session
RoleValidationError: IAM role '…' cannot be used for 'training' workloads. ロールの権限・信頼ポリシーが足りない(v3 の事前の確かめ) 足りない権限を足す。信頼ポリシーに sagemaker.amazonaws.com
Could not assume role 信頼ポリシーに SageMaker が無い 信頼ポリシーを直す
ResourceLimitExceeded … The account-level service limit 'ml.m5.xlarge for endpoint usage' is 0 Instances そのインスタンスの上限(クォータ)が0 Service Quotas で引き上げを申請
ResourceInUse 同じ名前の学習ジョブが既にある 名前を変える(base_job_name なら自動で時刻が付く)
ValidationException … Status (InService) not in ([Stopped, Failed]) 動いたままのノートブックを消そうとした 先に stop-notebook-instance
ValueError: Deployment Options not supported 別の ServerlessInferenceConfig を渡した sagemaker.core.inference_config から import
ValidationError … Extra inputs are not permitted 設定のクラスの引数名の間違い 引数名を確かめる(例:instance_type)
ModelError(HTTP 424) コンテナの推論コードが 4xx・5xx を返した CloudWatch Logs の /aws/sagemaker/Endpoints を見る
ModelNotReadyException(HTTP 429) サーバーレスの準備中・マルチモデルの読み込み中 待ってから再送

ResourceLimitExceeded(クォータが0)

GPU などのインスタンスは、アカウントの上限(クォータ)が最初から0になっていることがあり、そのときは学習ジョブもエンドポイントも作れません。 AWS re:Post の解説の手順で、Service Quotas のコンソールから「Amazon SageMaker」を選び、「ml.g5.xlarge for training job usage」「ml.g5.xlarge for endpoint usage」のように用途とインスタンスの種類が付いた項目の引き上げを申請します。クォータはリージョンごと・用途ごとに別です。

RoleValidationError(SDK v3 の役割の確かめ)

SDK v3 の sagemaker-core が組み立てるメッセージの全文です(信頼ポリシーと権限の両方が足りないとき)。

IAM role 'arn:aws:iam::123456789012:role/MyRole' cannot be used for 'training' workloads.
Its trust policy does not allow 'sagemaker.amazonaws.com' to assume it, so SageMaker cannot use it (the API would fail with 'Could not assume role').
Missing permissions: sagemaker:CreateTrainingJob

To fix this, either:
  1. Grant the permissions above (and ensure 'sagemaker.amazonaws.com' is a trusted principal) on a role, then pass it via the interface's 'role'/'role_arn' parameter. If you cannot modify or create IAM roles, ask your administrator to do this; or
  2. Create a dedicated least-privilege role and pass its ARN:
       from sagemaker.core.helper import IamRoleResolver
       role_arn = IamRoleResolver().create_execution_role(role_type='training')

権限の確かめ(SimulatePrincipalPolicy)を呼ぶ権限が自分に無いときは、エラーにはならず警告を出して進みます。

学習ジョブが Failed になったとき

学習スクリプトの例外は、学習ジョブの FailureReason と CloudWatch Logs の /aws/sagemaker/TrainingJobs に出ます。v3 の sm_train.sh は、失敗すると /opt/ml/output/failure に「Training Execution failed. For more details, see CloudWatch logs at 'aws/sagemaker/TrainingJobs'.」と書きます。手元で同じ環境変数を与えてスクリプトを動かす(「学習スクリプトを書く」の節)と、AWS の料金をかけずに多くの間違いを見つけられます。

S3 の読み書きで AccessDenied になるときは、実行ロールのポリシーとバケットポリシーの両方を見ます。

よくある質問

Q. SageMakerの読み方は? A. 「セージメーカー」です。AWS のサービス名で、正式には Amazon SageMaker、機械学習の部分は Amazon SageMaker AI です。

Q. SageMakerとSageMaker AIは何が違いますか? A. 2024年12月3日に、それまでの Amazon SageMaker が SageMaker AI に改名されました。今の「Amazon SageMaker」は、SageMaker AI・Unified Studio・Lakehouse・Bedrock などをまとめた「次世代の SageMaker」全体の名前です。API や CLI の sagemaker は変わっていません。

Q. SageMakerは無料で使えますか? A. 料金ページの無料枠では、最初の2か月、Studio ノートブックの ml.t3.medium を月250時間、学習を月50時間、リアルタイム推論を月125時間などが無料です(2026年10月23日時点)。無料枠を超えた分と、対象外のインスタンスは課金されます。

Q. SageMakerの料金が高くなる原因は? A. 多いのは、エンドポイント・ノートブックインスタンス・Studio のスペースの止め忘れです。リアルタイム推論は、リクエストが無くても動いている時間で課金されます。「止め忘れで課金されないための確認と削除」の節のコマンドで確かめます。

Q. Studio のスペースを止めれば料金はかかりませんか? A. コンピューティングの料金は止まりますが、ストレージの料金は残ります。料金ページには、JupyterLab・Code Editor のスペースのストレージ料金は、スペースを消すまでかかると書かれています。

Q. SageMaker Studioとノートブックインスタンスはどちらを使いますか? A. 新しく始めるなら Studio(JupyterLab・Code Editor)です。ノートブックインスタンスは1台の Jupyter サーバーを動かす以前からの形で、今も使えます。無料枠の表では、Studio ノートブックかノートブックインスタンスのどちらかで ml.t3.medium を月250時間です。

Q. SageMakerとBedrockはどちらを使えばよいですか? A. 用意されたモデル(Claude など)をアプリから呼ぶなら Bedrock、自分のデータでモデルを学習させたり、インスタンスを選んでモデルを動かしたりするなら SageMaker AI です。AWS のガイドは、Bedrock で始めて足りなければ SageMaker AI に進む順番を示しています。

Q. SageMaker Python SDKのv2とv3はどちらを使いますか? A. 新しく書くなら v3(pip install sagemaker)です。v2 のコード(Estimator など)を動かすなら pip install "sagemaker<3" で固定します。v2 は deprecation の道にあると、SDK 自身が警告を出します。

Q. SageMaker Studio Labは今も使えますか? A. 新しい利用者の受け付けを終えています。今の利用者は使い続けられます(公式ドキュメント、2026年10月23日時点)。

Q. ノーコードで機械学習を使えますか? A. SageMaker Canvas で、表のデータの予測(回帰・分類・時系列)や画像・文章の分類をコードなしで作れます。セッションの時間で課金されます。

Q. SageMakerでLLMを動かせますか? A. 動かせます。JumpStart で公開モデルを選んでエンドポイントにデプロイする方法と、自分でコンテナとモデルを用意してデプロイする方法があります。GPU のインスタンスはクォータが0のことがあるので、先に Service Quotas を確かめます。

まとめ

  • Amazon SageMaker は、機械学習の学習・デプロイ・運用の AWS サービス。2024年12月から、機械学習の部分は SageMaker AI、全体は「次世代の SageMaker」と呼ぶ。
  • 学習はジョブ(終われば止まる)、推論はエンドポイント(止めるまで課金)。止め忘れは list-endpoints などで確かめ、エンドポイント → 設定 → モデルの順に消す。
  • 無料枠は最初の2か月。Studio ノートブック ml.t3.medium 月250時間、学習50時間、リアルタイム推論125時間など。
  • SDK v3 は ModelTrainer(学習)と ModelBuilder(推論)。train() はスクリプトを S3 に上げて CreateTrainingJob を呼び、ハイパーパラメーターは文字列で送られる。
  • v2 のコードは v3 で import エラーになる。書き換えるか sagemaker<3 に固定する。
  • 推論は、リアルタイム・サーバーレス・非同期・バッチ変換の4つから、アクセスの頻度と入力の大きさで選ぶ。
  • 用意されたモデルを API で使うなら Bedrock、自分で学習・運用するなら SageMaker AI。

AWS 全体の主なサービスと始め方は、関連記事「AWSとは|初心者向けに主要サービス・料金・始め方を解説」で扱っています。

参考・出典

確認日はいずれも 2026年10月23日です。

  • AWS「Amazon SageMaker AI とは」:https://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/whatis.html
  • AWS「Amazon SageMaker」:https://aws.amazon.com/jp/sagemaker/
  • AWS「Amazon SageMaker AI の料金」:https://aws.amazon.com/jp/sagemaker/ai/pricing/
  • AWS「AWS 無料利用枠」:https://aws.amazon.com/free/
  • AWS「Amazon Bedrock or Amazon SageMaker AI?」:https://docs.aws.amazon.com/decision-guides/latest/bedrock-or-sagemaker/bedrock-or-sagemaker.html
  • AWS「What is Amazon SageMaker Unified Studio?」:https://docs.aws.amazon.com/sagemaker-unified-studio/latest/userguide/what-is-sagemaker-unified-studio.html
  • AWS「Amazon SageMaker Studio」:https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated.html
  • AWS「Set up idle shutdown」:https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated-idle-shutdown-setup.html
  • AWS「Inference options」:https://docs.aws.amazon.com/sagemaker/latest/dg/deploy-model-options.html
  • AWS「How Amazon SageMaker AI Runs Your Training Image」:https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms-training-algo-dockerfile.html
  • AWS「How Amazon SageMaker AI Provides Training Information」:https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms-training-algo-running-container.html
  • AWS「Managed Spot Training」:https://docs.aws.amazon.com/sagemaker/latest/dg/model-managed-spot-training.html
  • AWS「SageMaker JumpStart pretrained models」:https://docs.aws.amazon.com/sagemaker/latest/dg/studio-jumpstart.html
  • AWS「Built-in algorithms and pretrained models」:https://docs.aws.amazon.com/sagemaker/latest/dg/algos.html
  • AWS「Train a model」:https://docs.aws.amazon.com/sagemaker/latest/dg/how-it-works-training.html
  • AWS「Quick setup」:https://docs.aws.amazon.com/sagemaker/latest/dg/onboard-quick-start.html
  • AWS「Amazon SageMaker Canvas」:https://docs.aws.amazon.com/sagemaker/latest/dg/canvas.html
  • AWS「Amazon SageMaker Studio Lab」:https://docs.aws.amazon.com/sagemaker/latest/dg/studio-lab.html
  • AWS API Reference「CreateTrainingJob」:https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html
  • AWS API Reference「StoppingCondition」:https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_StoppingCondition.html
  • AWS API Reference「InvokeEndpoint」:https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_runtime_InvokeEndpoint.html
  • AWS re:Post「SageMaker の ResourceLimitExceeded エラー」:https://repost.aws/knowledge-center/sagemaker-resource-limit-exceeded-error
  • AWS What's New「Amazon SageMaker supports notebooks and data agent for IdC domains」:https://aws.amazon.com/about-aws/whats-new/2026/04/amazon-sagemaker-idc/
  • AWS What's New「Amazon SageMaker Unified Studio now supports multiple code spaces within projects for IAM domains」:https://aws.amazon.com/about-aws/whats-new/2026/04/sagemaker-code-spaces/
  • SageMaker Python SDK「Overview(V3)」:https://sagemaker.readthedocs.io/en/stable/overview.html
  • SageMaker Python SDK「Model Training」:https://sagemaker.readthedocs.io/en/stable/training/index.html
  • SageMaker Python SDK「Inference」:https://sagemaker.readthedocs.io/en/stable/inference/index.html
  • SageMaker Python SDK「ML Operations」:https://sagemaker.readthedocs.io/en/stable/ml_ops/index.html
  • PyPI「sagemaker」:https://pypi.org/project/sagemaker/
  • moto(AWS のモックライブラリ):https://docs.getmoto.org/

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「SageMakerとは|できること・料金・SDKの使い方とBedrockとの違い」

株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。

WE ARE HIRING

RJCで一緒に開発しながら、
成長を楽しみませんか?

RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!

  • 127日年間休日
  • 12時間平均残業時間
  • 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!

ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。

ABOUT RJC RJCがどんな会社か知る 考え方、研修、働き方、福利厚生、社員の前職まで。RJCのことが丸わかり! RJC丸わかりページへ JOB DESCRIPTION 仕事内容・待遇を見てみる 仕事内容、給与・待遇、選考の流れ。経験者も未経験も!応募前に知りたいこと、まとめました! 募集要項を見る ENTRY エントリーする エントリーは1〜2分・履歴書不要です。まずは話を聞いてみたい、という方でも歓迎です! エントリーフォームへ

RJCで一緒に開発しながら、 成長を楽しみませんか?