目次

AWS Certified Machine Learning Engineer - Associate (MLA-C01)

完全学習ガイド


試験概要

項目 詳細
試験コード MLA-C01
正式名称 AWS Certified Machine Learning Engineer - Associate
レベル Associate
難易度 ★★★☆☆
試験時間 170分
問題数 85問(65問採点対象 + 20問採点外)
合格スコア 720/1000
受験料 $150 USD
有効期限 3年
前提推奨 MLの実務経験1年以上 + AWS基礎知識

対象者

  • MLモデルの構築・運用に携わるMLエンジニア・データサイエンティスト
  • SageMakerを使ったMLパイプライン構築を担当するエンジニア
  • MLOpsの実装・自動化を担当するDevOpsエンジニア

MLS-C01(廃止)との違い

観点 MLS-C01(廃止済み) MLA-C01
焦点 MLアルゴリズム・理論 MLエンジニアリング・デプロイ・運用
レベル Specialty Associate
受験料 `300 `150
生成AI範囲 ほぼなし Bedrockや基盤モデルを含む

ドメイン別出題割合

ドメイン 出題割合
Domain 1: 機械学習向けデータ準備 28%
Domain 2: MLモデル開発 26%
Domain 3: MLワークフローのデプロイとオーケストレーション 22%
Domain 4: MLソリューションの監視・保守・セキュリティ 24%
┌──────────────────────────────────────────────────────────────────────┐
│  Domain 1: データ準備                   28%  ██████████████          │
│  Domain 2: MLモデル開発                 26%  █████████████           │
│  Domain 3: デプロイ・オーケストレーション 22%  ███████████             │
│  Domain 4: 監視・保守・セキュリティ      24%  ████████████            │
└──────────────────────────────────────────────────────────────────────┘

Domain 1: 機械学習向けデータ準備(28%)

1.1 データ収集・取り込み

AWSデータソースとパターン

サービス 用途
Amazon S3 MLの標準ストレージ・データレイク
Amazon RDS / Aurora 構造化トランザクションデータ
Amazon DynamoDB NoSQLリアルタイムデータ
Amazon Kinesis Data Streams ストリーミング・リアルタイムML
Amazon Redshift バッチML学習向けDWH
AWS Glue ETL・データカタログ
AWS Lake Formation データレイクのアクセス管理
  • バッチ取り込み:
  • S3 → AWS Glue ETL → S3 (Parquet) → SageMaker Training
  • ストリーミング取り込み:
  • IoT/App → Kinesis Streams → Lambda → S3 / Feature Store

1.2 データ変換・前処理

SageMaker Processing Job

from sagemaker.processing import ScriptProcessor, ProcessingInput, ProcessingOutput

processor = ScriptProcessor(
    image_uri='683313688378.dkr.ecr.us-east-1.amazonaws.com/sagemaker-scikit-learn:1.2-1-cpu-py3',
    command=['python3'],
    instance_type='ml.m5.xlarge',
    instance_count=1,
    role=role
)

processor.run(
    code='preprocessing.py',
    inputs=[ProcessingInput(source='s3://bucket/raw/', destination='/opt/ml/processing/input')],
    outputs=[ProcessingOutput(output_name='train', source='/opt/ml/processing/output/train',
                               destination='s3://bucket/processed/train/')]
)

データ変換ツール比較

ツール 特徴 ユースケース
AWS Glue DataBrew ノーコードGUI データアナリスト向け前処理
SageMaker Processing Pythonスクリプト カスタム前処理ロジック
AWS Glue ETL Spark/Python 大規模バッチ変換
EMR フルマネージドSpark ペタバイト規模

1.3 SageMaker Feature Store

from sagemaker.feature_store.feature_group import FeatureGroup

feature_group = FeatureGroup(name='customer-features', sagemaker_session=sess)

feature_group.create(
    s3_uri='s3://bucket/feature-store/',
    record_identifier_name='customer_id',
    event_time_feature_name='event_time',
    role_arn=role,
    enable_online_store=True   # Online(低レイテンシ)+ Offline(S3)
)
ストア レイテンシ 用途
Online Store <10ms リアルタイム推論の特徴量取得
Offline Store (S3) 分〜時間 バッチ学習データ生成

1.4 データ品質とバリデーション

# SageMaker Data Wrangler でデータ品質分析
# または SageMaker Clarify でデータバイアス検出
from sagemaker import clarify

data_bias_config = clarify.DataConfig(
    s3_data_input_path='s3://bucket/data/',
    s3_output_path='s3://bucket/bias-report/',
    label='target',
    dataset_type='text/csv'
)

Domain 2: MLモデル開発(26%)

2.1 SageMaker ビルトインアルゴリズム

問題タイプ アルゴリズム 特徴
2値・多値分類/回帰 XGBoost 高性能・解釈可能、最頻出
大規模線形モデル Linear Learner 高速・L1/L2正則化自動
時系列予測 DeepAR 多変量・確率的予測
異常検知 Random Cut Forest 非教師あり・ストリーミング対応
テキスト分類/Word2Vec BlazingText 高速テキスト処理
推薦 Factorization Machines スパース行列対応
画像分類 Image Classification CNN転移学習
物体検出 Object Detection SSD/YOLOベース
近傍探索 KNN 分類・回帰

2.2 カスタムモデル(Script Mode)

from sagemaker.pytorch import PyTorch

estimator = PyTorch(
    entry_point='train.py',
    source_dir='./src',
    role=role,
    instance_count=1,
    instance_type='ml.p3.2xlarge',
    framework_version='2.1',
    py_version='py310',
    hyperparameters={'epochs': 50, 'lr': 0.001}
)

estimator.fit({'train': 's3://bucket/train/', 'val': 's3://bucket/val/'})

2.3 ハイパーパラメータ最適化(HPO)

from sagemaker.tuner import HyperparameterTuner, IntegerParameter, ContinuousParameter

tuner = HyperparameterTuner(
    estimator=xgb_estimator,
    objective_metric_name='validation:auc',
    objective_type='Maximize',
    hyperparameter_ranges={
        'max_depth': IntegerParameter(3, 10),
        'eta': ContinuousParameter(0.01, 0.3),
        'subsample': ContinuousParameter(0.5, 1.0),
    },
    max_jobs=20,
    max_parallel_jobs=4,
    strategy='Bayesian'
)
戦略 適用ケース
Bayesian 試行回数制限あり・効率最優先
Random 広い探索空間・並列実行
Hyperband 深層学習・早期打ち切り
Grid パラメータ少・全網羅

2.4 生成AI / 基盤モデルの活用

import boto3, json

bedrock_runtime = boto3.client('bedrock-runtime')

# SageMaker JumpStart: OSSモデルのFine-tuning
from sagemaker.jumpstart.estimator import JumpStartEstimator

estimator = JumpStartEstimator(
    model_id='meta-textgeneration-llama-3-8b',
    hyperparameters={'epochs': 3, 'per_device_train_batch_size': 4},
    instance_type='ml.g5.12xlarge'
)
estimator.fit({'training': 's3://bucket/fine-tune-data/'})

2.5 モデル評価指標

問題 指標 注意
2値分類(均衡) Accuracy, ROC-AUC, F1 均衡データ前提
2値分類(不均衡) PR-AUC, F1, Recall/Precision Accuracyは不適
回帰 RMSE, MAE, R², MAPE -
ランキング NDCG, MRR 推薦・検索

Domain 3: MLワークフローのデプロイとオーケストレーション(22%)

3.1 SageMaker エンドポイント種類

タイプ 特徴 ユースケース
Real-time Endpoint 低レイテンシ・常時稼働 同期リアルタイム推論
Serverless Endpoint アイドル時無課金・コールドスタートあり 低頻度・断続的トラフィック
Async Endpoint 非同期・大ペイロード対応(〜1GB) 長時間処理・大規模入力
Batch Transform S3→S3 バッチ推論 一括スコアリング
# Serverless Endpoint
from sagemaker.serverless import ServerlessInferenceConfig

predictor = model.deploy(
    serverless_inference_config=ServerlessInferenceConfig(
        memory_size_in_mb=2048,
        max_concurrency=20
    )
)

# A/B テスト(Production Variants)
sm_client.create_endpoint_config(
    EndpointConfigName='ab-test',
    ProductionVariants=[
        {'VariantName': 'v1', 'ModelName': 'model-v1', 'InitialVariantWeight': 80, ...},
        {'VariantName': 'v2', 'ModelName': 'model-v2', 'InitialVariantWeight': 20, ...}
    ]
)

3.2 SageMaker Pipelines(MLOps)

from sagemaker.workflow.pipeline import Pipeline
from sagemaker.workflow.steps import ProcessingStep, TrainingStep
from sagemaker.workflow.conditions import ConditionGreaterThanOrEqualTo
from sagemaker.workflow.condition_step import ConditionStep

# パイプライン: 前処理 → 学習 → 評価 → 条件分岐 → モデル登録
pipeline = Pipeline(
    name='MLTrainingPipeline',
    steps=[step_process, step_train, step_evaluate, step_cond]
)
pipeline.upsert(role_arn=role)
pipeline.start()
EventBridge (スケジュール)
    ↓
SageMaker Pipelines
    ├── Processing Job(前処理)
    ├── Training Job(学習)
    ├── Evaluation Job(評価)
    └── Condition: メトリクス閾値超え?
         ├── YES → Model Registry登録 → 承認 → Endpoint更新
         └── NO  → SNS通知(アラート)

3.3 SageMaker Model Registry

model_package = model.register(
    model_package_group_name='my-model-group',
    approval_status='PendingManualApproval',
    inference_instances=['ml.m5.xlarge'],
    model_metrics=model_metrics
)

# 承認後、自動デプロイ(EventBridge + Lambda or CodePipeline連携)
sm_client.update_model_package(
    ModelPackageArn=model_package.model_package_arn,
    ModelApprovalStatus='Approved'
)

3.4 コンテナ・インフラ選択

インスタンス 特徴
ml.p3.* / ml.p4d.* GPU学習(V100/A100)
ml.g5.* 推論・中規模学習(A10G GPU)
ml.inf1.* / ml.inf2.* AWS Inferentiaチップ・低コスト推論
ml.trn1.* AWS Trainiumチップ・低コスト学習
ml.c5.* CPU推論・前処理
# Spot Instanceで学習コスト最大90%削減
estimator = Estimator(
    use_spot_instances=True,
    max_run=3600,
    max_wait=7200,
    checkpoint_s3_uri='s3://bucket/checkpoints/'  # 中断再開に必須
)

Domain 4: MLソリューションの監視・保守・セキュリティ(24%)

4.1 SageMaker Model Monitor

from sagemaker.model_monitor import DefaultModelMonitor, DataCaptureConfig

# データキャプチャ設定
data_capture_config = DataCaptureConfig(
    enable_capture=True,
    sampling_percentage=100,
    destination_s3_uri='s3://bucket/captured-data/',
    capture_options=['Input', 'Output']
)

# ベースライン統計生成
monitor.suggest_baseline(
    baseline_dataset='s3://bucket/training-data/baseline.csv',
    dataset_format=DatasetFormat.csv(header=True),
    output_s3_uri='s3://bucket/baseline/'
)

# 監視スケジュール(1時間ごと)
monitor.create_monitoring_schedule(
    schedule_cron_expression=CronExpressionGenerator.hourly(),
    endpoint_input=predictor.endpoint_name,
    statistics='s3://bucket/baseline/statistics.json',
    constraints='s3://bucket/baseline/constraints.json',
)
モニタータイプ 検出内容
Data Quality 入力データの統計ドリフト(分布変化・欠損増加)
Model Quality 予測精度・AUCの低下
Model Bias (Clarify) 公平性・特定グループへのバイアス
Feature Attribution (Clarify) SHAP値の変化(重要特徴量のシフト)

4.2 MLOpsのCI/CD

コードPush(CodeCommit/GitHub)
    ↓
CI: CodePipeline / GitHub Actions
    ├── ユニットテスト
    ├── SageMaker Pipelinesトリガー
    └── モデル評価・品質チェック
         ↓
CD: 承認後 → Endpointデプロイ(Blue/Green or Canary)

4.3 セキュリティ

要件 AWSの実装
通信暗号化 VPCエンドポイント・TLS
データ暗号化 S3/EBS/EFS KMS暗号化
アクセス制御 IAMロール・最小権限原則
ネットワーク分離 SageMaker VPC Mode(インターネット遮断)
個人情報保護 Amazon Macie(S3上のPII自動検出)
監査 AWS CloudTrail
# SageMakerをVPC内で実行(インターネットアクセスなし)
estimator = Estimator(
    subnets=['subnet-xxxxxxxx'],
    security_group_ids=['sg-xxxxxxxx'],
    encrypt_inter_container_traffic=True
)

4.4 コスト最適化

手法 削減効果
Spot Instances(学習) 最大90%削減
Savings Plans 最大64%削減
Serverless Endpoint アイドル時無課金
Multi-Model Endpoint 複数モデルを1エンドポイントで共有
Inferentia/Graviton推論 Real-time比で最大70%削減
S3 Intelligent-Tiering データストレージ自動最適化

試験頻出アーキテクチャパターン

パターン1: リアルタイムML推論

  • User → API Gateway → Lambda → SageMaker Real-time Endpoint
  • Feature Store (Online) ← 特徴量リアルタイム取得

パターン2: バッチMLパイプライン

S3 (生データ)
    ↓ EventBridge (日次)
SageMaker Pipelines
    ├── Processing(前処理)
    ├── Training(学習)
    ├── Evaluation(AUC>閾値?)
    └── Model Registry → SNS承認通知 → デプロイ

パターン3: データドリフト検知・自動再学習

Endpoint → Data Capture → S3
                              ↓
                    Model Monitor(Data Quality)
                              ↓ 違反検知
                    EventBridge → Lambda → SageMaker Pipelines(再学習)

試験重要数値チートシート

項目
合格スコア 720/1000
試験時間 170分
Processing Job 最大実行時間 24時間
Training Job 最大実行時間 5日
Spot Instance 最大コスト削減 90%
Model Monitor 最小実行間隔 1時間
Feature Store Online レイテンシ <10ms
Async Endpoint 最大ペイロード 1GB
Serverless Endpoint 最大メモリ 6GB
Multi-Model Endpoint モデル数 制限なし(ディスク容量次第)

頻出問題パターン

Q1: エンドポイント選択

問題: 1日数回しかリクエストが来ないMLモデルのコスト最適化。

解答: Serverless Inference Endpoint。アイドル時課金なし。コールドスタート許容が前提。

Q2: HPO戦略

問題: 試行回数が20回に制限されている場合の最適なHPO戦略は?

解答: Bayesian最適化。過去の試行から学習して次の試行点を決定するため、少ない試行回数で効率的に最適解に近づける。

Q3: データドリフト

問題: 本番モデルの精度が徐々に低下している。入力データの統計的変化を自動検出・アラートするサービスは?

解答: SageMaker Model Monitor(Data Quality Monitor)。学習時のベースライン統計との差分を定期的に計算してアラートを発行。

Q4: 分散学習

問題: 100億パラメータのTransformerモデルが1GPUに収まらない場合の対処法は?

解答: **SageMaker Model Parallel Library(SMP)**でモデルを複数GPUに分割。Data Parallelはモデルが1GPUに収まる前提。

Q5: セキュリティ

問題: 医療データを使ったMLモデル学習で、インターネットに出ない閉域網環境でSageMakerを実行するには?

解答: SageMaker VPC Modesubnets + security_group_idsを指定)+ VPCエンドポイント(S3/SageMaker API用)。


8週間学習プラン

Week 1-2: データ準備

  • [ ] SageMaker Processing Job ハンズオン
  • [ ] AWS Glue ETL・DataBrew 実践
  • [ ] SageMaker Feature Store 構築
  • [ ] データ品質・バイアス検出(Clarify)

Week 3-4: モデル開発

  • [ ] XGBoost・Linear Learner 学習実践
  • [ ] PyTorch Script Mode ハンズオン
  • [ ] HPO(Bayesian/Hyperband)実践
  • [ ] SageMaker JumpStart Fine-tuning

Week 5-6: デプロイ・オーケストレーション

  • [ ] 各Endpointタイプのデプロイ実践
  • [ ] SageMaker Pipelines フルパイプライン構築
  • [ ] Model Registry・承認フロー
  • [ ] CodePipeline連携CI/CD

Week 7-8: 監視・セキュリティ + 試験対策

  • [ ] Model Monitor 全4種類のセットアップ
  • [ ] VPC Mode・IAM最小権限
  • [ ] AWS公式模擬試験
  • [ ] 苦手ドメイン集中復習

MLA-C01 追加詳解セクション

Amazon SageMaker 完全詳解

SageMaker の全体像

SageMaker の主要コンポーネント:

データ準備:
  → SageMaker Data Wrangler(GUIデータ前処理)
  → SageMaker Feature Store(特徴量管理)
  → SageMaker Ground Truth(ラベリング)

モデル開発:
  → SageMaker Studio(統合開発環境)
  → SageMaker Notebooks(Jupyter環境)
  → SageMaker JumpStart(事前構築モデル・Fine-tuning)

モデル訓練:
  → SageMaker Training Jobs(スケーラブル訓練)
  → SageMaker Autopilot(AutoML)
  → SageMaker Automatic Model Tuning(HPO)
  → SageMaker Experiments(実験管理)

モデルデプロイ:
  → SageMaker Endpoints(リアルタイム推論)
  → SageMaker Serverless Inference(サーバーレス推論)
  → SageMaker Batch Transform(バッチ推論)
  → SageMaker Async Inference(非同期推論)

ML運用(MLOps):
  → SageMaker Model Registry(モデルバージョン管理)
  → SageMaker Pipelines(MLパイプライン自動化)
  → SageMaker Model Monitor(ドリフト検出)
  → SageMaker Clarify(バイアス・説明可能性)

SageMaker 推論エンドポイント詳細

推論タイプの比較(試験最頻出

推論タイプ 特徴 コスト 用途
リアルタイム推論 常時稼働・低レイテンシ 常時課金 チャットボット・API推論
サーバーレス推論 オートスケール・コールドスタートあり 呼び出し時のみ課金 散発的なトラフィック
非同期推論 キューで非同期処理・大きなペイロード対応 処理時間課金 大きな入力・長時間処理
バッチ変換 バッチデータを一括処理 処理時間課金 大量データの定期処理
選択基準:
  「チャットボット・リアルタイムAPI」       → リアルタイム推論
  「ほとんど呼び出されない・コスト最小化」  → サーバーレス推論
  「10MBを超える大きなファイルの処理」     → 非同期推論
  「100万件のデータを夜間に一括推論」      → バッチ変換

SageMaker Training Jobs 詳細

インスタンスタイプ選択:
  CPU インスタンス(ml.m5, ml.c5等):
    → 軽量モデル・前処理・推論
    → コスト低い

  GPU インスタンス(ml.p3, ml.p4d, ml.g5等):
    → 深層学習・大規模モデル訓練
    → ml.p3.2xlarge: V100 1基
    → ml.p4d.24xlarge: A100 8基

  分散訓練(Distributed Training):
    → 複数インスタンス・複数GPUで並列学習
    → データ並列性(Data Parallelism): バッチを複数に分割
    → モデル並列性(Model Parallelism): モデルを分割(大型モデル)
    → SageMaker Distributed Training Library使用

スポットインスタンスを使った訓練コスト削減:
  → Managed Spot Training を有効化
  → チェックポイント(S3に定期保存)で中断からの再開
  → コスト最大90%削減

SageMaker MLOps

SageMaker Pipelines

概念:
  → MLワークフローをDAG(有向非循環グラフ)として定義
  → 各ステップ: データ前処理→訓練→評価→条件分岐→デプロイ

主要ステップタイプ:
  ProcessingStep: データ前処理(SageMaker Processing Job)
  TrainingStep: モデル訓練(Training Job)
  EvaluationStep: モデル評価
  ConditionStep: 精度が閾値以上かどうかで分岐
  RegisterModel: Model Registryに登録
  LambdaStep: Lambda関数の実行

パイプライン自動化:
  → EventBridgeでS3への新データ到着時に自動実行
  → 定期スケジュール実行

SageMaker Model Monitor 詳細

監視タイプ:
  データ品質監視(Data Quality Monitoring):
    → 入力データの統計的性質を本番でモニター
    → 訓練データとの分布比較(データドリフト検出)

  モデル品質監視(Model Quality Monitoring):
    → 予測精度の継続的測定
    → グラウンドトゥルース(実際のラベル)と予測の比較

  バイアス監視(Bias Drift Monitoring):
    → 本番データのバイアス変化を検出

  特徴量重要度監視(Feature Attribution Drift):
    → SHAP値の分布変化を検出

アラームとアクション:
  → CloudWatch Alarms でドリフト検出時に通知
  → SNS → Lambdaで自動再学習パイプラインをトリガー

SageMaker Clarify 詳細

バイアス検出メトリクス:
  訓練前バイアス:
    → Class Imbalance(CI): クラス不均衡
    → Difference in Proportions of Labels(DPL): グループ間のラベル比率の差

  訓練後バイアス:
    → Disparate Impact(DI): グループ間の予測率の比
    → Accuracy Difference(AD): グループ間の精度差

説明可能性(Explainability):
  → SHAP(SHapley Additive exPlanations)値で特徴量重要度を計算
  → グローバル説明: モデル全体での特徴量重要度
  → ローカル説明: 個別の予測に対する特徴量の寄与度

SageMaker JumpStart

JumpStartで利用できるもの:
  1. 事前訓練済みモデル(500以上)
     → テキスト生成・画像分類・物体検出等
     → デプロイだけでなくFine-tuningも可能
  
  2. ML ソリューションテンプレート
     → コンプリートなパイプライン(データ収集からデプロイまで)
  
  3. サンプルノートブック
     → ユースケース別のJupyterノートブック

Bedrock vs SageMaker JumpStart の使い分け:
  Bedrock: サーバーレス・APIアクセスのみ・コード最小
  SageMaker JumpStart: Fine-tuning可能・カスタムデータで訓練

MLA-C01 模擬問題(本番形式)


問題 MLA-01

SageMakerで「ほとんど呼び出されないがコールドスタートを許容できる推論エンドポイント」を最小コストで運用したい。最も適切な推論タイプはどれですか?

  • A. リアルタイム推論エンドポイント
  • B. SageMaker Serverless Inference
  • C. SageMaker Batch Transform
  • D. SageMaker Async Inference
正解と解説

正解: B

サーバーレス推論は呼び出し時のみ課金され、ゼロスケール(未使用時はコストゼロ)が可能。コールドスタートの遅延が許容できる場合に最もコスト効率が良い。


問題 MLA-02

SageMaker Training Jobでコスト削減のため「Managed Spot Training」を有効にした。訓練が中断された場合でも最初からやり直さないために必要な設定はどれですか?

  • A. データ並列訓練を有効にする
  • B. S3にチェックポイントを定期的に保存するよう設定する
  • C. Provisioned Capacityを使用する
  • D. Reserved Instanceを購入する
正解と解説

正解: B

スポットインスタンスは中断されることがある。チェックポイント(訓練の途中状態)をS3に定期保存することで、再開時に最初からやり直すのではなく途中から継続できる。


問題 MLA-03

本番SageMakerエンドポイントの「入力データの統計的性質が時間とともに変化していないか」を自動的にモニタリングするサービスはどれですか?

  • A. SageMaker Clarify
  • B. SageMaker Model Monitor(Data Quality Monitoring)
  • C. SageMaker Experiments
  • D. SageMaker Debugger
正解と解説

正解: B

SageMaker Model MonitorのData Quality Monitoringは本番エンドポイントへの入力データの統計的分布(平均・標準偏差・欠損値率等)を継続的に監視し、訓練データからの逸脱(データドリフト)を検出する。


問題 MLA-04

SageMaker Pipelinesで「モデルの評価精度が80%以上の場合のみモデルをModel Registryに登録し、それ以下の場合は通知のみ送信したい」という条件分岐を実装するには何を使いますか?

  • A. TrainingStep
  • B. ProcessingStep
  • C. ConditionStep
  • D. LambdaStep
正解と解説

正解: C

ConditionStepは条件(評価メトリクスの閾値等)に基づいてパイプラインを分岐させる。精度>=80%の場合はRegisterModelに進み、そうでない場合はLambdaStepで通知する分岐を実装できる。


問題 MLA-05

SageMaker Model Registryでモデルを管理する際、本番デプロイの前に人間の承認を必要とする「ガバナンスプロセス」を実装する方法はどれですか?

  • A. モデルを自動的に全ての環境にデプロイする
  • B. モデルをPending状態で登録し、レビュー後にApprovedに変更してからデプロイする
  • C. モデルをS3に直接保存して承認フォームを添付する
  • D. SageMaker ExperimentsでA/Bテストを実施してから承認する
正解と解説

正解: B

SageMaker Model Registryはモデルバージョンの承認ステータス(PendingManualApproval → Approved/Rejected)を管理できる。CI/CDパイプラインは Approvedのモデルのみを本番デプロイするよう設定できる。


問題 MLA-06

「100万件の顧客データを夜間に一括してMLモデルで推論し、結果をS3に保存したい」最も適切なSageMaker推論タイプはどれですか?

  • A. リアルタイム推論エンドポイント
  • B. サーバーレス推論
  • C. バッチ変換(Batch Transform)
  • D. 非同期推論
正解と解説

正解: C

バッチ変換はS3の入力データを一括処理して結果をS3に出力する。エンドポイントを常時稼働させずにバッチ処理後は自動的にリソースを解放する。大量データの定期処理に最適。


問題 MLA-07

SageMaker Clarifyが計算するSHAP値の説明として正しいものはどれですか?

  • A. モデルの訓練速度を示す指標
  • B. 各特徴量が特定の予測にどれだけ貢献したかを示す値
  • C. モデルのハイパーパラメータの最適値
  • D. データドリフトの程度を示す統計量
正解と解説

正解: B

SHAP(SHapley Additive exPlanations)値は各特徴量が個別の予測に対してどれだけ貢献したかを定量化する。正の値はその特徴量が予測を高める方向に働き、負の値は低める方向に働いていることを示す。


問題 MLA-08

SageMaker Automatic Model Tuning(HPO)が使用する最適化アルゴリズムとして、デフォルトで使用されるものはどれですか?

  • A. グリッドサーチ(Grid Search)
  • B. ランダムサーチ(Random Search)
  • C. ベイズ最適化(Bayesian Optimization)
  • D. 遺伝的アルゴリズム(Genetic Algorithm)
正解と解説

正解: C

SageMaker HPOのデフォルトはベイズ最適化。過去の試行結果を学習して次の試行点を賢く選択するため、グリッドサーチ・ランダムサーチより少ない試行数で最適なハイパーパラメータを発見できる。


MLA-C01 試験直前チェックリスト

  • [ ] SageMakerの全コンポーネントとその役割
  • [ ] 4つの推論タイプの使い分け(リアルタイム/サーバーレス/非同期/バッチ)
  • [ ] SageMaker Pipelinesの各ステップタイプ
  • [ ] SageMaker Model Monitorの4つの監視タイプ
  • [ ] SageMaker ClarifyのSHAP値とバイアス検出メトリクス
  • [ ] Managed Spot Training とチェックポイントの関係
  • [ ] SageMaker JumpStart vs Bedrock の使い分け

付録: MLA-C01 頻出サービス一覧

サービス MLA試験での重点
Amazon SageMaker Training 訓練ジョブ・分散訓練・スポット訓練
SageMaker Endpoints 4種類の推論タイプ
SageMaker Pipelines MLワークフロー自動化・ConditionStep
SageMaker Model Registry バージョン管理・承認ワークフロー
SageMaker Model Monitor データドリフト・モデル品質・バイアス監視
SageMaker Clarify SHAP値・バイアス検出・説明可能性
SageMaker Feature Store 特徴量の一元管理・オンライン/オフラインストア
SageMaker HPO ベイズ最適化・ハイパーパラメータ調整
SageMaker JumpStart 事前訓練済みモデル・Fine-tuning
SageMaker Autopilot AutoML・自動モデル選択
SageMaker Ground Truth データラベリング・クラウドソーシング
Amazon Bedrock 生成AI・基盤モデルAPI
Amazon S3 データレイク・モデルアーティファクト
AWS Glue ETL・特徴量前処理

SageMaker 詳細技術リファレンス

SageMaker Training 詳細

学習ジョブの構成:

import sagemaker
from sagemaker.estimator import Estimator

estimator = Estimator(
    image_uri='123456789.dkr.ecr.region.amazonaws.com/my-training:latest',
    role=role,
    instance_count=1,
    instance_type='ml.p3.2xlarge',
    
    # ハイパーパラメータ
    hyperparameters={
        'learning_rate': 0.001,
        'epochs': 100,
        'batch_size': 32
    },
    
    # スポット学習(コスト削減)
    use_spot_instances=True,
    max_wait=7200,
    checkpoint_s3_uri='s3://bucket/checkpoints',
    
    # メトリクス定義(CloudWatch で可視化)
    metric_definitions=[
        {'Name': 'train:loss', 'Regex': 'train_loss: ([0-9\.]+)'},
        {'Name': 'val:accuracy', 'Regex': 'val_accuracy: ([0-9\.]+)'}
    ],
    
    # 環境変数
    environment={
        'PYTHONDONTWRITEBYTECODE': '1'
    },
    
    # 出力設定
    output_path='s3://bucket/output',
    base_job_name='my-training'
)

データ入力チャンネル:

from sagemaker.inputs import TrainingInput

# File モード
train_input = TrainingInput(
    s3_data='s3://bucket/train',
    content_type='application/x-recordio',
    s3_data_type='S3Prefix'
)

# Pipe モード(大規模データ用)
train_input_pipe = TrainingInput(
    s3_data='s3://bucket/train',
    input_mode='Pipe',  # ストリーミング読み込み
    content_type='application/x-recordio-protobuf'
)

estimator.fit({
    'train': train_input,
    'validation': val_input
})

SageMaker Model Registry 詳細

from sagemaker.model import Model
from sagemaker.workflow.model_step import ModelStep

# モデルパッケージグループの作成
sagemaker_client.create_model_package_group(
    ModelPackageGroupName='my-model-group',
    ModelPackageGroupDescription='Production models'
)

# モデルを Model Registry に登録
model_package = sagemaker_client.create_model_package(
    ModelPackageGroupName='my-model-group',
    ModelPackageDescription='XGBoost v1.5',
    InferenceSpecification={
        'Containers': [{
            'Image': container_uri,
            'ModelDataUrl': 's3://bucket/model.tar.gz'
        }],
        'SupportedContentTypes': ['text/csv'],
        'SupportedResponseMIMETypes': ['text/csv']
    },
    ModelApprovalStatus='PendingManualApproval',
    
    # モデルメトリクス(評価結果)
    ModelMetrics={
        'ModelQuality': {
            'Statistics': {
                'ContentType': 'application/json',
                'S3Uri': 's3://bucket/metrics/statistics.json'
            }
        }
    }
)

# 承認(本番デプロイOK)
sagemaker_client.update_model_package(
    ModelPackageName=model_package_arn,
    ModelApprovalStatus='Approved'
)

MLOps 高度なパターン

A/Bテストとシャドウテスト

from sagemaker.endpoint import Endpoint

# A/B テスト: 複数バージョンにトラフィック分割
endpoint_config = sagemaker_client.create_endpoint_config(
    EndpointConfigName='ab-test-config',
    ProductionVariants=[
        {
            'VariantName': 'ModelA',
            'ModelName': 'model-v1',
            'InitialInstanceCount': 1,
            'InstanceType': 'ml.m5.large',
            'InitialVariantWeight': 90  # 90% のトラフィック
        },
        {
            'VariantName': 'ModelB',
            'ModelName': 'model-v2',
            'InitialInstanceCount': 1,
            'InstanceType': 'ml.m5.large',
            'InitialVariantWeight': 10  # 10% のトラフィック
        }
    ]
)

# シャドウテスト: 本番と並行してシャドウモデルで評価
shadow_config = sagemaker_client.create_endpoint_config(
    EndpointConfigName='shadow-test-config',
    ProductionVariants=[{
        'VariantName': 'Production',
        'ModelName': 'model-v1',
        'InitialVariantWeight': 1
    }],
    ShadowProductionVariants=[{
        'VariantName': 'Shadow',
        'ModelName': 'model-v2',
        'SamplingPercentage': 50  # 50% のリクエストをシャドウに転送
    }]
)

Blue/Green デプロイ

# Step 1: グリーン(新しい)エンドポイントを作成
# Step 2: 小量のトラフィックをグリーンに移す
sagemaker_client.update_endpoint_weights_and_capacities(
    EndpointName='my-endpoint',
    DesiredWeightsAndCapacities=[
        {'VariantName': 'Blue', 'DesiredWeight': 90},
        {'VariantName': 'Green', 'DesiredWeight': 10}
    ]
)

# Step 3: メトリクスを確認
# Step 4: トラフィックを 100% グリーンに
sagemaker_client.update_endpoint_weights_and_capacities(
    EndpointName='my-endpoint',
    DesiredWeightsAndCapacities=[
        {'VariantName': 'Blue', 'DesiredWeight': 0},
        {'VariantName': 'Green', 'DesiredWeight': 1}
    ]
)

SageMaker の高度な機能

SageMaker Ground Truth 詳細

Ground Truth のラベリングフォー:
  Built-in Task Types:
    Image Classification(画像分類)
    Bounding Box(物体検出)
    Semantic Segmentation(セマンティックセグメンテーション)
    Text Classification(テキスト分類)
    Named Entity Recognition(固有表現認識)
    
  ワークフォース:
    Amazon Mechanical Turk(クラウドワーカー)
    プライベートチーム(自社の注釈者)
    AWS Marketplace(専門ベンダー)

自動ラベリング(Auto-labeling):
  ML モデルで信頼度が高いサンプルを自動ラベリング
  信頼度が低いサンプルのみ人間がレビュー
  コストを最大70%削減
  
Ground Truth Plus:
  フルマネージドのラベリングサービス(AWS が管理)
  コスト見積もりなし(従量制)
  品質管理をAWSが担当

SageMaker Debugger 詳細

from sagemaker.debugger import Rule, DebuggerHookConfig, TensorBoardOutputConfig
from sagemaker.debugger import rule_configs

# デバッガーの設定
rules = [
    Rule.sagemaker(rule_configs.vanishing_gradient()),
    Rule.sagemaker(rule_configs.exploding_tensor()),
    Rule.sagemaker(rule_configs.overfit()),
    Rule.sagemaker(rule_configs.loss_not_decreasing()),
    
    # カスタムルール
    Rule.sagemaker(
        base_config=rule_configs.vanishing_gradient(),
        name='custom_grad_check',
        rule_parameters={'threshold': '0.0001'}
    )
]

hook_config = DebuggerHookConfig(
    s3_output_path='s3://bucket/debug',
    hook_parameters={'save_interval': '100'}  # 100ステップごとに保存
)

tensorboard_output_config = TensorBoardOutputConfig(
    s3_output_path='s3://bucket/tensorboard'
)

estimator = TensorFlow(
    ...,
    debugger_hook_config=hook_config,
    rules=rules,
    tensorboard_output_config=tensorboard_output_config
)

SageMaker Inference 詳細

推論の種類と比較

リアルタイムエンドポイント(Real-time Inference):
  用途: 低レイテンシ(< 1 秒)が必要
  スケール: Auto Scaling で自動スケール
  コスト: インスタンス稼働時間で課金
  
  設定例:
    Application Auto Scaling でターゲット追跡スケーリング
    CloudWatch メトリクス(InvocationsPerInstance)で制御

サーバーレス推論(Serverless Inference):
  用途: 断続的なトラフィック
  コールドスタート: 数秒
  コスト: 呼び出し回数 + 処理時間(アイドル時は0)
  制約: GPU なし、最大6GB RAM

非同期推論(Asynchronous Inference):
  用途: 大きなペイロード(> 6 MB)、処理時間が長い(> 60秒)
  動作: リクエストをキューに入れて非同期処理、結果をS3に保存
  通知: SNS でリクエスト完了を通知
  コスト: エンドポイント稼働 + 非同期設定(Scale to Zero 対応)

バッチ変換(Batch Transform):
  用途: 大量データの一括推論
  動作: S3 入力 → バッチ処理 → S3 出力
  コスト: 処理時間のみ(常時エンドポイント不要)

推論最適化

SageMaker Neo(コンパイル最適化):
  学習済みモデルをターゲットハードウェア向けに最適化
  対応フレームワーク: TensorFlow/PyTorch/MXNet/XGBoost/scikit-learn
  対応ターゲット: EC2(x86/ARM)/edge デバイス(Raspberry Pi/Jetson)
  効果: 最大2倍の速度向上、モデルサイズの削減

推論コンテナの最適化:
  TensorRT(NVIDIA GPU 用の推論最適化)
  ONNX(フレームワーク間の相互運用)
  INT8 量子化(精度を保ちつつモデルサイズ削減)

ML セキュリティとコンプライアンス

SageMaker VPC 設定

# SageMaker ジョブを VPC 内で実行
estimator = Estimator(
    ...,
    subnets=['subnet-xxxxx', 'subnet-yyyyy'],
    security_group_ids=['sg-zzzzz'],
    encrypt_inter_container_traffic=True  # コンテナ間通信を暗号化
)

# VPC 内で S3 アクセスには VPC Endpoint が必要
# com.amazonaws.region.s3 ゲートウェイエンドポイント

SageMaker のセキュリティ設定:

ネットワーク:
  VPC 内での実行(外部インターネットアクセスを遮断)
  インターコンテナ通信の暗号化
  
データ:
  EBS/S3 の KMS 暗号化
  Secrets Manager からの認証情報取得
  
アクセス制御:
  実行ロールによる最小権限
  リソースポリシーでのアクセス制限
  SageMaker Studio の VPC 設定
  
監査:
  CloudTrail での API コール記録
  CloudWatch Logs での学習ログ

模擬試験追加問題(35問)

問題 9

SageMaker でモデルが本番環境でデータドリフトを示しています。自動的にドリフトを検出して通知する仕組みを構築したい場合、最適なアーキテクチャはどれですか?

  • A. Lambda で毎時間本番データをサンプリングして手動比較する
  • B. SageMaker Model Monitor でデータ品質モニタリングを設定し、CloudWatch Alarm で通知する
  • C. CloudWatch Dashboard で手動にメトリクスを確認する
  • D. SageMaker Clarify でバイアス分析を定期実行する
正解と解説

正解: B

SageMaker Model Monitor のセットアップ:

from sagemaker.model_monitor import DataCaptureConfig, DefaultModelMonitor

# 1. データキャプチャを設定
data_capture_config = DataCaptureConfig(
    enable_capture=True,
    sampling_percentage=100,
    destination_s3_uri='s3://bucket/capture'
)

# 2. ベースライン統計量を作成
monitor = DefaultModelMonitor(role=role, ...)
monitor.suggest_baseline(
    baseline_dataset='s3://bucket/baseline/train.csv',
    dataset_format=DatasetFormat.csv(header=True)
)

# 3. 監視スケジュールを作成
monitor.create_monitoring_schedule(
    monitor_schedule_name='data-quality-monitor',
    endpoint_input=endpoint_name,
    statistics=baseline_statistics_uri,
    constraints=baseline_constraints_uri,
    schedule_cron_expression='cron(0 * ? * * *)'  # 毎時
)
# 違反時は CloudWatch Metrics → Alarm → SNS 通知

問題 10

SageMaker ハイパーパラメータチューニング(HPO)で「Bayesian 最適化」を選択する際の同時実行数(MaxParallelTrainingJobs)の設定についての推奨は?

  • A. 常に最大値に設定して最速で完了させる
  • B. 総ジョブ数の10%以下に設定(Bayesian の探索効率を確保しつつ並列化)
  • C. 並列実行は精度に影響しないため気にしなくて良い
  • D. 同時実行は1に設定する(Bayesian は逐次実行必須)
正解と解説

正解: B

Bayesian 最適化と並列実行のトレードオフ:

MaxParallelTrainingJobs = 1(逐次):
  最も効率的な探索(各試行の結果を次に活用)
  時間がかかる

MaxParallelTrainingJobs = 最大:
  速く完了するが探索効率が低下
  Random Search に近い動作になる

推奨: 総ジョブ数の10%以下
  例: MaxNumberOfTrainingJobs=100 なら MaxParallelTrainingJobs=10

並列実行中のジョブは他のジョブの結果を待たずに実行されるため、Bayesian の「過去の結果から学ぶ」効率が下がります。


問題 11

SageMaker Studio の「Experiment」機能でモデルの比較をする際、最も効果的な情報の記録方法はどれですか?

  • A. 結果を手動で Excel スプレッドシートに記録する
  • B. SageMaker Experiments SDK を使ってハイパーパラメータ、メトリクス、アーティファクトを自動的に記録する
  • C. CloudWatch ダッシュボードを手動で作成する
  • D. S3 に結果ファイルを保存する
正解と解説

正解: B

SageMaker Experiments の使用:

from sagemaker.experiments.run import Run

with Run(
    experiment_name='classification-experiment',
    run_name='xgboost-baseline',
    sagemaker_session=session
) as run:
    # ハイパーパラメータを記録
    run.log_parameters({
        'max_depth': 5,
        'eta': 0.1,
        'num_round': 100
    })
    
    # モデル学習
    estimator.fit(inputs)
    
    # メトリクスを記録
    run.log_metric('accuracy', 0.92)
    run.log_metric('auc', 0.95)
    
    # アーティファクトのパスを記録
    run.log_artifact('model', 's3://bucket/model.tar.gz')

Studio の Experiments UI で全実験を比較・可視化できます。


問題 12〜43(ショート形式)

問題 12: SageMaker の「マネージドスポット学習(Managed Spot Training)」で学習が中断されるのはどのような場合ですか? → 正解: AWS がスポットキャパシティを必要とした場合(EC2 スポットの仕組みと同じ)。中断前に2分間の通知。チェックポイントから自動再開(チェックポイントS3 URI設定が必要)。最大 90% のコスト削減

問題 13: SageMaker の「学習コンテナ」で必要なディレクトリ構造は? → 正解: /opt/ml/input/data/: 学習データ(チャンネル名がサブディレクトリ)。/opt/ml/model/: モデルアーティファクトの出力先。/opt/ml/output/: その他のアウトプット。/opt/ml/input/config/: ハイパーパラメータ(JSON)

問題 14: SageMaker Processing ジョブで Scikit-learn スクリプトを実行する際の実装は? → 正解: SKLearnProcessor を使用(from sagemaker.sklearn.processing import SKLearnProcessor)。framework_version でバージョン指定。run() メソッドで inputs(S3→コンテナ)と outputs(コンテナ→S3)を指定

問題 15: SageMaker の「マルチモデルエンドポイント(MME)」と「マルチコンテナエンドポイント(MCE)」の違いは? → 正解: MME: 同じフレームワークの多数モデルを1エンドポイントに(モデルはオンデマンドでロード/アンロード)。MCE: 異なるフレームワーク(PyTorch+TF等)のコンテナを1エンドポイントに(最大15コンテナ)。MMEはコスト最適化、MCEはアーキテクチャ柔軟性

問題 16: SageMaker の「ターゲット追跡スケーリング(Target Tracking Scaling)」の設定は? → 正解: 指定メトリクス(SageMakerVariantInvocationsPerInstance等)を目標値に維持するAuto Scaling。例: InvocationsPerInstance=1000 に設定 → 各インスタンスが1000リクエスト/分を超えそうならスケールアウト

問題 17: SageMaker の「推論パイプライン(Inference Pipeline)」はどのような場合に使用しますか? → 正解: 前処理→推論→後処理を一連のコンテナとして定義する場合(最大15コンテナ)。学習時の前処理を推論時にも同様に適用(Training-Serving Skew 防止)。Scikit-learn → XGBoost の組み合わせが典型例

問題 18: SageMaker の「カスタムコンテナ(BYOC)」で学習に必要な環境変数は? → 正解: SM_CHANNEL_TRAIN(学習データのパス)、SM_MODEL_DIR(モデル出力パス)、SM_OUTPUT_DATA_DIR(その他出力パス)、SM_HPS(ハイパーパラメータのJSON文字列)。SageMaker Toolkit ライブラリで自動設定

問題 19: SageMaker Clarify の「SHAP(Shapley Additive exPlanations)」はどのような情報を提供しますか? → 正解: 各特徴量がモデルの予測にどれだけ貢献しているかを数値化(ゲーム理論ベース)。グローバル説明(全体的な特徴量重要度)とローカル説明(個別予測の説明)の両方を提供。モデル非依存のアプローチ

問題 20: SageMaker の「オフラインフィーチャーストア(Offline Feature Store)」はどこにデータを保存しますか? → 正解: Amazon S3 に Parquet 形式で保存され、AWS Glue Data Catalog のテーブルとして登録。Amazon Athena でSQLクエリが可能。Offline Store は学習用(大量データを効率的に読み込み)

問題 21: SageMaker の「バッチ変換(Batch Transform)」と「非同期推論」の使い分けは? → 正解: バッチ変換: S3内の全データを一括処理(エンドポイント不要、処理完了後にクラスターを削除)。非同期推論: リクエストをキューに入れて順次処理(エンドポイントを維持、スケールゼロ対応、SNSで完了通知)

問題 22: SageMaker Studio の「ドメイン(Domain)」と「ユーザープロファイル(User Profile)」の関係は? → 正解: ドメイン: Studio 環境の単位(1 VPC + 1 EFS)。ユーザープロファイル: ドメイン内のユーザー(各ユーザーが独立した EFS の home directory を持つ)。IAM ロールはユーザープロファイルに設定

問題 23: SageMaker の「ライフサイクル設定(Lifecycle Configuration)」の用途は? → 正解: Studio ノートブックまたはコンテナ起動時に自動実行するスクリプト。使用例: pip パッケージの自動インストール、Git リポジトリのクローン、環境設定。Studio カーネル起動時に毎回または一度だけ実行

問題 24: SageMaker の「ハイパーパラメータチューニングの目的指標(Objective Metric)」の設定で重要な点は? → 正解: 最適化の方向(Maximize/Minimize)を正しく設定。メトリクスの正規表現パターンでログから正確に抽出されるよう設定。一般的な設定: 精度はMaximize、損失はMinimize

問題 25: SageMaker の「デプロイ済みモデルのエンドポイントのバージョン管理」はどのように行いますか? → 正解: Model Registry でモデルをバージョン管理し、承認されたバージョンのみデプロイ。エンドポイントの設定(EndpointConfig)をバージョン管理してロールバック可能。Lambda エイリアス/SageMaker エンドポイント設定の切り替えで実現

問題 26: SageMaker Ground Truth の「品質管理(Quality Assurance)」の仕組みは? → 正解: 注釈者の精度を「ゴールデンデータセット(正解がわかっているデータ)」で評価。精度が低い注釈者のデータを除外または品質向上トレーニング。複数の注釈者による同一データへの注釈で合意点を算出

問題 27: SageMaker モデルの「学習ジョブアーティファクト」の管理はどのように行いますか? → 正解: S3 にモデルアーティファクト(model.tar.gz)として自動保存。SageMaker Experiments でジョブごとにS3 URIを記録。モデルレジストリで承認済みバージョンのみをエンドポイントにデプロイ

問題 28: SageMaker の「ローカルモード(Local Mode)」の制約は? → 正解: Docker が必要(GPU ローカルモードには NVIDIA Docker が必要)。instance_type='local'で設定。大規模データや分散学習には不向き。本番と完全に同じコンテナ環境をローカルでテスト可能

問題 29: SageMaker 推論の「コンテンツタイプ(Content-Type)」の設定が重要な理由は? → 正解: 推論エンドポイントはContent-Typeヘッダーに基づいてリクエストを適切なデシリアライザーで処理。text/csvapplication/jsonapplication/x-npy等。コンテンツタイプの不一致は400エラーの原因

問題 30: SageMaker の「モデルカード(Model Card)」の目的は? → 正解: モデルの用途、訓練データ、評価メトリクス、バイアス分析、使用上の制限を文書化。MLガバナンスとコンプライアンスへの対応。モデルレジストリと統合してバージョンごとにドキュメントを管理

問題 31: SageMaker の「Data Wrangler」でエクスポートできる形式は? → 正解: SageMaker Pipeline(Pythonスクリプトとして)、SageMaker Feature Store(特徴量の直接登録)、Python スクリプト(Pandas/Spark)、SageMaker Processing ジョブ。UIで作成した変換を再利用可能な形式に変換

問題 32: SageMaker の「Heterogeneous Cluster(異種クラスター)」の用途は? → 正解: 学習に異なるインスタンスタイプを組み合わせる機能。例: データ前処理には CPU 最適化(c5)、モデル学習には GPU(p3)。各インスタンスグループに異なるインスタンスタイプを設定して学習効率を最適化

問題 33: SageMaker の「コールドスタート」問題の根本的な原因は? → 正解: サーバーレス推論やスケールゼロ状態からのコンテナ起動時間(モデルのロード、依存ライブラリの初期化)。リアルタイムエンドポイントでもトラフィックが長期間なかった後の最初のリクエストでも発生。Provisioned Concurrency で解決

問題 34: SageMaker の「Slurm on AWS」パターンはどのような場面で使用しますか? → 正解: HPC(高性能コンピューティング)ワークフローでSlurm ジョブスケジューラーを使用しているチームがAWSに移行する場合。ParallelCluster + Slurm でオンプレの HPC クラスターと同様のワークフローをAWSで実行

問題 35: SageMaker の「学習ジョブの分散戦略(Data Parallel vs Model Parallel)」の使い分けの基準は? → 正解: データ並列: モデル全体が1つのGPUに収まる場合(バッチをGPU間で分割して高速化)。モデル並列: モデルが1つのGPUに収まらない場合(モデルをGPU間で分割)。通常はデータ並列から始め、GPUメモリ不足ならモデル並列に移行


学習戦略(MLA-C01)

試験の特徴

MLA-C01 の重点分野(ドメイン別):

Domain 1: データ準備と特徴エンジニアリング(20%)
  SageMaker Data Wrangler/Feature Store/Processing

Domain 2: ML モデル開発(26%)
  SageMaker Training/Experiments/Debugger/HPO

Domain 3: デプロイとオーケストレーション(22%)
  SageMaker 推論(4タイプ)/Pipelines/Model Registry

Domain 4: ML ソリューションの監視と改善(16%)
  Model Monitor/Clarify/ドリフト検出/再学習

Domain 5: セキュリティ・コンプライアンス・ガバナンス(16%)
  IAM/KMS/VPC設定/Model Cards/MLガバナンス

30日学習プラン

Week 1: データ準備と特徴エンジニアリング
  Day 1-2:  SageMaker Feature Store(Online/Offline)
  Day 3-4:  SageMaker Data Wrangler
  Day 5-6:  SageMaker Processing(Sklearn/Spark)
  Day 7:    データ品質とGround Truth

Week 2: モデル開発
  Day 8-9:  SageMaker Training(基本設定/Spot)
  Day 10-11: SageMaker HPO(Bayesian/Random/Grid)
  Day 12-13: SageMaker Debugger + Experiments
  Day 14:   SageMaker Autopilot + JumpStart

Week 3: デプロイとMLOps
  Day 15-16: SageMaker 推論4種(リアルタイム/サーバーレス/非同期/バッチ)
  Day 17-18: SageMaker Pipelines(ConditionStep/ModelRegistry)
  Day 19-20: Model Monitor(4種の監視タイプ)
  Day 21:   SageMaker Clarify

Week 4: 仕上げ
  Day 22-24: 模擬試験
  Day 25-27: 弱点補強
  Day 28-30: 直前チェックリスト

試験直前チェックリスト(MLA-C01)

学習とデプロイ

  • [ ] SageMaker の推論4種類(リアルタイム/サーバーレス/非同期/バッチ)の特性を説明できる
  • [ ] Managed Spot Training の設定(チェックポイント含む)ができる
  • [ ] データ並列とモデル並列の使い分けを説明できる
  • [ ] SageMaker HPO のBayesian最適化の特性を説明できる

MLOps

  • [ ] SageMaker Pipelines で ConditionStep を使った自動承認フローを設計できる
  • [ ] Model Registry でモデルのバージョン管理と承認フローを実装できる
  • [ ] Model Monitor の4種類(データ品質/モデル品質/バイアス/特徴量帰属)を説明できる
  • [ ] A/Bテストとシャドウテストを SageMaker で実装できる

セキュリティ

  • [ ] SageMaker ジョブをVPC内で実行する設定を説明できる
  • [ ] コンテナ間通信の暗号化を設定できる
  • [ ] Feature Store の IAM 設定(Read/Write を分離)を設計できる

MLA-C01 機械学習エンジニアアソシエイト完全ガイド追加セクション完了


ドメイン別詳細解説(追加)

Domain 1 詳細: データ準備とFeature Engineering

Amazon SageMaker Data Wrangler 完全ガイド

Data Wrangler ワークフロー:

  • データソース接続: S3, Athena, Redshift, Snowflake
  • データフロー(.flow ファイル): Import → Transform → Export
  • 変換処理: 欠損値処理、エンコーディング、スケーリング
  • 出力先: S3, SageMaker Processing, Feature Store

Data Wrangler 主要機能

機能カテゴリ 具体的な変換 用途
欠損値処理 削除/平均補完/中央値補完/最頻値補完 データクリーニング
エンコーディング One-Hot/Ordinal/Target Encoding カテゴリ変数変換
スケーリング Standard/MinMax/Robust Scaler 数値変換
テキスト処理 TF-IDF/Count Vectorizer/BERT埋め込み NLP前処理
時系列 ラグ特徴/移動平均/季節性分解 時系列特徴抽出
カスタム変換 Pandasコード/PySpark/PYSPARK SQL 独自ロジック

SageMaker Feature Store 詳細

Feature Store アーキテクチャ:

Feature Group
  ├── メタデータ: 名前、説明、タグ
  ├── Record Identifier: 主キー(例: customer_id)
  └── Event Time: タイムスタンプ
        ├── Online Store(DynamoDB): 低レイテンシ、最新データ、リアルタイム推論
        └── Offline Store(S3 Parquet): バッチ処理、全履歴保持、モデルトレーニング
# Feature Store 完全実装例
import boto3
import pandas as pd
import time
from sagemaker.feature_store.feature_group import FeatureGroup
import sagemaker

session = sagemaker.Session()

# Feature Group 定義
feature_group = FeatureGroup(
    name='customer-features-v1',
    sagemaker_session=session
)

feature_definitions = [
    {'FeatureName': 'customer_id', 'FeatureType': 'String'},
    {'FeatureName': 'event_time', 'FeatureType': 'Fractional'},
    {'FeatureName': 'age', 'FeatureType': 'Integral'},
    {'FeatureName': 'annual_income', 'FeatureType': 'Fractional'},
    {'FeatureName': 'churn_risk_score', 'FeatureType': 'Fractional'},
]

feature_group.create(
    s3_uri='s3://my-bucket/feature-store/',
    record_identifier_name='customer_id',
    event_time_feature_name='event_time',
    role_arn=role,
    enable_online_store=True,
    feature_definitions=feature_definitions
)

df = pd.DataFrame({
    'customer_id': ['C001', 'C002', 'C003'],
    'event_time': [time.time(), time.time(), time.time()],
    'age': [35, 28, 42],
    'annual_income': [75000.0, 52000.0, 98000.0],
    'churn_risk_score': [0.15, 0.72, 0.08],
})

feature_group.ingest(data_frame=df, max_workers=4, wait=True)

# Online Store からリアルタイム取得
record = feature_group.get_record(record_identifier_value='C001')

# Offline Store からバッチ取得(Athena クエリ)
query = feature_group.athena_query()
query.run(
    query_string=f'SELECT * FROM "{query.table_name}" WHERE event_time > 1700000000',
    output_location='s3://my-bucket/query-results/'
)
query.wait()
df_result = query.as_dataframe()

Domain 2 詳細: モデル開発とトレーニング

インスタンスタイプ選択ガイド

データサイズ < 10GB:
  └── MLモデル: ml.m5 / ml.c5
  └── DLモデル: ml.p3 / ml.g4dn

データサイズ > 10GB:
  └── 分散トレーニング必要: ml.p3.16xlarge + 分散設定
  └── 分散トレーニング不要: ml.g4dn.xlarge

Managed Spot Training 設定

from sagemaker.estimator import Estimator

estimator = Estimator(
    image_uri='763104351884.dkr.ecr.us-east-1.amazonaws.com/pytorch-training:1.13-gpu-py39',
    role=role,
    instance_count=1,
    instance_type='ml.p3.2xlarge',
    use_spot_instances=True,
    max_wait=7200,          # max_run の 2倍推奨
    max_run=3600,
    # チェックポイント設定(必須!)
    checkpoint_s3_uri='s3://my-bucket/checkpoints/',
    checkpoint_local_path='/opt/ml/checkpoints/',
    hyperparameters={'epochs': 100, 'batch-size': 64}
)

チェックポイント実装(train.py):

  • 学習再開時: checkpoint_path が存在する場合 torch.load() で再開
  • 保存: 5エポックごとに epoch, model_state_dict, optimizer_state_dict を保存

分散トレーニング設定

from sagemaker.pytorch import PyTorch

estimator = PyTorch(
    entry_point='train_distributed.py',
    role=role,
    instance_count=4,
    instance_type='ml.p3.16xlarge',
    framework_version='1.13',
    py_version='py39',
    distribution={
        'smdistributed': {
            'dataparallel': {'enabled': True}
        }
    }
)

分散トレーニング戦略比較:

  • データ並列: 各GPUがフルモデルを持ち異なるバッチを処理。AllReduceで勾配集約。シンプルだがGPUメモリ制限あり
  • モデル並列: モデルを分割して各GPUに配置。GPUメモリに収まらない大規模モデルに使用
  • SageMaker Distributed Library: smdistributed.dataparallel と smdistributed.modelparallel を提供

Domain 3 詳細: MLOps と自動化

SageMaker Pipelines 全ステップタイプ

ステップ 用途
ProcessingStep データ前処理、評価
TrainingStep モデルトレーニング
TuningStep ハイパーパラメータ最適化
TransformStep バッチ変換
CreateModelStep モデル作成
RegisterModel モデルレジストリ登録
ConditionStep 条件分岐
FailStep パイプライン失敗
LambdaStep Lambda関数呼び出し
CallbackStep 外部システム呼び出し
EMRStep EMR Spark ジョブ
from sagemaker.workflow.condition_step import ConditionStep
from sagemaker.workflow.conditions import ConditionGreaterThanOrEqualTo
from sagemaker.workflow.fail_step import FailStep

accuracy_condition = ConditionGreaterThanOrEqualTo(
    left=JsonGet(
        step_name=evaluation_step.name,
        property_file=evaluation_report,
        json_path='metrics.accuracy.value'
    ),
    right=0.85
)

condition_step = ConditionStep(
    name='CheckAccuracy',
    conditions=[accuracy_condition],
    if_steps=[register_model_step],
    else_steps=[FailStep(name='AccuracyFail', error_message='精度が基準値未満')]
)

Model Monitor 4種類の詳細実装

from sagemaker.model_monitor import DataCaptureConfig, DefaultModelMonitor
from sagemaker.model_monitor import CronExpressionGenerator

# データキャプチャ設定(エンドポイント作成時)
data_capture_config = DataCaptureConfig(
    enable_capture=True,
    sampling_percentage=100,
    destination_s3_uri='s3://my-bucket/data-capture/',
    capture_options=['REQUEST', 'RESPONSE']
)

# Data Quality Monitor
my_monitor = DefaultModelMonitor(
    role=role,
    instance_count=1,
    instance_type='ml.m5.xlarge'
)

my_monitor.suggest_baseline(
    baseline_dataset='s3://my-bucket/baseline/train.csv',
    output_s3_uri='s3://my-bucket/baseline-results/'
)

my_monitor.create_monitoring_schedule(
    monitor_schedule_name='daily-data-quality-check',
    endpoint_input=endpoint_name,
    output_s3_uri='s3://my-bucket/monitor-reports/',
    statistics=my_monitor.baseline_statistics(),
    constraints=my_monitor.suggested_constraints(),
    schedule_cron_expression=CronExpressionGenerator.hourly()
)

Domain 4 詳細: モデルのデプロイと最適化

SageMaker Inference Recommender

最適インスタンスタイプの自動ベンチマーク:

  • Default モード: 30分間、代表的なインスタンスタイプを評価
  • Advanced モード: 最大2時間、カスタム負荷テストで詳細評価
  • 出力: インスタンスタイプ、P95レイテンシ、コスト/時間の比較

マルチモデルエンドポイント(MME)詳細

from sagemaker.multidatamodel import MultiDataModel

mme = MultiDataModel(
    name='multi-model-endpoint',
    model_data_prefix='s3://my-bucket/models/',
    model=model,
    sagemaker_session=session
)

predictor = mme.deploy(
    initial_instance_count=2,
    instance_type='ml.m5.xlarge'
)

# 個別モデルへの推論(TargetModelで指定)
response = predictor.predict(
    data=test_data,
    target_model='customer-segment-A/model.tar.gz'
)

# 新モデルを動的に追加(ダウンタイムなし)
mme.add_model(
    model_data_source='s3://my-bucket/new-model/model.tar.gz',
    model_data_path='new-model/model.tar.gz'
)

MME のメリット: 数百モデルを一エンドポイントで管理、使用頻度低モデルのアンロード、コスト大幅削減

Auto Scaling 設定

import boto3
autoscaling = boto3.client('application-autoscaling')

autoscaling.register_scalable_target(
    ServiceNamespace='sagemaker',
    ResourceId=f'endpoint/{endpoint_name}/variant/AllTraffic',
    ScalableDimension='sagemaker:variant:DesiredInstanceCount',
    MinCapacity=1,
    MaxCapacity=10
)

autoscaling.put_scaling_policy(
    PolicyName='ml-endpoint-scaling',
    ServiceNamespace='sagemaker',
    ResourceId=f'endpoint/{endpoint_name}/variant/AllTraffic',
    ScalableDimension='sagemaker:variant:DesiredInstanceCount',
    PolicyType='TargetTrackingScaling',
    TargetTrackingScalingPolicyConfiguration={
        'TargetValue': 70.0,
        'PredefinedMetricSpecification': {
            'PredefinedMetricType': 'SageMakerVariantInvocationsPerInstance'
        },
        'ScaleInCooldown': 300,
        'ScaleOutCooldown': 60
    }
)

Amazon Bedrock 完全ガイド(MLA試験向け)

Bedrock 基本アーキテクチャ

基盤モデル(FM)プロバイダー:

  • Anthropic: Claude 3 Opus/Sonnet/Haiku
  • AI21 Labs: Jurassic-2
  • Cohere: Command, Embed
  • Stability AI: Stable Diffusion XL
  • Amazon: Titan Text, Titan Embeddings, Titan Image
  • Meta: Llama 3

主要機能:

  • Playground: モデルテスト・比較
  • Fine-tuning: ドメイン特化モデル作成(継続的事前学習 / 指示チューニング)
  • Knowledge Base: RAG(検索拡張生成)
  • Agents: 自律的タスク実行(API連携・ツール使用)
  • Model Evaluation: 自動/人間評価

Bedrock Python SDK 使用例

import boto3
import json

bedrock = boto3.client('bedrock-runtime', region_name='us-east-1')

# テキスト生成(Claude 3)
response = bedrock.invoke_model(
    modelId='anthropic.claude-3-sonnet-20240229-v1:0',
    body=json.dumps({
        'anthropic_version': 'bedrock-2023-05-31',
        'max_tokens': 1000,
        'messages': [{'role': 'user', 'content': 'AWSとは何ですか?'}]
    }),
    contentType='application/json',
    accept='application/json'
)
result = json.loads(response['body'].read())
print(result['content'][0]['text'])

# エンベッディング生成(Titan Embeddings)
embed_response = bedrock.invoke_model(
    modelId='amazon.titan-embed-text-v1',
    body=json.dumps({'inputText': 'Amazon SageMaker'}),
    contentType='application/json',
    accept='application/json'
)
embedding = json.loads(embed_response['body'].read())['embedding']  # 1536次元

Bedrock Knowledge Base (RAG)

import boto3

bedrock_agent_runtime = boto3.client('bedrock-agent-runtime')

# Knowledge Base からの RAG 検索・生成
response = bedrock_agent_runtime.retrieve_and_generate(
    input={'text': 'SageMakerの推論タイプを教えてください'},
    retrieveAndGenerateConfiguration={
        'type': 'KNOWLEDGE_BASE',
        'knowledgeBaseConfiguration': {
            'knowledgeBaseId': 'YOUR_KB_ID',
            'modelArn': 'arn:aws:bedrock:us-east-1::foundation-model/anthropic.claude-3-sonnet-20240229-v1:0',
            'retrievalConfiguration': {
                'vectorSearchConfiguration': {
                    'numberOfResults': 5,
                    'overrideSearchType': 'HYBRID'  # セマンティック+キーワード
                }
            }
        }
    }
)
print(response['output']['text'])

# Knowledge Base 作成(OpenSearch Serverless使用)
bedrock_agent_mgmt = boto3.client('bedrock-agent')
kb_response = bedrock_agent_mgmt.create_knowledge_base(
    name='ml-docs-kb',
    roleArn=role_arn,
    knowledgeBaseConfiguration={
        'type': 'VECTOR',
        'vectorKnowledgeBaseConfiguration': {
            'embeddingModelArn': 'arn:aws:bedrock:us-east-1::foundation-model/amazon.titan-embed-text-v1'
        }
    },
    storageConfiguration={
        'type': 'OPENSEARCH_SERVERLESS',
        'opensearchServerlessConfiguration': {
            'collectionArn': collection_arn,
            'vectorIndexName': 'ml-docs-index',
            'fieldMapping': {
                'vectorField': 'embedding',
                'textField': 'text',
                'metadataField': 'metadata'
            }
        }
    }
)

MLセキュリティと コンプライアンス詳細

SageMaker セキュリティ設定一覧

estimator = PyTorch(
    entry_point='train.py',
    role=role,
    instance_count=2,
    instance_type='ml.p3.8xlarge',
    framework_version='1.13',
    py_version='py39',
    # VPC設定(インターネットアクセスを遮断)
    subnets=['subnet-0123456789abcdef0', 'subnet-0987654321fedcba0'],
    security_group_ids=['sg-0123456789abcdef0'],
    # コンテナ間通信の暗号化
    encrypt_inter_container_traffic=True,
    # ネットワーク分離(S3/ECRへのVPCエンドポイントが必要)
    enable_network_isolation=True,
    # S3 暗号化
    output_kms_key='arn:aws:kms:us-east-1:123456789012:key/key-id'
)

セキュリティベストプラクティス:

  1. VPCサブネット指定でインターネットアクセス遮断
  2. S3データをKMSで暗号化(SSE-KMS)
  3. コンテナ間通信の暗号化有効化
  4. IAM最小権限の原則
  5. CloudTrailでAPI呼び出しを監査
  6. SageMaker Studio でネットワーク分離設定

試験対策 重要サービス比較表

SageMaker 全サービス一覧

サービス 用途 試験での出題ポイント
Studio 統合開発環境 JupyterLab ベース
Data Wrangler GUI データ前処理 .flow ファイル
Feature Store 特徴量管理 Online/Offline 二層
Ground Truth データラベリング 人間/自動ラベリング
Clarify バイアス/説明可能性 SHAP値
Experiments 実験管理 Experiment→Trial→TrialComponent
Debugger トレーニング診断 勾配消失/爆発検出
HPO ハイパーパラメータ最適化 Bayesian最適化
Autopilot AutoML CRISP-DM自動化
JumpStart 事前学習済みモデル Fine-tuning対応
Pipelines MLワークフロー CI/CD for ML
Model Registry モデル管理 バージョン/承認
Model Monitor モデル監視 4種類の監視
Neo モデル最適化 エッジデバイス対応
Inference Recommender 最適インスタンス ベンチマーク自動化

推論タイプ詳細比較(再掲・試験重要)

項目 リアルタイム サーバーレス 非同期 バッチ変換
レイテンシ 低(ms) 低(コールドスタート有) 非同期 バッチ
ペイロード 最大6MB 最大4MB 最大1GB 無制限
処理時間 60秒以内 60秒以内 最大15分 無制限
コールドスタート なし あり なし なし
課金 インスタンス時間 リクエスト単位 インスタンス時間 インスタンス時間
ユースケース Webアプリ 低頻度 大ファイル 大量バッチ
スケーリング Auto Scaling 自動 キューベース N/A

追加模擬試験問題(MLA-C01)第2セット

Q1. SageMaker Training Job でスポットインスタンスを使用する際の必須要件は?

  • A) 学習スクリプトがGPUをサポートすること
  • B) チェックポイントをS3に保存する設定
  • C) 分散トレーニングを使用すること
  • D) カスタムコンテナを使用すること

正解: B - スポットインスタンスは中断される可能性があるため、checkpoint_s3_uricheckpoint_local_pathの設定が必須です。


Q2. SageMaker Feature Store のOnline StoreとOffline Storeの違いは?

  • A) Online Store = DynamoDB(低レイテンシ)、Offline Store = S3 Parquet(バッチ処理)
  • B) Online Store = S3、Offline Store = DynamoDB
  • C) Online Store = Athenaでクエリ、Offline Store = APIでアクセス
  • D) 両方とも同じデータを使用する

正解: A - Online StoreはDynamoDBベースで低レイテンシ、Offline StoreはS3 Parquet形式でAthenを使ったバッチ処理に使います。


Q3. Model Quality Monitor が必要とするものは?

  • A) トレーニングデータのみ
  • B) Ground Truth(正解ラベル)とキャプチャした予測値
  • C) 特徴量の統計量ベースライン
  • D) SHAPバリュー

正解: B - Model Quality Monitor は予測値と実際の正解ラベルを比較して精度の劣化を検出します。


Q4. Bedrock Knowledge Base でRAGを実装する際に最重要な設定は?

  • A) Lambda関数の設定
  • B) ベクトルデータベースとエンベッディングモデル
  • C) Auto Scalingグループ
  • D) CloudFront配信設定

正解: B - RAGにはドキュメントをベクトル化するエンベッディングモデルと、ベクトルを保存・検索するベクトルデータベースが必要です。


Q5. SageMaker Clarify の前処理バイアスと後処理バイアスの違いは?

  • A) 前処理バイアスはデータ内のバイアス、後処理バイアスはモデル予測のバイアス
  • B) 前処理バイアスはモデルバイアス、後処理バイアスはデータバイアス
  • C) 違いはない
  • D) 後処理バイアスはデータ分割に関するバイアス

正解: A - Pre-training バイアスはトレーニングデータのバイアスを測定、Post-training バイアスはモデル予測結果のバイアスを測定します。


Q6. SageMaker Pipelines でメトリクスが閾値以下でパイプラインを停止するには?

  • A) Lambda Step でロジック実装
  • B) ConditionStep と FailStep の組み合わせ
  • C) CloudWatch Alarm を使用
  • D) SNS 通知を設定

正解: B - ConditionStepで条件分岐し、満たさない場合のブランチでFailStepを実行します。


Q7. SageMaker でモデル並列が必要なのはどの場合か?

  • A) データセットが大きすぎる場合
  • B) モデルが一つのGPUメモリに収まらない場合
  • C) トレーニング速度を上げたい場合
  • D) コストを削減したい場合

正解: B - モデル並列はLLMなどGPUメモリに収まらない大規模モデルのトレーニングに使用します。


Q8. マルチモデルエンドポイント(MME)の最大の利点は?

  • A) 推論速度の向上
  • B) 一つのエンドポイントで複数モデルを動的ロード/アンロード、コスト削減
  • C) セキュリティの強化
  • D) モデルの精度向上

正解: B - MMEは一つのエンドポイントで数百モデルをホストでき、使用頻度の低いモデルはメモリからアンロードします。


Q9. SageMaker Neo のコンパイルの主目的は?

  • A) モデルの精度向上
  • B) ターゲットデバイスに最適化してレイテンシ削減と推論効率化
  • C) モデルのセキュリティ強化
  • D) データ前処理の自動化

正解: B - Neoはターゲットハードウェアに最適化してコンパイルし、推論速度を最大2倍向上させます。


Q10. SageMaker A/Bテストで2つのモデルを比較する設定方法は?

  • A) 2つの別々のエンドポイントを作成
  • B) 一つのエンドポイントに2つのProductionVariantを設定し、トラフィック分割を指定
  • C) Lambda関数でルーティング
  • D) CloudFront でA/Bテスト

正解: B - ProductionVariantsに2つのVariantを設定し、InitialVariantWeightでトラフィック比率を指定します。


Q11. Ground Truth でラベリングコスト削減の自動ラベリング機能は?

  • A) SageMaker Autopilot
  • B) Automated Data Labeling(Auto Labeling)
  • C) SageMaker Clarify
  • D) Rekognition

正解: B - Ground Truth のAuto Labelingは信頼度の高い予測に自動でラベルを付与し、不確実なデータのみ人間に送ります。最終的に70-80%以上を自動ラベリングできます。


Q12. Spot Training で max_wait と max_run の正しい関係は?

  • A) max_wait < max_run
  • B) max_wait > max_run(スポットインスタンス待機時間を含む)
  • C) max_wait = max_run
  • D) max_wait はオプション

正解: B - max_wait はスポットインスタンスが利用可能になるまでの待機時間を含む総時間で、max_run より大きく設定。通常 max_wait = max_run × 2 が推奨です。


Q13. SageMaker Debugger で勾配消失問題を検出するルールは?

  • A) DeadRelu
  • B) VanishingGradient
  • C) WeightUpdateRatio
  • D) LossNotDecreasing

正解: B - VanishingGradient ルールは勾配の絶対値が非常に小さくなった場合に検出します。


Q14. Bedrock の Provisioned Throughput が必要なケースは?

  • A) 低頻度のAPIコール
  • B) 一貫した高スループットが必要な本番環境
  • C) テスト環境での利用
  • D) 費用を最小化したい場合

正解: B - Provisioned Throughputはモデルユニットを事前購入し、一貫したスループットを保証。On-Demandより高コストですが、高負荷本番環境でのレイテンシ安定化に有効です。


Q15. SageMaker Pipeline で並列実行するには?

  • A) StepごとにParallelオプションを設定
  • B) 依存関係を持たない複数のStepを同じPipelineに含めると自動的に並列実行
  • C) ParallelStep を使用
  • D) Lambda Step で並列化

正解: B - SageMaker Pipelines はDAGとして実行され、依存関係のないStepは自動的に並列実行されます。


Q16. インプレース更新とブルー/グリーンデプロイの違いは?

  • A) インプレース更新はダウンタイムあり、ブルー/グリーンはゼロダウンタイム
  • B) ブルー/グリーンはダウンタイムあり、インプレースはゼロダウンタイム
  • C) 違いはない
  • D) どちらも同じダウンタイム

正解: A - インプレース更新は既存インスタンスを直接更新するため短時間のダウンタイムが発生。ブルー/グリーンは新フリートを並行起動し正常確認後にトラフィック切り替え、ゼロダウンタイムを実現します。


Q17. SageMaker Processing Job で使用できるフレームワークは?

  • A) Scikit-learnのみ
  • B) Scikit-learn、PyTorch、TensorFlow、Apache Spark(PySpark)など
  • C) TensorFlowのみ
  • D) PyTorchとTensorFlowのみ

正解: B - SKLearnProcessor、PyTorchProcessor、TensorFlowProcessor、SparkMLProcessor(PySpark)、ScriptProcessor(カスタムコンテナ)など多数のプロセッサを提供します。


Q18. MLモデルのデータドリフトとモデルドリフトの違いは?

  • A) 同じ概念
  • B) データドリフトは入力データ分布の変化、モデルドリフトは予測精度の低下
  • C) モデルドリフトはコードの変更、データドリフトはHWの変更
  • D) モデルドリフトは意図的、データドリフトは意図しない変化

正解: B - データドリフト(コバリエートシフト)は入力特徴量の分布変化。モデルドリフト(コンセプトドリフト)は入出力の関係変化による精度低下。それぞれData Quality MonitorとModel Quality Monitorで検出します。


Q19. SageMaker で機密データを扱う場合のベストプラクティスは?

  • A) データをインターネット経由で送信
  • B) VPCエンドポイント使用、VPC内実行、S3/EFS暗号化(KMS)、コンテナ間通信暗号化
  • C) パブリックS3バケットに保存
  • D) 認証なしでAPIアクセス

正解: B - VPCサブネット指定でインターネットアクセス遮断、S3データのKMS暗号化、コンテナ間通信暗号化、IAM最小権限、CloudTrail監査が必須です。


Q20. Rekognition Custom Labels の利点は?

  • A) 独自カテゴリの画像分類モデルをコードなしで構築可能
  • B) 汎用的な物体検出のみ
  • C) テキスト認識に特化
  • D) 動画解析のみ

正解: A - 少量の学習データ(数百枚から)でカスタム画像分類・物体検出モデルを構築できます。製品の欠陥検出、医療画像分類など特定ドメインに最適です。


Q21. Bayesian最適化のHPOでの利点は?

  • A) 並列実行に最も適している
  • B) 過去のトライアル結果を学習して効率的に探索空間を絞り込む
  • C) ランダムサーチより遅い
  • D) 単純なモデルにのみ適用可能

正解: B - Bayesian最適化はガウス過程を使って目的関数の事後分布を推定し、次のハイパーパラメータを効率的に選択します。少ない試行回数で最適値に近づけますが、並列実行にはRandomが適しています。


Q22. SageMaker Clarify でSHAP値を計算する際のベースラインは?

  • A) トレーニングデータの平均値(固定)
  • B) ゼロベクトル
  • C) 各特徴量が「存在しない」と仮定した場合のシャプレー値の参照点
  • D) テストデータの最小値

正解: C - SHAPはゲーム理論に基づき各特徴量の予測への貢献度を計算します。ベースラインとして特徴量が「ない状態」を仮定し、一般的にはトレーニングデータの平均値や特定サンプルが使用されます。


Q23. Model Registry でモデルのステータスを「Approved」にする推奨方法は?

  • A) 手動承認のみ
  • B) ConditionStep による自動評価 + 必要に応じた人間承認の二段階フロー
  • C) タイマーによる自動承認
  • D) CodeBuild による承認

正解: B - ベストプラクティスは、ConditionStepで基準を自動評価し「PendingManualApproval」にした後、MLエンジニアが確認して「Approved」に変更する二段階承認フローです。


Q24. SageMaker Autopilot の処理順序は?

  • A) データ分析 → 候補パイプライン生成 → 特徴量エンジニアリング → モデルトレーニング
  • B) モデルトレーニング → 特徴量エンジニアリング → データ分析
  • C) 特徴量エンジニアリング → データ分析 → モデルトレーニング
  • D) データ分析のみ自動化

正解: A - AutopilotはCRISP-DMに従い、①データ分析・EDA → ②候補パイプライン生成 → ③特徴量エンジニアリング → ④モデルトレーニング/HPO → ⑤最良モデル選定の順で処理します。


Q25. SageMaker Experiments の階層構造は?

  • A) Experiment → Run
  • B) Project → Model → Version
  • C) Trial → TrialComponent
  • D) Experiment → Trial → TrialComponent

正解: D - Experimentsの階層はExperiment(プロジェクト単位)→ Trial(個別実験)→ TrialComponent(各ステップ:前処理/トレーニング/評価)です。


Q26. SageMaker JumpStart の主な用途は?

  • A) データ前処理の自動化
  • B) 事前学習済みモデルのFine-tuningとデプロイの簡素化
  • C) ハイパーパラメータの自動最適化
  • D) モデルの監視自動化

正解: B - JumpStartはHugging Face、PyTorch Hubなどから事前学習済みモデルへのワンクリックアクセスとFine-tuningを提供します。独自データでのカスタマイズに最適です。


Q27. Bedrock Fine-tuning の2種類のアプローチの違いは?

  • A) 両方とも同じ
  • B) 継続的事前学習(大量テキストで自己教師あり学習)vs 指示チューニング(入出力ペアで特定タスク特化)
  • C) 継続的事前学習はコスト高、指示チューニングはコスト低のみの違い
  • D) 継続的事前学習は分類、指示チューニングは生成のみ

正解: B - 継続的事前学習(Continued Pre-training)は大量のドメイン特化テキストで基盤知識を更新。指示チューニング(Fine-tuning)は入力/出力ペアデータで特定タスクへの応答能力を強化します。


Q28. SageMaker Pipeline でパラメータをオーバーライドして実行する方法は?

  • A) コードを書き換えて再デプロイ
  • B) pipeline.start(parameters={…}) でパラメータ辞書を指定
  • C) 環境変数として設定
  • D) S3設定ファイルを更新

正解: B - pipeline.start(parameters={'ParameterName': value})でパイプライン実行時にパラメータをオーバーライドできます。デフォルト値からの変更も柔軟に対応可能です。


Q29. SageMaker Debugger でトレーニング中に問題検出時の自動アクション設定は?

  • A) メールのみ
  • B) Rule を設定し、問題検出時に自動的にトレーニングを停止またはSNS通知
  • C) CloudWatch Alarm のみ
  • D) 自動アクションは不可能

正解: B - DebuggerはBuilt-in RuleまたはCustom Ruleを設定し、条件を満たした場合に自動でトレーニングを停止(コスト削減)またはSNS通知を送ることができます。


Q30. SageMaker エンドポイントのCanaryデプロイで新モデルへのトラフィックの推奨割合は?

  • A) 50%からスタート
  • B) 5-10%からスタートし段階的に増加
  • C) 100%に一度に移行
  • D) 最初の1時間は0%

正解: B - Canaryデプロイは新モデルに最初は少量のトラフィック(5-10%)を流し、問題がなければ段階的に増やします(Canary → Linear → All-At-Once)。CloudWatchメトリクスを監視しながら安全にデプロイを進めます。


MLA-C01 総合まとめ

試験 重要ポイント TOP 20

  1. Feature Store: Online=DynamoDB(リアルタイム)、Offline=S3 Parquet(バッチ)
  2. 推論4種類: リアルタイム(6MB/60s) / サーバーレス(4MB/コールドスタート) / 非同期(1GB/15min) / バッチ(無制限)
  3. Spot Training: チェックポイント必須、max_wait > max_run(×2推奨)
  4. Pipelines: ConditionStep+FailStepでメトリクスベース制御、DAGで自動並列化
  5. Model Monitor: データ品質/モデル品質/バイアス/特徴量帰属の4種類
  6. A/Bテスト: ProductionVariant複数設定 + InitialVariantWeight
  7. Blue/Greenデプロイ: ゼロダウンタイム、Canary(5-10%) → Linear → All-At-Once
  8. 分散トレーニング: データ並列(バッチ分散)vsモデル並列(モデルが大きすぎる場合)
  9. Clarify: Pre/Post-training バイアス、SHAP値による説明可能性
  10. Bedrock RAG: Knowledge Base = ベクトルDB + エンベッディングモデル + Hybrid検索
  11. Neo: ハードウェア最適化コンパイル(TensorRT/OpenVINO、推論最大2倍高速化)
  12. MME: 1エンドポイントで数百モデル、コスト大幅削減
  13. Inference Recommender: Default(30分) / Advanced(2時間)ベンチマーク
  14. Autopilot: CRISP-DM自動化、候補パイプライン生成
  15. Ground Truth Auto Labeling: 信頼度高い予測を自動ラベリング、コスト70-80%削減
  16. セキュリティ: VPCサブネット + コンテナ間通信暗号化 + KMS + IAM最小権限
  17. Experiments: Experiment → Trial → TrialComponent の3層階層
  18. Debugger: VanishingGradient, ExplodingTensor, LossNotDecreasing などのビルトインルール
  19. Bedrock Provisioned Throughput: モデルユニット事前購入、高スループット本番に最適
  20. JumpStart: 事前学習済みモデルのFine-tuning簡素化(Hugging Face等から直接利用)

MLA-C01 機械学習エンジニアアソシエイト 完全ガイド完了


AWS AI/ML サービス完全カタログ

コンピュータビジョン系サービス

サービス 主な機能 用途
Amazon Rekognition 顔認識/物体検出/テキスト抽出/不適切コンテンツ検出 画像・動画分析
Rekognition Custom Labels カスタム物体検出/分類 独自カテゴリの画像認識
Amazon Textract OCR + 構造化データ抽出(フォーム/テーブル) ドキュメント処理
Amazon Lookout for Vision 製造ラインの視覚的欠陥検出 品質管理/異常検出

Rekognition 主要API

import boto3

rekognition = boto3.client('rekognition')

# 物体・シーン検出
response = rekognition.detect_labels(
    Image={'S3Object': {'Bucket': 'my-bucket', 'Name': 'image.jpg'}},
    MaxLabels=10,
    MinConfidence=80
)

# 顔検出
faces = rekognition.detect_faces(
    Image={'S3Object': {'Bucket': 'my-bucket', 'Name': 'photo.jpg'}},
    Attributes=['ALL']
)

# テキスト検出
text = rekognition.detect_text(
    Image={'S3Object': {'Bucket': 'my-bucket', 'Name': 'sign.jpg'}}
)

# 顔比較(なりすまし検出)
comparison = rekognition.compare_faces(
    SourceImage={'S3Object': {'Bucket': 'my-bucket', 'Name': 'source.jpg'}},
    TargetImage={'S3Object': {'Bucket': 'my-bucket', 'Name': 'target.jpg'}},
    SimilarityThreshold=90
)

# カスタムモデル(Custom Labels)での推論
custom = rekognition.detect_custom_labels(
    ProjectVersionArn='arn:aws:rekognition:us-east-1:123:project/MyModel/version/v1/1234',
    Image={'S3Object': {'Bucket': 'my-bucket', 'Name': 'product.jpg'}},
    MinConfidence=70
)

自然言語処理(NLP)系サービス

サービス 機能 ユースケース
Amazon Comprehend エンティティ抽出/感情分析/言語検出/トピックモデリング テキスト分析
Comprehend Medical 医療用語抽出/PHI検出 医療記録処理
Amazon Translate リアルタイム翻訳(75+言語) 多言語コンテンツ
Amazon Transcribe 音声テキスト変換(STT) 音声記録/字幕
Amazon Polly テキスト音声変換(TTS) 音声コンテンツ
Amazon Lex チャットボット/音声ボット(自動音声対話) カスタマーサービス

Amazon Comprehend 実装例

import boto3

comprehend = boto3.client('comprehend')

text = "Amazon SageMaker helps data scientists build ML models quickly in Tokyo."

# エンティティ認識(人名/組織/場所/日付など)
entities = comprehend.detect_entities(Text=text, LanguageCode='en')
for entity in entities['Entities']:
    print(f"{entity['Type']}: {entity['Text']} ({entity['Score']:.2f})")

# 感情分析
sentiment = comprehend.detect_sentiment(Text=text, LanguageCode='en')
print(f"Sentiment: {sentiment['Sentiment']}")
# 出力: Positive, Negative, Mixed, Neutral

# キーフレーズ抽出
keyphrases = comprehend.detect_key_phrases(Text=text, LanguageCode='en')

# 言語検出
language = comprehend.detect_dominant_language(Text=text)

# カスタム分類モデル(Comprehend Custom Classifier)
# 固有のカテゴリに基づくドキュメント分類
response = comprehend.classify_document(
    Text=text,
    EndpointArn='arn:aws:comprehend:us-east-1:123:document-classifier-endpoint/my-classifier'
)

時系列・予測系サービス

サービス 機能 ユースケース
Amazon Forecast 時系列予測(AutoML) 需要予測/在庫最適化
Amazon Lookout for Metrics 時系列異常検出 KPI異常検知
Amazon Lookout for Equipment 設備の予知保全 産業IoT

Amazon Forecast 実装

import boto3

forecast = boto3.client('forecast')

# データセットグループ作成
dataset_group = forecast.create_dataset_group(
    DatasetGroupName='retail-demand-forecast',
    Domain='RETAIL'  # RETAIL, INVENTORY_PLANNING, EC2 CAPACITY, WORK_FORCE, etc.
)

# データセット作成(TARGET_TIME_SERIES が必須)
dataset = forecast.create_dataset(
    DatasetName='retail-sales',
    Domain='RETAIL',
    DatasetType='TARGET_TIME_SERIES',
    Schema={
        'Attributes': [
            {'AttributeName': 'timestamp', 'AttributeType': 'timestamp'},
            {'AttributeName': 'target_value', 'AttributeType': 'float'},  # 予測対象
            {'AttributeName': 'item_id', 'AttributeType': 'string'},     # 製品ID
        ]
    },
    DataFrequency='D'  # 日次データ
)

# 予測子(Predictor)作成(AutoML使用)
predictor = forecast.create_auto_predictor(
    PredictorName='retail-auto-predictor',
    ForecastHorizon=30,    # 30日先まで予測
    ForecastFrequency='D',
    DataConfig={
        'DatasetGroupArn': dataset_group['DatasetGroupArn']
    },
    ExplainPredictor=True  # 予測の説明可能性
)

パーソナライゼーション

import boto3

personalize = boto3.client('personalize-runtime')

# リアルタイム推薦(ユーザーベース)
response = personalize.get_recommendations(
    campaignArn='arn:aws:personalize:us-east-1:123:campaign/my-campaign',
    userId='USER_001',
    numResults=10
)

# 類似アイテム推薦
similar = personalize.get_recommendations(
    campaignArn='arn:aws:personalize:us-east-1:123:campaign/similar-items-campaign',
    itemId='ITEM_001',
    numResults=5
)

# イベント(行動履歴)の記録
personalize_events = boto3.client('personalize-events')
personalize_events.put_events(
    trackingId='TRACKING_ID',
    userId='USER_001',
    sessionId='SESSION_001',
    eventList=[{
        'sentAt': 1700000000,
        'eventType': 'CLICK',
        'itemId': 'ITEM_001',
        'properties': '{"numRatings": 3, "eventValue": 4.5}'
    }]
)

SageMaker Canvas と No-Code ML

SageMaker Canvas の主要機能

SageMaker Canvas はコードなしでMLモデルを構築できるビジュアルツールです。

Canvas ワークフロー
  ┌─────────────────┐
  │  1. データインポート│
  │  S3, Redshift,  │
  │  Snowflake 対応  │
  └────────┬────────┘
           ↓
  ┌─────────────────┐
  │  2. モデルタイプ  │
  │  選択            │
  │  ・二値分類      │
  │  ・多値分類      │
  │  ・数値予測      │
  │  ・時系列予測    │
  │  ・画像分析      │
  │  ・テキスト分析  │
  └────────┬────────┘
           ↓
  ┌─────────────────┐
  │  3. モデルビルド  │
  │  ・Quick Build  │
  │    (2-15分)   │
  │  ・Standard     │
  │    (2-4時間)  │
  └────────┬────────┘
           ↓
  ┌─────────────────┐
  │  4. 予測実行     │
  │  ・単一予測      │
  │  ・バッチ予測    │
  └─────────────────┘

Canvas の特徴:

  • 対象ユーザー: データアナリスト、ビジネスアナリスト(MLエンジニア不要)
  • AutoML: SageMaker Autopilot を内部利用
  • モデル共有: Studio のMLエンジニアとモデル共有可能
  • Bedrock統合: 生成AIモデルもCanvas から利用可能

SageMaker Training コンテナ詳細

組み込みコンテナ vs カスタムコンテナ

コンテナ選択フロー
  ┌──────────────────────────────────────────┐
  │  SageMaker 組み込みアルゴリズム使用?      │
  └──────────────────┬───────────────────────┘
                     │
           ┌─────────┴─────────┐
           ↓ YES               ↓ NO
  ┌─────────────────┐  ┌───────────────────────┐
  │  組み込みコンテナ│  │  フレームワーク有り?   │
  │  XGBoost/Linear │  └───────────┬───────────┘
  │  Regression/etc │              │
  └─────────────────┘    ┌─────────┴─────────┐
                         ↓ YES               ↓ NO
               ┌─────────────────┐  ┌─────────────────┐
               │  フレームワーク  │  │  カスタムコンテナ│
               │  コンテナ       │  │  (完全独自実装)│
               │  TF/PyTorch/SKL │  └─────────────────┘
               └─────────────────┘

カスタムコンテナ作成手順

# Dockerfile
FROM python:3.9-slim

# SageMaker Training Toolkit インストール
RUN pip install sagemaker-training

# 依存関係インストール
COPY requirements.txt .
RUN pip install -r requirements.txt

# トレーニングスクリプトコピー
COPY train.py /opt/ml/code/train.py

# SageMaker が呼び出すエントリポイント
ENV SAGEMAKER_PROGRAM train.py
# ECRへのプッシュ
ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)
REGION="us-east-1"
IMAGE_NAME="my-training-container"

# ECR リポジトリ作成
aws ecr create-repository --repository-name $IMAGE_NAME --region $REGION

# ログイン
aws ecr get-login-password --region $REGION | \
  docker login --username AWS --password-stdin \
  ${ACCOUNT_ID}.dkr.ecr.${REGION}.amazonaws.com

# ビルドとプッシュ
docker build -t ${IMAGE_NAME} .
docker tag ${IMAGE_NAME}:latest \
  ${ACCOUNT_ID}.dkr.ecr.${REGION}.amazonaws.com/${IMAGE_NAME}:latest
docker push ${ACCOUNT_ID}.dkr.ecr.${REGION}.amazonaws.com/${IMAGE_NAME}:latest
# カスタムコンテナでのEstimator作成
from sagemaker.estimator import Estimator

estimator = Estimator(
    image_uri=f'{account_id}.dkr.ecr.{region}.amazonaws.com/my-training-container:latest',
    role=role,
    instance_count=1,
    instance_type='ml.m5.xlarge',
    hyperparameters={
        'learning-rate': 0.001,
        'epochs': 50
    }
)
estimator.fit({'train': 's3://my-bucket/data/train/'})

MLflow と SageMaker 統合

SageMaker MLflow Tracking

import mlflow
import mlflow.sklearn
import boto3
import sagemaker

# SageMaker MLflow Tracking URI 設定
mlflow.set_tracking_uri('arn:aws:sagemaker:us-east-1:123456789:mlflow-tracking-server/my-server')

# 実験の記録
with mlflow.start_run(run_name='xgboost-experiment-v1'):
    # パラメータ記録
    mlflow.log_param('n_estimators', 100)
    mlflow.log_param('max_depth', 5)
    mlflow.log_param('learning_rate', 0.1)
    
    # モデルトレーニング
    model = XGBClassifier(n_estimators=100, max_depth=5, learning_rate=0.1)
    model.fit(X_train, y_train)
    
    # メトリクス記録
    accuracy = model.score(X_test, y_test)
    mlflow.log_metric('accuracy', accuracy)
    mlflow.log_metric('auc', roc_auc_score(y_test, model.predict_proba(X_test)[:, 1]))
    
    # モデル保存
    mlflow.sklearn.log_model(model, 'xgboost-model')
    
    # アーティファクト保存(特徴量重要度グラフなど)
    mlflow.log_artifact('feature_importance.png')

# SageMaker Model Registry への登録
mlflow.register_model(
    model_uri=f'runs:/{run_id}/xgboost-model',
    name='fraud-detection-model'
)

コスト最適化のベストプラクティス

SageMaker コスト最適化戦略

コスト削減チェックリスト
┌────────────────────────────────────────────────────────┐
│  トレーニング                                           │
│  ✓ Managed Spot Training (最大90%削減)                 │
│  ✓ 適切なインスタンスタイプ選択                          │
│  ✓ 早期停止(Early Stopping)設定                       │
│  ✓ SageMaker Experiments でムダな実験削減               │
├────────────────────────────────────────────────────────┤
│  推論エンドポイント                                      │
│  ✓ Auto Scaling でアイドル時はスケールイン               │
│  ✓ Serverless Inference(低頻度リクエスト)             │
│  ✓ Multi-Model Endpoint(モデル統合)                   │
│  ✓ Graviton ベースインスタンス(ml.c7g)               │
│  ✓ 不要エンドポイントの自動削除(Lambda+EventBridge)   │
├────────────────────────────────────────────────────────┤
│  開発/実験環境                                          │
│  ✓ Studio JupyterServer の自動シャットダウン設定        │
│  ✓ 小さいインスタンスでプロトタイプ → 大きいで本番      │
│  ✓ SageMaker Savings Plans の活用                      │
└────────────────────────────────────────────────────────┘

コスト計算例

# Spot Training vs On-Demand 比較
# ml.p3.2xlarge(GPU): On-Demand $3.825/時間
# Spot 価格: 約$1.15/時間(約70%割引)

# 1000時間のトレーニングの場合
on_demand_cost = 1000 * 3.825   # $3,825
spot_cost = 1000 * 1.15         # $1,150 (約70%削減)
savings = on_demand_cost - spot_cost  # $2,675 削減

# Serverless vs Realtime Endpoint 比較
# リクエスト数: 月10,000回、各1秒
# Realtime (ml.m5.large): $0.134/時間 × 720時間 = $96.5/月(常時稼働)
# Serverless: $0.0000021/GB-second × 2GB × 1秒 × 10000回 = $0.042/月

試験に出る重要な数値・制限

SageMaker 主要制限値

項目 制限値 備考
リアルタイム推論 ペイロード 最大 6 MB それ以上は非同期推論
サーバーレス推論 ペイロード 最大 4 MB
非同期推論 ペイロード 最大 1 GB
非同期推論 処理時間 最大 15 分 60分まで延長可能
リアルタイム推論 タイムアウト 最大 60 秒 デフォルト
Spot Training max_wait max_run より大きく 推奨: max_run × 2
HPO 最大並列ジョブ数 最大 10
HPO 最大ジョブ数 最大 500
Feature Store Online Store TTL 設定可能 デフォルト: 永続
Autopilot 最大候補数 250
Ground Truth ラベリング 1ジョブ最大 500,000 件
SageMaker Batch Transform 最大インスタンス数: 1000

Bedrock 主要制限値

項目 備考
Knowledge Base チャンクサイズ デフォルト 300 トークン 調整可能
Agents タイムアウト 最大 30 秒/ターン
Fine-tuning 最小データ量 モデル依存 一般的に1,000件以上推奨
Provisioned Throughput 最小コミット 1ヶ月

実践シナリオ問題集

シナリオ1: 不正検出システムの構築

要件:

  • リアルタイムの取引データに対して不正検出
  • 月間1億件の取引
  • 99.9%の可用性が必要
  • モデルの精度劣化を早期検知

推奨アーキテクチャ:

取引API → Kinesis Data Streams
    → Lambda(前処理)
    → SageMaker リアルタイムエンドポイント
        → 予測結果 → DynamoDB(記録)
        → 不正フラグ → SNS → アラート

Model Monitor(hourly)
    → DataCapture → S3
    → 異常検知 → CloudWatch Alarm
    → → Retraining Pipeline トリガー

選択理由:

  • リアルタイムエンドポイント: 低レイテンシ(ミリ秒)要件
  • Multi-AZ デプロイ: 99.9%可用性
  • Auto Scaling: 1億件/月のトラフィック変動対応
  • Model Monitor: 精度劣化の自動検知

シナリオ2: 医療画像診断支援システム

要件:

  • X線画像から異常を検出
  • 高精度モデルが必要(FN最小化)
  • 処理時間は数時間以内で可
  • HIPAA コンプライアンス準拠

推奨アーキテクチャ:

S3(暗号化)→ SageMaker 非同期推論エンドポイント
    → 画像前処理(Lambda)
    → 診断支援モデル
    → 結果 → S3(暗号化)→ 医師向けシステム

トレーニング:
Ground Truth(医師によるラベリング)
    → SageMaker Training(VPC内、KMS暗号化)
    → Model Registry(承認フロー有り)
    → SageMaker Pipelines(再トレーニング自動化)

選択理由:

  • 非同期推論: 大きい画像ファイル、即時応答不要
  • VPC + KMS: HIPAA 準拠のデータ保護
  • Ground Truth: 医師によるラベリングの管理
  • 承認フロー: 医療システムの安全デプロイ

シナリオ3: ECサイトの商品推薦システム

要件:

  • ユーザーごとのパーソナライズ推薦
  • リアルタイムの行動データを反映
  • 1000万ユーザー対応
  • A/Bテストで効果検証

推奨アーキテクチャ:

ユーザー行動 → Kinesis → Lambda
    → Amazon Personalize(リアルタイム推薦)
    → CloudFront キャッシュ
    → Webサイト

または高度なカスタマイズ版:
ユーザー行動 → Feature Store(online)
    → SageMaker エンドポイント(A/Bテスト設定)
        → Model A(90%トラフィック)
        → Model B(10%トラフィック)
    → CloudWatch で効果測定
    → 優れた方に徐々に移行

選択理由:

  • Personalize: 行動ベースの推薦をマネージドで実現
  • Feature Store: リアルタイム特徴量の一元管理
  • A/Bテスト: ProductionVariant でトラフィック分割
  • CloudFront: 推薦結果のキャッシュでレイテンシ削減

最終模擬試験(MLA-C01)第3セット 20問

Q1. SageMaker Training で「チェックポイント」が必要な理由は?

  • A) モデルの精度向上
  • B) スポットインスタンス中断後の再開と長時間トレーニングの安全性確保
  • C) 推論速度の改善
  • D) ハイパーパラメータの自動調整

正解: B - チェックポイントにより、スポットインスタンス中断後でも学習を最初からやり直さずに再開でき、長時間トレーニングの途中経過も保護されます。


Q2. Amazon Bedrock で「モデルをカスタマイズ」する主な2つの方法は?

  • A) Fine-tuning と RAG
  • B) 継続的事前学習(Continued Pre-training)と Fine-tuning(指示チューニング)
  • C) Transfer Learning とZero-shot Learning
  • D) LoRA と Adapter

正解: B - 継続的事前学習はドメイン特化テキストで基盤知識を更新し、Fine-tuning(指示チューニング)は入出力ペアで特定タスクへの応答を強化します。


Q3. SageMaker Pipelines でモデル評価の結果をパイプライン内で使用するには?

  • A) S3から手動で読み込む
  • B) PropertyFile と JsonGet を使ってステップの出力からメトリクスを参照
  • C) 環境変数として受け渡す
  • D) SSM Parameter Store を使用

正解: B - PropertyFileでJSON形式の評価結果を定義し、JsonGetConditionStepの条件式からメトリクス値を動的に参照できます。


Q4. SageMaker Feature Store でオンラインとオフラインが「不整合」になる可能性がある理由は?

  • A) バグによる不整合
  • B) Online StoreはリアルタイムでDynamoDB更新、Offline Storeへの同期には数分の遅延がある
  • C) Offline Storeは手動更新のみ
  • D) 不整合は発生しない

正解: B - Online Storeへの書き込みは即時ですが、Offline Store(S3)への同期には通常数分の遅延があります。リアルタイム推論にはOnline Store、バッチMLにはOffline Storeという使い分けが重要です。


Q5. Amazon Comprehend の「カスタムエンティティ認識」と「組み込みエンティティ認識」の違いは?

  • A) 違いはない
  • B) 組み込みは人名/組織/場所などの汎用エンティティ、カスタムは独自のエンティティタイプ(製品コード、医療用語等)
  • C) カスタムの方が常に精度が高い
  • D) 組み込みのみが英語対応

正解: B - 組み込みエンティティはPERSON, ORGANIZATION, LOCATION, DATE等の汎用タイプを検出。カスタムは独自データでトレーニングしたドメイン固有エンティティ(例: 製品コード「ABC-1234」)を検出できます。


Q6. SageMaker Debugger のフック(Hook)とルール(Rule)の関係は?

  • A) 独立した機能
  • B) フックがトレーニング中のテンソルデータを収集し、ルールがそのデータを分析して問題を検出
  • C) ルールがデータ収集し、フックが分析
  • D) どちらも同じ機能

正解: B - フック(Hook)はトレーニングループに挿入されトレーニング中の重みや勾配などのテンソルをS3に保存します。ルール(Rule)はそのデータを継続的に分析し、勾配消失・発散などの問題を検出します。


Q7. SageMaker で「コンテナイメージのバージョン管理」のベストプラクティスは?

  • A) 常にlatestタグを使用
  • B) バージョン付きタグを使用し、ECRのイメージスキャンを有効化
  • C) タグなしで使用
  • D) ローカルでのみ管理

正解: B - latestタグは変更されるため、v1.0.0のような固定バージョンタグを使用してトレーニングの再現性を確保します。ECRイメージスキャンで脆弱性も検出できます。


Q8. SageMaker Processing Job でデータ分割(前処理)を行う際の推奨構成は?

  • A) Lambda関数のみで実装
  • B) SKLearnProcessorまたはSparkMLProcessorでS3のデータを処理し、出力をS3へ
  • C) EC2インスタンスで実行
  • D) Glue ETLのみで対応

正解: B - SageMaker Processing Job はスケーラブルなデータ前処理のためのマネージドサービスです。Scikit-learnならSKLearnProcessor、大規模データならSparkMLProcessorを使用します。


Q9. Amazon Forecast の「Related Time Series」データとは?

  • A) 予測対象データ
  • B) 予測に影響する外部変数(天気/プロモーション/祝日など)
  • C) 過去の予測結果
  • D) テストデータ

正解: B - Related Time Series(関連時系列)は予測精度を向上させる外部変数です。例えば天気データ(気温/降水量)、プロモーション情報、価格変動などを予測モデルに組み込めます。


Q10. SageMaker Model Monitor でカスタム制約を定義する場面は?

  • A) デフォルト制約で十分なため不要
  • B) ビジネスルールに基づいた独自の品質基準(例: 特定カラムがnullでないこと)
  • C) モデル精度のみを監視したい場合
  • D) パフォーマンステストのため

正解: B - カスタム制約(Custom Constraints)でビジネス固有のデータ品質ルールを定義できます。例: age > 0, income_range must be [‘low’, ‘medium’, ‘high’] など。


Q11. SageMaker で「継続的デプロイ(Continuous Deployment)」を実現するには?

  • A) 手動でのみ可能
  • B) CodePipeline + SageMaker Pipelines + Model Registryの承認フローを組み合わせ
  • C) Lambda関数のみで実装
  • D) CloudFormationのみで対応

正解: B - MLのCD(継続的デプロイ)は、①CodeCommitへのコードPush → ②CodePipeline起動 → ③SageMaker Pipelines実行(前処理→トレーニング→評価)→ ④Model Registryへ登録 → ⑤承認後に自動デプロイ、というフローで実現します。


Q12. Bedrock Agents で「Action Groups」の役割は?

  • A) モデルのバージョン管理
  • B) エージェントが呼び出せるLambda関数のセット(外部API/DBとの連携機能を定義)
  • C) ユーザー認証機能
  • D) モデルの微調整

正解: B - Action Groupsは、エージェントがタスク実行のために呼び出せるツール(Lambda関数)を定義します。例: データベース検索、メール送信、APIコールなど。OpenAPI仕様で関数のスキーマを定義します。


Q13. SageMaker で「推論パイプライン(Inference Pipeline)」を使用する理由は?

  • A) 複数モデルを直列に繋ぎ、前処理→推論→後処理をワンステップで実行
  • B) 複数エンドポイントの負荷分散
  • C) モデルの並列実行
  • D) コスト削減のため

正解: A - 推論パイプラインはデータ前処理コンテナ → MLモデルコンテナ → 後処理コンテナを直列に繋ぎ、単一エンドポイントとして公開します。前処理ロジックをモデルと一緒にデプロイできます。


Q14. Amazon Personalize でリアルタイムにユーザー行動を反映させるには?

  • A) バッチ処理で日次更新
  • B) PutEvents API でリアルタイムに行動イベントを記録
  • C) S3からCSVで更新
  • D) Kinesis経由でのみ可能

正解: B - PutEvents API を使うことで、ユーザーのクリック/購入/評価などのイベントをリアルタイムに記録し、次の推薦にすぐ反映できます。


Q15. SageMaker Studio でノートブックのコンピューティングリソースを制御するには?

  • A) 固定インスタンスのみ
  • B) カーネルゲートウェイアプリのインスタンスタイプを選択(ml.t3.medium 〜 ml.p4d.24xlarge)
  • C) Auto Scalingグループで設定
  • D) Lambda関数で制御

正解: B - SageMaker Studio では、ノートブックカーネル起動時にインスタンスタイプ(CPU/GPU/メモリ)を選択できます。重い処理ではml.g4dn.xlargeなどGPUインスタンスに切り替え、完了後は軽量インスタンスに戻してコスト最適化します。


Q16. SageMaker でモデルのカーディナリティが高い(1万以上)カテゴリ変数の特徴量エンジニアリング手法は?

  • A) One-Hot Encodingのみ
  • B) Target Encoding(ターゲットエンコーディング)またはEmbedding
  • C) Label Encodingのみ
  • D) 変数を削除

正解: B - カーディナリティが高い場合、One-Hot Encodingは次元爆発を起こします。Target Encoding(カテゴリ値を目的変数の平均値で置換)またはNeural NetworkのEmbedding層が有効です。Data Wranglerでも対応可能です。


Q17. ML実験の再現性(Reproducibility)を確保するための重要な要素は?

  • A) 常に同じデータを使用すれば十分
  • B) データバージョン管理、コードバージョン管理(Git)、環境固定(コンテナ)、乱数シード固定
  • C) 同じインスタンスタイプで実行
  • D) SageMaker Experimentsのみで対応

正解: B - 再現性には①データのバージョン管理(S3バージョニング)②コードのGit管理③環境の固定(Dockerコンテナ)④乱数シード固定(random_state=42)⑤SageMaker Experimentsによるメタデータ記録、のすべてが必要です。


Q18. SageMaker Batch Transform と SageMaker Processing Job の違いは?

  • A) 同じ機能
  • B) Batch Transformはモデル推論用、Processing Jobは前処理/後処理/評価用
  • C) Processing Jobの方が高速
  • D) Batch Transformはリアルタイムのみ

正解: B - Batch TransformはデプロイしたMLモデルで大量データに対して一括推論を実行するサービス。Processing Jobはデータ前処理、特徴量エンジニアリング、モデル評価などの汎用的な処理実行環境です。


Q19. Amazon Lookout for Vision の主なユースケースは?

  • A) テキスト分析
  • B) 製造ラインでの製品外観検査、傷・欠陥・歪みの自動検出
  • C) 時系列異常検知
  • D) 音声認識

正解: B - Lookout for Visionは製造業の品質管理に特化したコンピュータビジョンサービスです。少量の正常品画像(通常30枚程度)でモデルを学習し、生産ラインでリアルタイムに欠陥を検出します。


Q20. SageMaker Pipeline の「パイプラインパラメータ」と「ステップのプロパティ」の違いは?

  • A) 同じもの
  • B) パイプラインパラメータは実行前に定義する変数、ステップのプロパティは実行中に動的に生成される値(前ステップの出力URIなど)
  • C) パラメータはコード内のみ、プロパティはCloudFormationで設定
  • D) プロパティは変更不可

正解: B - パイプラインパラメータ(ParameterString等)はパイプライン定義時に宣言し実行時にオーバーライド可能な変数。ステップのプロパティ(.properties.ModelArtifacts.S3ModelArtifacts等)は前のステップが実際に実行されて生成される動的な値で、後続ステップで参照できます。


MLA-C01 第3セット完了


付録: 重要CLIコマンド集(SageMaker)

# Training Job の作成と監視
aws sagemaker create-training-job \
  --training-job-name my-job-$(date +%s) \
  --algorithm-specification \
    TrainingImage=763104351884.dkr.ecr.us-east-1.amazonaws.com/xgboost:1 \
    TrainingInputMode=File \
  --role-arn arn:aws:iam::123456789:role/SageMakerRole \
  --input-data-config \
    '[{"ChannelName":"train","DataSource":{"S3DataSource":{"S3Uri":"s3://bucket/data","S3DataType":"S3Prefix"}}}]' \
  --output-data-config S3OutputPath=s3://bucket/output \
  --resource-config InstanceType=ml.m5.xlarge,InstanceCount=1,VolumeSizeInGB=30 \
  --stopping-condition MaxRuntimeInSeconds=3600

# トレーニング状態確認
aws sagemaker describe-training-job \
  --training-job-name my-job-123 \
  --query 'TrainingJobStatus'

# エンドポイント一覧
aws sagemaker list-endpoints \
  --status-equals InService \
  --query 'Endpoints[*].[EndpointName,CreationTime]' \
  --output table

# 推論テスト
aws sagemaker-runtime invoke-endpoint \
  --endpoint-name my-endpoint \
  --content-type 'text/csv' \
  --body '1.5,2.3,0.8,1.2' \
  --accept 'application/json' \
  /tmp/result.json

# Pipeline 実行
aws sagemaker start-pipeline-execution \
  --pipeline-name MyMLPipeline \
  --pipeline-execution-display-name 'run-2024-01' \
  --pipeline-parameters \
    '[{"Name":"ModelApprovalStatus","Value":"Approved"}]'

# Model Registry のモデル承認
aws sagemaker update-model-package \
  --model-package-arn arn:aws:sagemaker:us-east-1:123:model-package/my-model/1 \
  --model-approval-status Approved

MLA-C01 機械学習エンジニアアソシエイト 完全ガイド 全セクション完了


SageMaker JumpStart 詳細ガイド

JumpStart で利用可能なモデルカテゴリ

JumpStart モデルカタログ
┌────────────────────────────────────────────────────────┐
│  テキスト・言語モデル                                   │
│  ・BERT (bert-base-uncased, bert-large-cased)          │
│  ・RoBERTa, ALBERT, DistilBERT                        │
│  ・GPT-J, GPT-NeoX, Falcon, Llama 2                  │
│  ・Hugging Face Hub 全モデル(数千種類)               │
├────────────────────────────────────────────────────────┤
│  コンピュータビジョンモデル                             │
│  ・ResNet (18/34/50/101/152)                          │
│  ・EfficientNet, MobileNet                            │
│  ・YOLO v8 (物体検出)                                 │
│  ・Stable Diffusion (画像生成)                        │
├────────────────────────────────────────────────────────┤
│  テーブルデータモデル                                   │
│  ・CatBoost, LightGBM, XGBoost                       │
│  ・AutoGluon (AutoML)                                 │
└────────────────────────────────────────────────────────┘

JumpStart Fine-tuning 実装

from sagemaker.jumpstart.estimator import JumpStartEstimator
from sagemaker.jumpstart.model import JumpStartModel

# ステップ1: Fine-tuning(独自データで学習)
estimator = JumpStartEstimator(
    model_id='huggingface-text2text-flan-t5-xl',
    model_version='*',  # 最新版
    role=role,
    instance_type='ml.g5.2xlarge',
    
    # Fine-tuning パラメータ
    hyperparameters={
        'instruction_tuned': 'False',
        'num_train_epochs': '3',
        'per_device_train_batch_size': '4',
        'max_input_length': '512',
    }
)

# データはS3のjsonlines形式
# {"input": "...", "output": "..."}
estimator.fit({'training': 's3://bucket/finetune-data/'})

# ステップ2: Fine-tuned モデルのデプロイ
predictor = estimator.deploy(
    initial_instance_count=1,
    instance_type='ml.g5.2xlarge'
)

# 推論
response = predictor.predict({
    'inputs': 'AWS SageMakerとは何ですか?日本語で説明してください。',
    'parameters': {
        'max_new_tokens': 256,
        'temperature': 0.7,
        'top_p': 0.9
    }
})
print(response[0]['generated_text'])

SageMaker Ground Truth 詳細

ラベリングジョブタイプ

ジョブタイプ 用途 形式
画像分類 画像を1つのカテゴリに分類 シングルラベル/マルチラベル
物体検出 画像内の物体をバウンディングボックスで囲む JSON形式
セマンティックセグメンテーション ピクセルレベルのクラス分類 マスク画像
テキスト分類 テキストをカテゴリに分類 シングル/マルチラベル
名前付きエンティティ認識(NER) テキスト内のエンティティを識別 IOBタグ形式
3D点群(Point Cloud) 3Dオブジェクト検出/セグメンテーション 自動運転等
カスタム 独自のラベリングUI HTML/JavaScript

Auto Labeling 詳細フロー

Auto Labeling フロー
  ┌───────────────────────────────────────────┐
  │  第1バッチ(例: 300件)                    │
  │  → 人間がラベリング                        │
  │  → このデータで機械学習モデルを学習         │
  └─────────────────┬─────────────────────────┘
                    ↓
  ┌───────────────────────────────────────────┐
  │  残りのデータに自動ラベリング試行           │
  │  ・信頼度 > 閾値 → 自動ラベル(コスト0)  │
  │  ・信頼度 < 閾値 → 人間にルーティング      │
  └─────────────────┬─────────────────────────┘
                    ↓
  ┌───────────────────────────────────────────┐
  │  人間ラベリング分で追加学習                 │
  │  → 精度向上 → より多くを自動化            │
  └───────────────────────────────────────────┘

  最終的に約70-80%を自動ラベリングで処理
import boto3

sm_client = boto3.client('sagemaker')

# Ground Truth ラベリングジョブ作成
response = sm_client.create_labeling_job(
    LabelingJobName='product-classification-v1',
    LabelAttributeName='product-category',
    
    # 入力データ(S3にあるJSONLines形式のマニフェスト)
    InputConfig={
        'DataSource': {
            'S3DataSource': {
                'ManifestS3Uri': 's3://bucket/input/manifest.jsonl'
            }
        }
    },
    
    # 出力先
    OutputConfig={
        'S3OutputPath': 's3://bucket/output/',
        'KmsKeyId': 'arn:aws:kms:us-east-1:123:key/key-id'
    },
    
    # IAMロール
    RoleArn=role,
    
    # ラベルカテゴリ(S3に保存)
    LabelCategoryConfigS3Uri='s3://bucket/config/categories.json',
    
    # アルゴリズムの設定(自動ラベリング使用)
    LabelingJobAlgorithmsConfig={
        'LabelingJobAlgorithmSpecificationArn': \
            'arn:aws:sagemaker:us-east-1:027400017018:labeling-job-algorithm-specification/image-classification',
        'InitialActiveLearningModelArn': '',  # 空で最初から学習
        'LabelingJobResourceConfig': {
            'VolumeKmsKeyId': ''
        }
    },
    
    # 人間のワークフロー設定
    HumanTaskConfig={
        'WorkteamArn': 'arn:aws:sagemaker:us-east-1:123:workteam/private-crowd/my-team',
        'UiConfig': {
            'UiTemplateS3Uri': 's3://bucket/ui/template.html'
        },
        'PreHumanTaskLambdaArn': \
            'arn:aws:lambda:us-east-1:432418664414:function:PRE-ImageMultiClass',
        'TaskTitle': '商品カテゴリ分類',
        'TaskDescription': '画像を適切なカテゴリに分類してください',
        'NumberOfHumanWorkersPerDataObject': 3,  # 3人の多数決
        'TaskTimeLimitInSeconds': 300,
        'AnnotationConsolidationConfig': {
            'AnnotationConsolidationLambdaArn': \
                'arn:aws:lambda:us-east-1:432418664414:function:ACS-ImageMultiClass'
        }
    }
)

Amazon Kendra ML検索エンジン

Kendra vs Bedrock Knowledge Base 比較

機能 Amazon Kendra Bedrock Knowledge Base
検索タイプ インテリジェント検索(意味理解) ベクトル検索(RAG)
ドキュメント形式 PDF/Word/HTML/S3/SharePoint/Salesforce等 PDF/テキスト(S3)
専門性 エンタープライズ文書検索 LLMとの統合RAG
出力 検索結果リスト(抜粋付き) LLMによる自然言語回答
コスト 月$700〜(Developer edition) 使用量ベース
セットアップ コネクタ設定(SharePoint等) S3 + ベクトルDB設定

SageMaker Domain とユーザープロファイル

SageMaker Domain の概念

SageMaker Domain 構成
┌────────────────────────────────────────────────────────┐
│  Domain(組織単位)                                     │
│  ┌──────────────────────────────────────────────────┐  │
│  │  VPC設定、EFS(共有ストレージ)、タグ、権限        │  │
│  └──────────────────────────────────────────────────┘  │
│                          │                             │
│      ┌───────────────────┼───────────────────┐         │
│      ↓                   ↓                   ↓         │
│  UserProfile A       UserProfile B       UserProfile C  │
│  (データサイエンティスト)(MLエンジニア)(管理者)       │
│  └ Studio 環境        └ Studio 環境       └ 管理のみ    │
│    個別の IAM 設定      個別の IAM 設定                  │
│    個別の EFS スペース  個別の EFS スペース              │
└────────────────────────────────────────────────────────┘

Domain 作成のベストプラクティス

import boto3

sm_client = boto3.client('sagemaker')

# SageMaker Domain 作成
response = sm_client.create_domain(
    DomainName='ml-production-domain',
    AuthMode='IAM',  # または 'SSO'(AWS IAM Identity Center)
    
    DefaultUserSettings={
        'ExecutionRole': 'arn:aws:iam::123456789:role/SageMakerStudioRole',
        
        # JupyterServerアプリの設定
        'JupyterServerAppSettings': {
            'DefaultResourceSpec': {
                'InstanceType': 'system',
                'SageMakerImageArn': 'arn:aws:sagemaker:us-east-1:081325390199:image/jupyter-server-3'
            }
        },
        
        # カーネルゲートウェイの設定
        'KernelGatewayAppSettings': {
            'DefaultResourceSpec': {
                'InstanceType': 'ml.t3.medium',
                'SageMakerImageArn': 'arn:aws:sagemaker:us-east-1:081325390199:image/datascience-1.0'
            },
            # 使用可能なインスタンスタイプを制限(コスト管理)
            'CustomImages': []
        },
        
        # Studio 内のコード実行をVPC内に限定
        'SecurityGroups': ['sg-0123456789abcdef0'],
    },
    
    # VPC設定(推奨: VPCOnly モード)
    VpcId='vpc-0123456789abcdef0',
    SubnetIds=['subnet-0123456789abcdef0'],
    AppNetworkAccessType='VpcOnly',  # インターネットアクセス禁止
    
    # EFS(ホームディレクトリ)の暗号化
    HomeEfsFileSystemKmsKeyId='arn:aws:kms:us-east-1:123456789012:key/key-id'
)

SageMaker Clarify 詳細実装

バイアス分析の完全実装

from sagemaker.clarify import (
    SageMakerClarifyProcessor, BiasConfig, 
    DataConfig, ModelConfig, ModelPredictedLabelConfig
)

# Clarify プロセッサ
clarify_processor = SageMakerClarifyProcessor(
    role=role,
    instance_count=1,
    instance_type='ml.m5.xlarge',
    sagemaker_session=session
)

# データ設定
data_config = DataConfig(
    s3_data_input_path='s3://bucket/test-data.csv',
    s3_output_path='s3://bucket/clarify-output/',
    label='income',           # 目的変数
    headers=['age', 'education', 'gender', 'income'],
    dataset_type='text/csv'
)

# バイアス設定(保護属性の定義)
bias_config = BiasConfig(
    label_values_or_threshold=[1],   # 有利な結果(income >= 50K)
    facet_name='gender',             # 保護属性(性別)
    facet_values_or_threshold=[0]    # 不利なグループ(例: 女性=0)
)

# モデル設定
model_config = ModelConfig(
    model_name='income-prediction-model',
    instance_type='ml.m5.xlarge',
    instance_count=1,
    accept_type='text/csv'
)

model_predictions_config = ModelPredictedLabelConfig(
    probability_threshold=0.5
)

# バイアス分析実行(Pre-training + Post-training)
clarify_processor.run_bias(
    data_config=data_config,
    bias_config=bias_config,
    model_config=model_config,
    model_predicted_label_config=model_predictions_config,
    pre_training_methods='all',   # CI, DPL, KL, KS, etc.
    post_training_methods='all'   # DPPL, DI, DCO, RD, DAR, etc.
)

# 説明可能性分析(SHAP値)
from sagemaker.clarify import SHAPConfig

shap_config = SHAPConfig(
    baseline=[
        [33, 'Bachelors', 'Male', 0]  # ベースライン(平均的な個人)
    ],
    num_samples=1000,    # モンテカルロサンプリング数
    agg_method='mean_abs',  # 集約方法
    save_local_shap_values=True  # 個別SHAP値も保存
)

clarify_processor.run_explainability(
    data_config=data_config,
    model_config=model_config,
    explainability_config=shap_config
)

主要バイアスメトリクス一覧

メトリクス 略称 説明
Class Imbalance CI データ内のグループ比率の差
Difference in Positive Proportions DPL 正例割合の差
Kullback-Leibler Divergence KL 分布の類似度
Disparate Impact DI グループ間の予測割合比
Difference in Conditional Acceptance DCA 条件付き受容率の差
Recall Difference RD グループ間の再現率の差
Accuracy Difference AD グループ間の精度の差

模擬試験 総合問題(MLA-C01)第4セット 20問

Q1. SageMaker JumpStart でFine-tuningを行う主な利点は?

  • A) モデルをゼロから構築するより高速かつ少ないデータで高精度モデルを構築
  • B) コストがゼロ
  • C) カスタムコンテナが不要になる
  • D) 自動的にエンドポイントがデプロイされる

正解: A - Transfer Learningを活用したFine-tuningにより、少量のドメイン特化データで事前学習済みモデルを自社タスクに適応させられます。ゼロから学習するより高速で精度も高くなります。


Q2. SageMaker Ground Truth の「ワークチーム」の種類は?

  • A) Public(Amazon Mechanical Turk)、Private(社内チーム)、Vendor(認定ベンダー)
  • B) Public のみ
  • C) Private のみ
  • D) AIのみ

正解: A - Ground Truthは3種類のワークチームをサポート:①Amazon Mechanical Turk(パブリッククラウドワーカー、コスト低)②プライベートチーム(自社従業員、セキュリティ高)③認定ベンダー(専門ラベリング会社、品質高)


Q3. SageMaker Domain でユーザーごとのコスト管理を実施するには?

  • A) 全ユーザーに同じ設定
  • B) UserProfile ごとに異なるIAMロールとインスタンスタイプ制限を設定
  • C) CloudTrailのみで監視
  • D) Lambda で制限

正解: B - 各UserProfileに個別のIAMロール(リソース制限含む)を割り当て、使用可能なインスタンスタイプをKernelGatewayAppSettingsで制限することでコスト管理できます。


Q4. Amazon Comprehend Medical が検出できる特殊な情報は?

  • A) 一般的なテキストエンティティのみ
  • B) PHI(Protected Health Information): 患者名/診断結果/投薬情報/医療コード等
  • C) 財務情報のみ
  • D) 画像情報

正解: B - Comprehend Medicalは医療ドメイン特化で、PHI(保護医療情報)の自動識別、ICD-10コードへのマッピング、Rx Normによる薬剤正規化などが可能です。HIPAA対応。


Q5. SageMaker Clarify の「説明可能性レポート」で確認できるSHAP値の意味は?

  • A) モデルの全体精度
  • B) 各特徴量が特定の予測にどの程度寄与したか(正: 予測を増加、負: 減少させる)
  • C) 特徴量の相関係数
  • D) モデルのパラメータ数

正解: B - SHAP値はゲーム理論に基づく特徴量重要度で、各特徴量が個々の予測にどれだけ貢献しているかを数値化します。正の値は予測値を増加させ、負の値は減少させる方向への寄与を示します。


Q6. Amazon Forecast で「Probabilistic Forecasting(確率的予測)」を使う理由は?

  • A) 計算速度が速い
  • B) 単一の点推定値だけでなく、P10/P50/P90などの予測区間(不確実性)を提供
  • C) コストが安い
  • D) 必須の設定

正解: B - 確率的予測はP10(10%信頼区間の下限)、P50(中央値)、P90(90%信頼区間の上限)などの分位数予測を提供します。在庫管理ではP90で安全在庫を計算し、P50で期待値を計算するといった使い方ができます。


Q7. SageMaker でトレーニング中のメトリクスをリアルタイムで確認するには?

  • A) S3からのみ確認
  • B) CloudWatchメトリクスまたはSageMaker Experimentsコンソール
  • C) 完了後のみ確認可能
  • D) Lambda で収集が必要

正解: B - SageMaker Training JobはコンテナからのSTDOUTに出力されたメトリクス(正規表現でキャプチャ)をリアルタイムでCloudWatch Metricsに送信します。SageMaker Experimentsコンソールでもリアルタイム確認が可能です。


Q8. SageMaker の「推論コンテナ(Inference Container)」を作成する際のエントリポイント要件は?

  • A) 任意のスクリプト名
  • B) model_fn(モデルロード)、predict_fn(予測実行)、input_fn(入力変換)、output_fn(出力変換)の4関数
  • C) main.pyのみ
  • D) Dockerfileのみ

正解: B - SageMaker推論コンテナはサービングツールキットに従い4つの関数を実装します:model_fnでモデルをロード、input_fnでリクエストをデシリアライズ、predict_fnで予測実行、output_fnでレスポンスをシリアライズします。


Q9. Amazon Lookout for Metrics で「アラートのみ」ではなく「異常の根本原因」も特定できるのはなぜ?

  • A) 機械学習により関連するディメンションの組み合わせを分析
  • B) CloudWatchアラームとの違いはない
  • C) ログ分析機能がある
  • D) 人間が判断する

正解: A - Lookout for Metricsは単に閾値超過を検出するだけでなく、関連するディメンション(地域/製品/チャネル等)を分析して「東京リージョンのモバイルユーザーの注文がX%減少」といった根本原因の絞り込みを自動的に行います。


Q10. SageMaker Endpoint でのモデル更新中の「ゼロダウンタイム」を実現するメカニズムは?

  • A) Lambda で切り替え
  • B) SageMakerがBlue/Greenデプロイを管理し、新しいフリートが健全状態になるまでトラフィックを維持
  • C) Route 53で切り替え
  • D) CloudFrontで管理

正解: B - SageMakerのエンドポイント更新時、ブルー/グリーンデプロイでは新しいインスタンスフリートを起動し、全インスタンスがIn Service状態になった後でトラフィックを切り替えます。この間、旧フリートが引き続きトラフィックを処理します。


Q11. SageMaker Feature Store で「イベント時刻(event_time)」の役割は?

  • A) レコードの一意識別子
  • B) フィーチャーのバージョン管理のタイムスタンプ(同じrecord_idの最新値を取得するため)
  • C) アクセス時間の記録
  • D) ファイル名の一部

正解: B - event_timeにより同じレコードIDに対して時系列で複数のレコードを保存できます。Online StoreはRecord Identifierに対して最新のレコードのみ返します。point-in-time正確な特徴量取得にも使用されます。


Q12. MLモデルの「point-in-time correct」な特徴量とは?

  • A) 最新データを使用すること
  • B) 予測時点での情報のみを使用(未来のデータリークを防ぐ)
  • C) 整合性のとれたデータ
  • D) 欠損値がないデータ

正解: B - point-in-time correctは学習データ作成時に将来の情報を使わないことです。例えば2023年1月の購買予測モデルを作る際に2023年2月のデータを特徴量に使うとデータリークが発生します。Feature Storeのevent_timeを使うとpoint-in-time correctな特徴量取得が可能です。


Q13. SageMaker Pipelines の「実行のキャッシュ(Step Caching)」の効果は?

  • A) モデルの精度向上
  • B) 以前の実行と同じ入力のステップはスキップして実行時間とコストを削減
  • C) セキュリティの強化
  • D) デバッグの簡素化

正解: B - Step Cachingを有効にすると、同じ入力(データ、パラメータ、コード)のProcessingStepやTrainingStepの結果をキャッシュし、再実行時はスキップします。開発イテレーションのコスト削減に効果的です。


Q14. Amazon Bedrock の「ガードレール(Guardrails)」の主な機能は?

  • A) モデルのコスト管理
  • B) 有害コンテンツフィルタリング、PII保護、グラウンディング確認など安全性確保
  • C) レイテンシ改善
  • D) モデル選択の自動化

正解: B - Bedrockガードレールは:①有害コンテンツのブロック(ヘイトスピーチ/暴力等)②PII(個人情報)の検出とマスキング③テーマベースのコンテンツ制限(競合他社言及禁止等)④グラウンディング確認(RAGの回答がドキュメントに基づくか)など安全な生成AIアプリを実現します。


Q15. SageMaker でA/Bテスト後に「徐々に移行(Linear rollout)」を設定するには?

  • A) 手動でVariantWeightを毎日変更
  • B) update_endpoint_weights_and_capacities() で段階的にWeight比率を更新
  • C) 不可能
  • D) CloudFront で実装

正解: B - update_endpoint_weights_and_capacities()APIを使って、例えばModel Bのウェイトを10% → 30% → 50% → 100%と段階的に変更することでLinear rolloutを実現できます。CloudWatch Alarmsと組み合わせた自動化も可能です。


Q16. SageMaker Canvas で予測した結果はどこで確認・共有できるか?

  • A) S3のみ
  • B) Canvas内のUIで確認し、SageMaker Studioとモデル共有、または予測結果をS3/QuickSightにエクスポート
  • C) Lambda経由のみ
  • D) SageMaker Studio のみ

正解: B - Canvas内のUIでインタラクティブに予測結果を確認でき、MLエンジニアとSageMaker Studio上でモデルを共有して本番化を依頼することも可能。バッチ予測結果はS3にエクスポートし、QuickSightで可視化できます。


Q17. SageMaker Experiments のベストプラクティスとして、実験間で比較すべき情報は?

  • A) インスタンスタイプのみ
  • B) ハイパーパラメータ、評価メトリクス(AUC/精度等)、データセット、コードバージョン
  • C) コストのみ
  • D) 実行時間のみ

正解: B - 実験比較では全因子を記録する必要があります:①ハイパーパラメータ(learning_rate, max_depth等)②メトリクス(AUC, accuracy, F1等)③使用データセット④コードバージョン(Gitコミットハッシュ)。これにより再現性のある最良モデルを特定できます。


Q18. Amazon Personalize で「コールドスタート問題」を軽減するには?

  • A) 解決不可能
  • B) アイテムメタデータ(カテゴリ/タグ/説明)を活用したコンテンツベースフィルタリングの組み合わせ
  • C) 全ユーザーに同じ推薦
  • D) 手動キュレーション

正解: B - 新規ユーザー/アイテムの行動履歴がない「コールドスタート問題」には、アイテムのメタデータ(Item Interactions ではなく Items データセット)を活用します。Personalize のSIMS(Item-to-Item)レシピやaws-user-personalizationレシピのメタデータ統合機能が有効です。


Q19. SageMaker Training の「最大実行時間(MaxRuntimeInSeconds)」超過時の動作は?

  • A) 警告のみ
  • B) トレーニングジョブが自動停止(Stopped状態)になる
  • C) インスタンスが再起動
  • D) 一時停止して再開を待つ

正解: B - MaxRuntimeInSeconds を超えるとSageMakerは自動的にトレーニングジョブをStopします。長時間の意図しない実行によるコスト超過を防ぐための安全装置です。Spot Trainingのmax_runも同じです。


Q20. MLOps の成熟度レベル(MLOps Maturity Model)の正しい段階は?

  • A) Level 0 → 1 → 2
  • B) Level 0(手動) → Level 1(ML自動化) → Level 2(CI/CDパイプライン自動化)
  • C) Beginner → Intermediate → Advanced
  • D) Bronze → Silver → Gold

正解: B - Google/Amazonのベストプラクティスに基づくMLOps成熟度:Level 0(手動プロセス、Jupyterノートブック)→ Level 1(ML パイプライン自動化、Model Monitor)→ Level 2(完全なCI/CDパイプライン、コードPush → 自動テスト → 自動デプロイ)


MLA-C01 第4セット完了


付録B: SageMaker Python SDK チートシート

# よく使うimport
import sagemaker
from sagemaker import get_execution_role
from sagemaker.session import Session
from sagemaker.estimator import Estimator
from sagemaker.pytorch import PyTorch
from sagemaker.tensorflow import TensorFlow
from sagemaker.sklearn.estimator import SKLearn
from sagemaker.huggingface import HuggingFace
from sagemaker.xgboost import XGBoost
from sagemaker.inputs import TrainingInput
from sagemaker.model import Model
from sagemaker.predictor import Predictor
from sagemaker.serializers import CSVSerializer, JSONSerializer
from sagemaker.deserializers import CSVDeserializer, JSONDeserializer

# セッション初期化
session = sagemaker.Session()
role = get_execution_role()
bucket = session.default_bucket()
region = session.boto_region_name

# === Estimator パターン ===
# トレーニング
estimator = PyTorch(
    entry_point='train.py',
    source_dir='./src',        # ディレクトリ全体をアップロード
    role=role,
    instance_type='ml.p3.2xlarge',
    instance_count=1,
    framework_version='1.13',
    py_version='py39',
    hyperparameters={'epochs': 50, 'lr': 0.001},
    metric_definitions=[
        {'Name': 'train:loss', 'Regex': 'Loss: ([0-9\\.]+)'},
        {'Name': 'validation:accuracy', 'Regex': 'Accuracy: ([0-9\\.]+)'}
    ],
    enable_sagemaker_metrics=True
)
estimator.fit({'train': TrainingInput(s3_data='s3://bucket/train/', content_type='text/csv')})

# モデルのデプロイ
predictor = estimator.deploy(
    initial_instance_count=1,
    instance_type='ml.m5.large',
    serializer=JSONSerializer(),
    deserializer=JSONDeserializer()
)

# 推論
result = predictor.predict({'inputs': [1.0, 2.0, 3.0]})

# エンドポイント削除(重要: 費用発生を防ぐ)
predictor.delete_endpoint()

# === バッチ変換 ===
transformer = estimator.transformer(
    instance_count=1,
    instance_type='ml.m5.xlarge',
    output_path='s3://bucket/batch-output/'
)
transformer.transform(
    data='s3://bucket/batch-input/',
    content_type='text/csv',
    split_type='Line'  # 行ごとに分割
)
transformer.wait()

MLA-C01 機械学習エンジニアアソシエイト 完全ガイド 全セクション完了(総合版)


SageMaker 組み込みアルゴリズム完全リファレンス

教師あり学習アルゴリズム

アルゴリズム タスク 主なハイパーパラメータ 入力形式
Linear Learner 分類・回帰 predictor_type, num_models, l1/l2 recordIO/CSV
XGBoost 分類・回帰 max_depth, eta, num_round, subsample CSV/LibSVM
Factorization Machines 分類・回帰(スパース) num_factors, predictor_type recordIO
K-Nearest Neighbors (KNN) 分類・回帰 k, sample_size, predictor_type recordIO/CSV
DeepAR 時系列予測 context_length, prediction_length, num_layers JSON Lines
Object2Vec 埋め込み/分類 enc_dim, mlp_dim, optimizer JSON Lines

教師なし学習アルゴリズム

アルゴリズム タスク 主なハイパーパラメータ 入力形式
K-Means クラスタリング k, mini_batch_size, epochs recordIO/CSV
PCA 次元削減 algorithm_mode, num_components, subtract_mean recordIO/CSV
IP Insights 異常検知(IP/ユーザー) num_entity_vectors, vector_dim CSV
Random Cut Forest (RCF) 時系列異常検知 num_trees, num_samples_per_tree, feature_dim recordIO/CSV

NLP・テキスト処理アルゴリズム

アルゴリズム タスク 主なハイパーパラメータ 入力形式
BlazingText 単語埋め込み/テキスト分類 mode(Word2Vec/supervised), vector_dim テキスト
Sequence-to-Sequence (Seq2Seq) 機械翻訳/テキスト要約 batch_size, num_layers, num_embed JSON/recordIO
Neural Topic Model (NTM) トピックモデリング num_topics, encoder_layers recordIO/CSV
Latent Dirichlet Allocation (LDA) トピックモデリング num_topics, alpha0 recordIO/CSV

コンピュータビジョン アルゴリズム

アルゴリズム タスク 主なハイパーパラメータ 入力形式
Image Classification 画像分類 num_classes, use_pretrained_model, epochs recordIO/image
Object Detection 物体検出 num_classes, use_pretrained_model, base_network recordIO/image
Semantic Segmentation ピクセル分類 num_classes, use_pretrained_model, backbone recordIO/image

SageMaker アルゴリズム使い分けガイド

問題タイプ別アルゴリズム選択

問題: 「顧客が解約するか予測したい(バイナリ分類)」
  └── 特徴量が数値 → Linear Learner / XGBoost
  └── 特徴量がスパース(カテゴリ多数)→ Factorization Machines
  └── 自動特徴選択が必要 → SageMaker Autopilot

問題: 「将来の売上を予測したい(時系列予測)」
  └── 単一時系列 → DeepAR(短系列)/ Linear Learner(シンプル)
  └── 複数時系列 → DeepAR(最適)
  └── 外部変数あり → Amazon Forecast(Related Time Series)

問題: 「テキストを分類したい(文書分類)」
  └── シンプルな分類 → BlazingText(supervised mode)
  └── 高精度が必要 → JumpStart の BERT/RoBERTa Fine-tuning
  └── マルチラベル → Comprehend Custom Classifier

問題: 「異常を検知したい」
  └── 時系列 → Random Cut Forest (RCF)
  └── ネットワーク不正 → IP Insights
  └── メトリクス異常 → Lookout for Metrics

問題: 「データのクラスタリング」
  └── 通常のクラスタリング → K-Means
  └── 次元削減後にクラスタリング → PCA → K-Means

コスト最適化 詳細ガイド

インスタンスタイプコスト比較(米国東部 us-east-1 参考値)

インスタンス vCPU メモリ GPU 価格/時 推奨用途
ml.t3.medium 2 4 GB - $0.050 Studio開発
ml.m5.large 2 8 GB - $0.115 軽量トレーニング
ml.m5.xlarge 4 16 GB - $0.230 中規模処理
ml.c5.xlarge 4 8 GB - $0.204 CPU集約トレーニング
ml.p3.2xlarge 8 61 GB 1x V100 $3.825 DLトレーニング
ml.p3.8xlarge 32 244 GB 4x V100 $14.688 大規模DL
ml.g4dn.xlarge 4 16 GB 1x T4 $0.736 推論/小規模DL
ml.g4dn.12xlarge 48 192 GB 4x T4 $3.912 中規模DL
ml.inf1.xlarge 4 8 GB AWS Inferentia $0.440 NLP推論最適化

節約戦略まとめ

30-50%節約:
  ✓ Managed Spot Training(60-90%削減)
  ✓ Auto Scaling(不要時スケールイン)
  ✓ Serverless Inference(低頻度リクエスト)

10-30%節約:
  ✓ インスタンスサイズ最適化(Inference Recommender活用)
  ✓ マルチモデルエンドポイント(複数モデル統合)
  ✓ SageMaker Savings Plans(1年/3年コミット)
  ✓ Graviton インスタンス(ml.c7g.xlarge等、約20%安)

5-10%節約:
  ✓ S3 Intelligent Tiering(データストレージ)
  ✓ リザーブドインスタンス(Training Job用)
  ✓ 開発環境の自動停止(Lambda+EventBridge)

最終チェックリスト(試験直前)

試験当日チェック

SageMaker コア概念

  • [ ] Feature Store の Online/Offline の使い分けを説明できる
  • [ ] 推論4種類(リアルタイム/サーバーレス/非同期/バッチ)の制限値を覚えた
  • [ ] Spot Training でチェックポイント設定が必須の理由を説明できる
  • [ ] Pipelines の ConditionStep + FailStep パターンを設計できる
  • [ ] Model Monitor の4種類(データ品質/モデル品質/バイアス/特徴量帰属)を説明できる
  • [ ] Blue/Green デプロイとCanaryデプロイの違いを説明できる
  • [ ] MMEのメリット(コスト削減と動的ロード)を説明できる

MLOps

  • [ ] SageMaker Pipelines でCI/CDを実現するフローを設計できる
  • [ ] Model Registry の承認フローを設計できる
  • [ ] データドリフトとモデルドリフトの検出方法を説明できる
  • [ ] A/Bテスト(ProductionVariant)の設定を説明できる

セキュリティ

  • [ ] SageMaker VPC設定(サブネット+SG+コンテナ間暗号化)を設定できる
  • [ ] IAM最小権限の原則をSageMakerに適用できる
  • [ ] S3データのKMS暗号化設定を説明できる

AWS AI Services

  • [ ] Rekognition/Comprehend/Forecast/Personalize の使い分けを説明できる
  • [ ] Amazon Bedrock のKnowledge Base(RAG)の構成を設計できる
  • [ ] Bedrock Fine-tuning の2種類(継続的事前学習/指示チューニング)を説明できる

アルゴリズム

  • [ ] XGBoost の主要ハイパーパラメータ(max_depth, eta, subsample)を説明できる
  • [ ] DeepAR の適用場面(複数時系列予測)を説明できる
  • [ ] BlazingText の2モード(Word2Vec/テキスト分類)を説明できる
  • [ ] K-Meansとランダムカットフォレストの用途を説明できる

参考リソース

リソース URL/場所
SageMaker 公式ドキュメント docs.aws.amazon.com/sagemaker
SageMaker Python SDK sagemaker.readthedocs.io
AWS MLエンジニアアソシエイト 試験ガイド aws.amazon.com/certification/certified-machine-learning-engineer-associate
SageMaker Examples GitHub github.com/aws/amazon-sagemaker-examples
Bedrock ドキュメント docs.aws.amazon.com/bedrock
AWS AI Blog aws.amazon.com/blogs/machine-learning

用語集(グロッサリー)

用語 説明
AutoML 機械学習の自動化(SageMaker Autopilot)
SHAP SHapley Additive exPlanations - 特徴量重要度の説明
CRISP-DM データマイニングの標準プロセス(Autopilotが採用)
covariate shift トレーニングとサービング時の入力分布の変化
concept drift 入力と出力の関係が変化し精度が低下する現象
cold start 新規ユーザー/アイテムの行動履歴がない問題
canary deployment 少量のトラフィックで新バージョンを試験的にリリース
shadow testing 新モデルにトラフィックを流すが結果は返さない比較テスト
A/B testing 複数バージョンを実際のユーザーで比較
blue/green deployment 新旧フリートを並行稼働させゼロダウンタイムで切り替え
feature store 機械学習用の特徴量を一元管理するデータベース
model registry 学習済みモデルのバージョン管理と承認を管理する仕組み
MLOps MLの開発・運用を効率化するDevOps的手法
DAG 有向非巡回グラフ - Pipelinesの実行グラフ
embedding 高次元データを低次元ベクトルで表現する手法
fine-tuning 事前学習済みモデルを特定タスク向けに追加学習
RAG Retrieval Augmented Generation - 検索拡張生成
inference pipeline 前処理→推論→後処理を直列に繋いだエンドポイント
data parallelism データを分割して複数GPUで並列学習
model parallelism モデルを分割して複数GPUに配置して学習

MLA-C01 機械学習エンジニアアソシエイト 完全学習ガイド(最終版)完了 総計: 本ガイドにより試験範囲を網羅した包括的な学習資料を提供