ステップ 4: モデルをトレーニングする - Amazon SageMaker

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

ステップ 4: モデルをトレーニングする

Amazon SageMaker Python SDK は、Amazon Elastic Container Registry (Amazon ECR)、Amazon Elastic Compute Cloud (Amazon EC2)、Amazon Simple Storage Service (Amazon S3) などのトレーニング機能と AWS インフラストラクチャにアクセスする SageMaker機械学習 (ML) ライフサイクルをオーケストレーションしながら、モデルをトレーニングするためのフレームワーク推定器と汎用推定器を提供します。 SageMaker 組み込みフレームワーク推定器の詳細については、Amazon SageMaker Python SDK ドキュメントの「フレームワーク」を参照してください。組み込みアルゴリズムの詳細については、「Amazon SageMaker 組み込みアルゴリズムまたは事前トレーニング済みモデルを使用する」を参照してください。

トレーニングアルゴリズムを選択する

通常、データセットに適切なアルゴリズムを選択するには、さまざまなモデルを評価して、データに最適なモデルを見つける必要があります。わかりやすくするために、 SageMakerこのチュートリアルでは、モデルの事前評価を行わずにAmazon で XGBoost アルゴリズムを使用する SageMaker組み込みアルゴリズムが使用されます。

ヒント

表形式のデータセットに適したモデル SageMaker を検索する場合は、機械学習ソリューションを自動化する Amazon SageMaker Autopilot を使用します。詳細については、「SageMaker オートパイロット」を参照してください。

トレーニングジョブを作成して実行する

使用するモデルを特定したら、トレーニング用の SageMaker 推定器の構築を開始します。このチュートリアルでは、 SageMaker 汎用推定器に XGBoost 組み込みアルゴリズムを使用します。

モデルトレーニングジョブを実行するには
  1. Amazon SageMaker Python SDK をインポートし、まず現在の SageMaker セッションから基本情報を取得します。

    import sagemaker region = sagemaker.Session().boto_region_name print("AWS Region: {}".format(region)) role = sagemaker.get_execution_role() print("RoleArn: {}".format(role))

    次のような情報が返されます。

    • region – ノートブックインスタンスが実行され SageMakerている現在の AWS リージョン。

    • role - ノートブックインスタンスで使用されている IAM ロール。

    注記

    を実行して SageMaker Python SDK のバージョンを確認しますsagemaker.__version__。このチュートリアルは sagemaker>=2.20 に基づいています。SDK が古い場合は、以下のコマンドを実行して最新バージョンをインストールします。

    ! pip install -qU sagemaker

    終了する SageMaker Studio またはノートブックインスタンスでこのインストールを実行する場合は、カーネルを手動で更新して、バージョン更新の適用を完了する必要があります。

  2. sagemaker.estimator.Estimator クラスを使用して XGBoost 推定器を作成します。次のサンプルコードでは、XGBoost 推定器の名前が xgb_model になっています。

    from sagemaker.debugger import Rule, ProfilerRule, rule_configs from sagemaker.session import TrainingInput s3_output_location='s3://{}/{}/{}'.format(bucket, prefix, 'xgboost_model') container=sagemaker.image_uris.retrieve("xgboost", region, "1.2-1") print(container) xgb_model=sagemaker.estimator.Estimator( image_uri=container, role=role, instance_count=1, instance_type='ml.m4.xlarge', volume_size=5, output_path=s3_output_location, sagemaker_session=sagemaker.Session(), rules=[ Rule.sagemaker(rule_configs.create_xgboost_report()), ProfilerRule.sagemaker(rule_configs.ProfilerReport()) ] )

    SageMaker 推定器を作成するには、次のパラメータを指定します。

    • image_uri - トレーニングコンテナイメージ URI を指定します。この例では、 SageMaker XGBoost トレーニングコンテナ URI は を使用して指定されていますsagemaker.image_uris.retrieve

    • role – がユーザーに代わってタスクを実行するために SageMaker 使用する AWS Identity and Access Management (IAM) ロール (トレーニング結果の読み取り、Amazon S3 からのモデルアーティファクトの呼び出し、Amazon S3 へのトレーニング結果の書き込みなど)。

    • instance_countinstance_type - モデルのトレーニングに使用される Amazon EC2 機械学習コンピューティングインスタンスのタイプと数。このトレーニング演習では、単一の ml.m4.xlarge インスタンスを使用します。このインスタンスは、4 つの CPU、16 GB のメモリ、Amazon Elastic Block Store (Amazon EBS) ストレージ、高いネットワークパフォーマンスを備えています。EC2 コンピューティングインスタンスのタイプの詳細については、「Amazon EC2 インスタンスタイプ」を参照してください。請求の詳細については、「Amazon の SageMaker 料金」を参照してください。

    • volume_size -トレーニングインスタンスにアタッチする EBS ストレージボリュームのサイズ (GB)。File モードを使用する場合は、トレーニングデータを保存するのに十分な大きさである必要があります (File モードはデフォルトで有効です)。このパラメータを指定しない場合は、値はデフォルトで 30 になります。

    • output_path – がモデルアーティファクトとトレーニング結果を保存する S3 バケット SageMakerへのパス。

    • sagemaker_session – トレーニングジョブが使用する SageMaker API オペレーションやその他の AWS サービスとのやり取りを管理するセッションオブジェクト。

    • rules – SageMaker デバッガーの組み込みルールのリストを指定します。この例では、create_xgboost_report() ルールはトレーニングの進行状況と結果に関するインサイトを提供する XGBoost レポートを作成し、ProfilerReport() ルールは EC2 コンピューティングリソースの使用状況に関するレポートを作成します。詳細については、「SageMaker デバッガー XGBoost トレーニングレポート」を参照してください。

    ヒント

    畳み込みニューラルネットワーク (CNN) モデルや自然言語処理 (NLP) モデルなど、大規模な深層学習モデルの分散トレーニングを実行する場合は、データ並列処理またはモデル並列処理に SageMaker 分散 を使用します。詳細については、「Amazon での分散トレーニング SageMaker」を参照してください。

  3. 推定器の set_hyperparameters メソッドを呼び出して、XGBoost アルゴリズムのハイパーパラメータ値を設定します。XGBoost ハイパーパラメータの詳細なリストについては、「XGBoost ハイパーパラメータ」を参照してください。

    xgb_model.set_hyperparameters( max_depth = 5, eta = 0.2, gamma = 4, min_child_weight = 6, subsample = 0.7, objective = "binary:logistic", num_round = 1000 )
    ヒント

    ハイパーパラメータ最適化機能を使用して SageMaker ハイパーパラメータを調整することもできます。詳細については、「でモデルの自動チューニングを実行する SageMaker」を参照してください。

  4. TrainingInput クラスを使用して、トレーニング用のデータ入力フローを設定します。次のサンプルコードは、「データセットをトレーニング、検証、テストデータセットに分割する」セクションで Amazon S3 にアップロードしたトレーニングデータセットと検証データセットを使用するための TrainingInput オブジェクトの設定方法を示しています。

    from sagemaker.session import TrainingInput train_input = TrainingInput( "s3://{}/{}/{}".format(bucket, prefix, "data/train.csv"), content_type="csv" ) validation_input = TrainingInput( "s3://{}/{}/{}".format(bucket, prefix, "data/validation.csv"), content_type="csv" )
  5. モデルトレーニングを開始するには、推定器の fit メソッドをトレーニングデータセットと検証データセットで呼び出します。wait=True を設定すると、fit メソッドは、進捗状況ログを表示し、トレーニングが完了するまで待機状態になります。

    xgb_model.fit({"train": train_input, "validation": validation_input}, wait=True)

    モデルトレーニングの詳細については、「Amazon でモデルをトレーニングする SageMaker」を参照してください。このチュートリアルのトレーニングジョブには、最大で 10 分かかる場合があります。

    トレーニングジョブが完了したら、XGBoost トレーニングレポートと SageMaker デバッガーによって生成されたプロファイリングレポートをダウンロードできます。XGBoost トレーニングレポートでは、イテレーションに対する損失関数、特徴量の重要度、混同行列、精度曲線、トレーニングのその他の統計結果など、トレーニングの進行状況と結果に関するインサイトが提供されます。例えば、XGBoost トレーニングレポートで次のような損失曲線が見つかる場合があります。これは、オーバーフィットの問題があることを明確に示しています。

    次のコードを実行すると、Debugger トレーニングレポートが生成される S3 バケット URI を指定し、レポートが存在するかどうかを確認します。

    rule_output_path = xgb_model.output_path + "/" + xgb_model.latest_training_job.job_name + "/rule-output" ! aws s3 ls {rule_output_path} --recursive

    Debugger XGBoost トレーニングレポートとプロファイリングレポートを現在のワークスペースにダウンロードします。

    ! aws s3 cp {rule_output_path} ./ --recursive

    次の IPython スクリプトを実行すると、XGBoost トレーニングレポートのファイルリンクを取得します。

    from IPython.display import FileLink, FileLinks display("Click link below to view the XGBoost Training report", FileLink("CreateXgboostReport/xgboost_report.html"))

    次の IPython スクリプトは、EC2 インスタンスのリソース使用率、システムボトルネックの検出結果、Python オペレーションプロファイリング結果の概要と詳細を示す Debugger プロファイリングレポートのファイルリンクを返します。

    profiler_report_name = [rule["RuleConfigurationName"] for rule in xgb_model.latest_training_job.rule_job_summary() if "Profiler" in rule["RuleConfigurationName"]][0] profiler_report_name display("Click link below to view the profiler report", FileLink(profiler_report_name+"/profiler-output/profiler-report.html"))
    ヒント

    HTML レポートが JupyterLab ビューでプロットをレンダリングしない場合は、レポートの上部にある信頼 HTML を選択する必要があります。

    オーバーフィット、勾配の消失、モデルの収束を妨げるその他の問題などのトレーニングの問題を特定するには、 SageMaker デバッガーを使用して、ML モデルのプロトタイプ作成とトレーニング中に自動アクションを実行します。詳細については、「Amazon SageMaker Debugger を使用してモデルのパフォーマンスをデバッグおよび改善する」を参照してください。モデルパラメータの完全な分析については、「Amazon SageMaker Debugger による説明可能性のサンプルノートブック」を参照してください。

これで、トレーニング済みの XGBoost モデルが作成されました。 はモデルアーティファクトを S3 バケットに SageMaker 保存します。モデルアーティファクトの場所を確認するには、次のコードを実行して xgb_model 推定器の model_data 属性を出力します。

xgb_model.model_data
ヒント

ML ライフサイクルの各段階 (データ収集、モデルのトレーニングとチューニング、予測用にデプロイされた ML モデルのモニタリング) で発生する可能性のあるバイアスを測定するには、 SageMaker Clarify を使用します。詳細については、「モデルの説明可能性」を参照してください。 end-to-end 例については、 SageMaker 「Clarify を使用した公平性と説明可能性」のサンプルノートブックを参照してください。