Amazon MLA-C01: モデルのトレーニングとハイパーパラメータの最適化 — 学習ガイド
こちらの一部です: AWS Machine Learning Engineer Associate MLA-C01 — 学習ガイド. 検証済みの解答で練習: Amazon試験ハブ, または時間制限付き模擬試験に挑戦: ExamRoll.io.
コアコンセプト
Amazon SageMakerでのモデルトレーニングは、コンテナ化されたトレーニングコード、コンピューティングリソース、永続ストレージ、そしてオプションの分散コミュニケーションファブリックを組み合わせた、オーケストレーションされたプロセスです。SageMakerのトレーニングジョブは、トレーニングイメージまたはフレームワークのEstimator、S3の場所を指す入力データ仕様、そしてInstanceType、InstanceCount、VolumeSizeInGBを含むリソース設定によって定義されます。マネージドスポットトレーニングでは、EnableManagedSpotTrainingをtrueに設定し、MaxWaitTimeInSecondsとMaxRuntimeInSecondsを指定します。これにより、SageMakerは予備のキャパシティに入札し、許容される時間枠内でジョブを再開または停止できます。チェックポイント作成は、CheckpointConfigでS3UriとLocalPathを使って設定します。マネージドスポットインスタンスを使用する場合、頻繁にチェックポイントを作成し、中断されたジョブが再試行できるよう、MaxWaitTimeInSecondsをMaxRuntimeInSecondsより十分に大きく設定する必要があります。
分散トレーニングは、データ並列またはモデル並列戦略として実装されます。SageMakerは、PyTorch DistributedDataParallelまたはHorovodを介したネイティブな分散データ並列トレーニングをサポートし、最適化されたNCCL通信のためにsmdistributed.dataparallelを備えたsmdistributedライブラリを提供します。モデル並列は、smdistributed.modelparallelまたはフレームワーク固有のパーティショニングを通じて利用できます。高スループットのノード間通信には、NVLinkとEFA (Elastic Fabric Adapter) をサポートするインスタンスファミリーが必要です。効率的な勾配のall-reduceを実現するために、ml.p4d、ml.p3dn、またはその他のEFA対応インスタンスタイプを選択し、トレーニングスクリプトの要件に応じてuse_mpiまたはuse_nccLを設定します。大規模なジョブでは、計算と通信の比率のバランスをとるために、モデルのシャードサイズに合わせてGPUメモリとネットワーク特性を持つInstanceTypesを指定します。
ハイパーパラメータ最適化は、SageMaker Automatic Model Tuning (AMT) によって処理されます。AMTは多数のトレーニングジョブを起動してハイパーパラメータ空間を探索し、目的メトリクスを最適化します。HyperParameterTuningJobConfigには、ParameterRanges、MaxNumberOfTrainingJobsとMaxParallelTrainingJobsを含むResourceLimits、そしてStrategy(デフォルトはBayesian。網羅的または相関の少ない探索のための代替案としてRandomやGridがあります)が含まれます。AMTがトレーニングログを解析できるように、ObjectiveMetricNameとMetricDefinitionsを定義します。目的がF1スコアの場合は、ObjectiveTypeをMaximizeに設定し、MetricDefinitionsの正規表現が出力されたメトリクスと一致することを確認します。予算を節約しながらチューニングを高速化するには、WarmStartConfigを使用して以前のチューニングジョブの結果を再利用し、サポートされている場合は早期停止ポリシー(EarlyStoppingType: Auto)を有効にして、見込みのないトレーニングジョブを終了させます。
主要なサービスと設定
エンドツーエンドのトレーニングとチューニングのワークフローを構築する際には、一般的にいくつかのAWSサービスとSageMakerの機能を組み合わせて使用します。
- Amazon SageMaker Training Jobs (Estimator API / CreateTrainingJob)
- SageMaker Automatic Model Tuning (CreateHyperParameterTuningJob)
- SageMaker Model Registry (ModelPackage and CreateModelPackageGroup)
- 安全な一元化されたデータカタログ作成のためのAWS Glue / AWS Lake Formation
- 耐久性のあるチェックポイントとアーティファクトストレージのためのAmazon S3
トレーニングジョブの設定内では、InstanceTypeとInstanceCountを含むResourceConfigを指定し、HyperParametersを介してハイパーパラメータを渡します。マネージドスポットトレーニングでは、EnableManagedSpotTrainingを含め、中断されたジョブが状態を保存できるようにCheckpointConfig.S3Uriを設定します。CreateHyperParameterTuningJobを介してチューニングジョブを起動する際には、HyperParameterTuningJobConfig.ParameterRangesにIntegerParameterRange、ContinuousParameterRange、CategoricalParameterRangeのエントリを入力し、ResourceLimitsにMaxNumberOfTrainingJobsとMaxParallelTrainingJobsを設定します。以前の結果から検索をブートストラップするには、WarmStartConfigをParentHyperParameterTuningJobsと共に使用し、WarmStartTypeをIDENTICAL_DATA_AND_ALGORITHMまたはTRANSFER_LEARNINGのいずれかに設定します。
セキュリティと運用管理のために、SageMaker Model RegistryのModelPackageGroupにModelPackageオブジェクトを登録して、モデルアーティファクトを一元管理します。デプロイ前にApprovedへの手動変更を要求するために、ModelApprovalStatusをPendingManualApprovalに設定します。Model RegistryのイベントをAWS CodePipelineやAWS Step Functionsと組み合わせて、UpdateModelPackage APIを介してModelPackage.ModelApprovalStatusを更新する手動承認アクションを構築します。本番エンドポイントのモニタリングとドリフトの検出のために、エンドポイントでDataCaptureConfigを有効にし、SageMaker Model Monitorを使用してCreateMonitoringScheduleでデプロイ前の統計をベースライン化します。その後、継続的な評価のために、S3のDestinationS3Uriを指定してBatchTransformまたはRealTimeInferenceのデータキャプチャを使用します。
設計パターンとトレードオフ
多数の小さなシャードを使用するデータ並列分散トレーニングを選択すると、スケーリングがシンプルになり、モデルが単一のGPUに収まる場合には通常、最も単純なパターンとなります。PyTorch DDPやHorovodを使用したデータ並列アプローチは、ネットワークファブリックが高性能で、インスタンスがEFAとNCCLをサポートしている場合にうまくスケールします。モデルの重みが単一GPUのメモリを超える場合は、モデル並列またはパイプライン並列が必要になります。smdistributed.modelparallelはGPU間でテンソルを分割するのに役立ちますが、デバッグ、チェックポイント作成、計算と通信のバランス調整の複雑さが増します。実用的な設計パターンはハイブリッドです。非常に大きなレイヤーにはモデルシャーディングを使用し、ワーカーグループ間ではデータ並列を使用します。
ハイパーパラメータチューニングのトレードオフは、主に時間対コストです。広範なランダム検索やグリッド検索はシンプルですが高コストです。ベイジアン最適化(AMTのデフォルト戦略)は、以前の結果を使用して探索を集中させ、良好な設定に到達するために必要なトレーニングジョブの数を減らすことができます。データセットやモデルの変更が段階的である場合は、WarmStartConfigを使用して、以前のチューニングの知識を新しい実験に引き継ぎます。多数のトレーニングジョブを並列化すると、実時間での最適化は速くなりますが、瞬間的なコストが増加し、サービスの上限に達する可能性があります。MaxParallelTrainingJobsは控えめに設定し、チューニングジョブにはスポットインスタンスを使用して支出を削減します。ただし、中断に耐えられるように、常にCheckpointConfigとMaxWaitTimeInSecondsを設定してください。
チェックポイントの頻度とストレージの選択は、耐障害性とコストの両方に影響します。頻繁なチェックポイントは、中断による計算の損失を減らしますが、S3のスループットとレイテンシーのオーバーヘッドが増加します。コンテナ内(LocalPath)で増分チェックポイントを使用し、耐久性のある復旧のためにS3に非同期で同期します。マネージドスポットインスタンスでトレーニングする場合、堅牢なチェックポイント間隔を設定し、一般的な中断ウィンドウ内で完了できるトレーニングジョブにはより少ないインスタンス数を使用するか、SageMakerが提供するSIGTERMフックを使用してプリエンプションに耐えるようにトレーニングループを設計し、一貫性のあるチェックポイントを確実に保存します。
よくある落とし穴と判断基準
運用上よくある落とし穴は、パフォーマンスをテストせずにカスタムコンテナイメージに依存することです。フレームワークが提供するイメージ(SageMakerの事前ビルド済みPyTorch、TensorFlow、XGBoostイメージ)は、起動が速く、自動的なメトリクス送信の統合が含まれており、コールドスタートのレイテンシーを最小限に抑えます。HPOでよくあるもう一つの間違いは、MetricDefinitionsやObjectiveMetricNameの設定ミスにより、AMTが正しいシグナルを見つけて最適化できなくなることです。チューニングジョブをスケールする前に、ログからメトリクスを抽出するために使用する正規表現を必ず検証してください。マネージドスポットトレーニングを使用する際にCheckpointConfigを有効にしないと、中断時にジョブの進捗が失われ、累積実行時間が長くなり、コストが増加する可能性があります。
セキュリティとガバナンスの決定は、最小権限とモデルのライフサイクル管理を中心に据える必要があります。SageMaker Model RegistryをModelPackageの承認ワークフローとIAMポリシーと組み合わせて使用し、承認されたModelPackageバージョンのみが本番環境に到達するようにします。S3のトレーニングデータを暗号化(SSE-S3またはSSE-KMS)で保護し、トレーニングジョブが引き受けるIAMロール(CreateTrainingJobのRoleArnパラメータ)を介してアクセスを制御します。中央集権的なデータアクセスポリシーが必要な場合は、Lake Formationも使用します。ドリフト検出と根本原因分析のために、SageMaker Model MonitorをModel Registryのアーティファクトと組み合わせ、どのアーティファクトバージョンが劣化したかを追跡し、再デプロイ前に人間が介在する承認フローをトリガーします。
実践的な問題:ユースケースシナリオ
会社:FinGuard Inc. — 課題:S3に保存されたトランザクションログとオンプレミスのMySQLの顧客プロファイルでトレーニングされた不正検知モデルを構築し、コストを最小限に抑え、スポット中断に耐え、自動ハイパーパラメータ最適化を実行し、本番デプロイ前に手動承認を強制し、デプロイ後にバイアスやドリフトを検出する。
データの集約と準備:S3トランザクションログを直接取り込み、AWS GlueとオンプレミスMySQLデータベースへのJDBC接続を使用して、顧客プロファイルテーブルをクロールおよびカタログ化します。キュレートされた特徴量をSageMaker Feature StoreのFeatureGroupに登録し、低レイテンシーでのアクセスとスキーマの一貫性を強制します。OfflineStoreのS3をSSE-KMSで暗号化し、IAMおよびLake Formationポリシーを介してアクセスを制御します。
トレーニングと分散設定:初期モデルには、組み込みのXGBoostコンテナを持つSageMaker Estimatorを使用します。ベースラインとしてResourceConfigをInstanceType ml.m5.4xlargeで設定し、GPUアクセラレーションによる実験のためにml.p3.2xlargeにスケールします。大規模な実験では、EFA対応インスタンス(ml.p3dn.24xlargeまたはml.p4d.24xlarge)でsmdistributed.dataparallelを使用し、CheckpointConfig.S3Uriをs3://finguard-checkpoints/{job-name}に、LocalPathを/opt/ml/checkpointsに設定します。EnableManagedSpotTrainingをtrueに設定してマネージドスポットトレーニングを有効にし、再試行を可能にするためにMaxWaitTimeInSecondsをMaxRuntimeInSecondsの少なくとも2倍に設定します。
ハイパーパラメータの最適化:eta、max_depth、scale_pos_weight(重い前処理なしでクラスの不均衡に対処するため)に対してHyperParameterTuningJobConfig.ParameterRangesを指定して、SageMaker Automatic Model Tuningを起動します。ObjectiveMetricNameをvalidation:F1に設定し、F1値を抽出するMetricDefinitionsの正規表現を提供します。StrategyにBayesianを使用し、ResourceLimitsでMaxNumberOfTrainingJobsを50、MaxParallelTrainingJobsを5に設定します。以前のチューニング結果から反復する場合はWarmStartConfigを使用します。コストを削減するために、マネージドスポットインスタンスでチューニングジョブを実行し、各トレーニングジョブでCheckpointConfigが有効であることを確認します。
モデルのガバナンスとデプロイ:最良のモデルアーティファクトをSageMaker Model RegistryにModelPackageGroup内のModelPackageとして登録し、ModelApprovalStatusをPendingManualApprovalに設定します。人間の承認ステップ(手動タスク)を含むAWS Step Functionsパイプラインを実装し、承認されるとUpdateModelPackageを呼び出してModelApprovalStatusをApprovedに設定し、その後、CreateModelとCreateEndpointConfig/CreateEndpointをトリガーしてデプロイします。エンドポイントのDataCaptureConfigを使用して、推論リクエストとレスポンスをModel Monitor用にs3://finguard-captureにキャプチャします。
AWSの論理的根拠:AWS Glueはハイブリッドデータソースを一元化およびカタログ化し、SageMakerと統合します。SageMaker Feature Storeは特徴量を標準化し、トレーニングと推論のためにそれらを保護します。マネージドスポットトレーニングとCheckpointConfigを組み合わせることで、プリエンプション(中断)を越えて進捗を維持しつつ、コンピューティングコストを削減します。MetricDefinitionsとWarmStartConfigを備えたSageMaker Automatic Model Tuningは、予算を管理しながら堅牢なハイパーパラメータの発見を加速します。PendingManualApprovalを備えたModel RegistryとStep FunctionsまたはCodePipelineを組み合わせることで、ガバナンスと最小権限でのモデルの本番環境への昇格を強制します。SageMaker Model MonitorとDataCaptureConfigは、継続的なモデルのヘルスチェックのために、自動化されたドリフトとバイアスの検出を提供します。
← データエンジニアリングと特徴量エンジニアリング · すべてのドメイン · モデルの評価と選択 →
これらの問題を練習する → · ExamRoll.ioで時間制限付き練習 →
Pass the whole exam — not just this question
You found this answer. Get every verified question and explanation in one place, and save hours of prep. Free to start.
試験に合格する →