

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

# モデルをトレーニングします
<a name="ex1-train-model"></a>

このステップでは、トレーニングアルゴリズムを選択し、モデルのトレーニングジョブを実行します。[Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) は、トレーニング用の SageMaker AI 機能にアクセスする機械学習 (ML) ライフサイクルと、Amazon Elastic Container Registry (Amazon ECR)、Amazon Elastic Compute Cloud (Amazon EC2)、Amazon Simple Storage Service (Amazon S3) などの AWS インフラストラクチャをオーケストレーションしながら、モデルをトレーニングするクラスを提供します。組み込みアルゴリズムの詳細については、「[Amazon SageMaker の組み込みアルゴリズムと事前トレーニング済みモデル](algos.md)」を参照してください。

**Topics**
+ [トレーニングアルゴリズムを選択する](#ex1-train-model-select-algorithm)
+ [トレーニングジョブを作成して実行する](#ex1-train-model-sdk)

## トレーニングアルゴリズムを選択する
<a name="ex1-train-model-select-algorithm"></a>

通常、データセットに適切なアルゴリズムを選択するには、さまざまなモデルを評価して、データに最適なモデルを見つける必要があります。簡単に作業できるように、このチュートリアルでは、モデルの事前評価を行わずに SageMaker AI [Amazon SageMaker AI の XGBoost アルゴリズム](xgboost.md) 組み込みアルゴリズムを使用します。

**ヒント**  
使用する表形式データセットに適したモデルを SageMaker AI で探す場合は、機械学習ソリューションを自動化する Amazon SageMaker Autopilot を使用します。詳細については、「[SageMaker Autopilot](autopilot-automate-model-development.md)」を参照してください。

## トレーニングジョブを作成して実行する
<a name="ex1-train-model-sdk"></a>

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

**モデルトレーニングジョブを実行するには**

1. [Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) をインポートし、現在の SageMaker AI セッションから基本情報を取得して開始します。

   ```
   from sagemaker.core.helper.session_helper import Session, get_execution_role
   
   sagemaker_session = Session()
   region = sagemaker_session.boto_region_name
   print(f"AWS Region: {region}")
   
   role = get_execution_role()
   print(f"RoleArn: {role}")
   ```
**注記**  
`sagemaker.__version__` を実行して SageMaker Python SDK のバージョンを確認します。このチュートリアルは `sagemaker>=3.0` に基づいています。SDK が古い場合は、以下のコマンドを実行して最新バージョンをインストールします。  

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

   次のような情報が返されます。
   + `region` – SageMaker AI ノートブックインスタンスが実行されている現在の AWS リージョン。
   + `role` - ノートブックインスタンスで使用されている IAM ロール。

1. XGBoost アルゴリズムのトレーニング設定を作成し、ハイパーパラメータを設定します。

   コンストラクタで直接渡されたハイパーパラメータを持つ `sagemaker.train.ModelTrainer` クラス`ModelTrainer`を使用して を作成します。次のコード例では、ModelTrainer の名前は です`xgb_model_trainer`。

   ```
   from sagemaker.train import ModelTrainer
   from sagemaker.train.configs import Compute, OutputDataConfig
   from sagemaker.core import image_uris
   
   s3_output_location='s3://{}/{}/{}'.format(bucket, prefix, 'xgboost_model')
   
   container = image_uris.retrieve("xgboost", region, "1.2-1")
   print(container)
   
   compute = Compute(
       instance_type='ml.m4.xlarge',
       instance_count=1,
       volume_size_in_gb=5
   )
   
   xgb_model_trainer = ModelTrainer(
       training_image=container,
       role=role,
       compute=compute,
       output_data_config=OutputDataConfig(s3_output_path=s3_output_location),
       hyperparameters={
           "max_depth": "5",
           "eta": "0.2",
           "gamma": "4",
           "min_child_weight": "6",
           "subsample": "0.7",
           "objective": "binary:logistic",
           "num_round": "1000"
       }
   )
   ```

   SageMaker AI を構築するには`ModelTrainer`、次のパラメータを指定します。
   + `training_image` - トレーニングコンテナイメージ URI を指定します。この例では、`image_uris.retrieve` を使用して SageMaker AI XGBoost トレーニングコンテナ URI を指定しています。
   + `role` – SageMaker AI がユーザーに代わってタスクを実行するために使用する AWS Identity and Access Management (IAM) ロール (トレーニング結果の読み取り、Amazon S3 からのモデルアーティファクトの呼び出し、Amazon S3 へのトレーニング結果の書き込みなど）。
   + `compute` – モデルトレーニングに使用する Amazon EC2 ML コンピューティングインスタンスのタイプと数を指定する`Compute`設定オブジェクト。このトレーニング演習では、単一の `ml.m4.xlarge` インスタンスを使用します。このインスタンスは、4 つの CPU、16 GB のメモリ、Amazon Elastic Block Store (Amazon EBS) ストレージ、高いネットワークパフォーマンスを備えています。EC2 コンピューティングインスタンスのタイプの詳細については、「[Amazon EC2 インスタンスタイプ](https://aws.amazon.com/ec2/instance-types/)」を参照してください。請求の詳細については、「[Amazon SageMaker の料金](https://aws.amazon.com/sagemaker/pricing/)」を参照してください。
   + `hyperparameters` – トレーニングアルゴリズムのハイパーパラメータのディクショナリ。すべての値は文字列である必要があります。
**ヒント**  
畳み込みニューラルネットワーク (CNN) や自然言語処理 (NLP) モデルなどの大規模な深層学習モデルの分散トレーニングを実行する場合は、データ並列処理またはモデル並列処理に SageMaker AI Distributed を使用します。詳細については、「[Amazon SageMaker AI による分散トレーニング](distributed-training.md)」を参照してください。
**ヒント**  
SageMaker AI ハイパーパラメータ最適化機能を使用してハイパーパラメータをチューニングすることもできます。詳細については、「[SageMaker AI の自動モデルチューニング](automatic-model-tuning.md)」を参照してください。

1. トレーニング用のデータ入力を設定します。

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

   ```
   from sagemaker.train.configs import InputData
   
   train_input = InputData(
       channel_name="train",
       data_source="s3://{}/{}/{}".format(bucket, prefix, "data/train.csv")
   )
   validation_input = InputData(
       channel_name="validation",
       data_source="s3://{}/{}/{}".format(bucket, prefix, "data/validation.csv")
   )
   ```

1. モデルトレーニングを開始します。

   モデルトレーニングを開始するには、トレーニングデータセットと検証データセットを使用してトレーナーの `train`メソッドを呼び出します。デフォルトでは、 `train`メソッドは進行状況ログを表示し、トレーニングが完了するまで待機します。

   ```
   xgb_model_trainer.train(input_data_config=[train_input, validation_input])
   ```

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

   トレーニングジョブが終わったら、XGBoost トレーニングレポートと SageMaker デバッガーによって生成されたプロファイリングレポートをダウンロードできます。XGBoost トレーニングレポートでは、イテレーションに対する損失関数、特徴量の重要度、混同行列、精度曲線、トレーニングのその他の統計結果など、トレーニングの進行状況と結果に関するインサイトが提供されます。例えば、XGBoost トレーニングレポートで次のような損失曲線が見つかる場合があります。これは、オーバーフィットの問題があることを明確に示しています。  
![XGBoost トレーニングレポートのグラフ。](https://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/get-started-ni/gs-ni-train-loss-curve-validation-overfitting.png)

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

   ```
   training_job = xgb_model_trainer._latest_training_job
   rule_output_path = training_job.output_data_config.s3_output_path + "/" + training_job.training_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 プロファイリングレポートのファイルリンクを返します。

   ```
   # Note: In V3, debugger rule outputs can be accessed via the SageMaker console
   # or the boto3 DescribeTrainingJob API (DebugRuleEvaluationStatuses field).
   # Example using boto3:
   # import boto3
   # sm = boto3.client("sagemaker")
   # resp = sm.describe_training_job(TrainingJobName=training_job.training_job_name)
   # rule_statuses = resp["DebugRuleEvaluationStatuses"]
   profiler_report_name = "ProfilerReport-1234567890"
   display("Click link below to view the profiler report", FileLink(profiler_report_name+"/profiler-output/profiler-report.html"))
   ```
**ヒント**  
HTML レポートの JupyterLab ビューにプロットがレンダリングされない場合は、レポートの上部にある **[HTML を信頼]** を選択する必要があります。  
オーバーフィット、勾配の消失、モデルの収束を妨げるその他の問題など、トレーニングの問題を特定するには、SageMaker Debugger を使用して機械学習モデルのプロトタイプ作成やトレーニング中の自動化アクションを取得します。詳細については、「[Amazon SageMaker デバッガー](train-debugger.md)」を参照してください。モデルパラメータの詳細な解析を確認するには、「[Amazon SageMaker Debugger による説明可能性](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-debugger/xgboost_census_explanations/xgboost-census-debugger-rules.html#Explainability-with-Amazon-SageMaker-Debugger)」サンプルノートブックを参照してください。

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

```
xgb_model_trainer._latest_training_job.model_artifacts.s3_model_artifacts
```

**ヒント**  
機械学習ライフサイクル (データ収集、モデルトレーニングとチューニング、予測用にデプロイされた機械学習モデルのモニタリング) の各段階で発生する可能性のあるバイアスを測定するには、SageMaker Clarify を使用します。詳細については、「[モデルの説明可能性](clarify-model-explainability.md)」を参照してください。エンドツーエンドの例については、「[Fairness and Explainability with SageMaker Clarify](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-clarify/fairness_and_explainability/fairness_and_explainability.html)」のサンプルノートブックを参照してください。