

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

# プライベート Docker レジストリ内のイメージにアクセスするようにトレーニングジョブを適応
<a name="docker-containers-adapt-your-own-private-registry"></a>

Amazon Elastic Container Registry (Amazon ECR) の代わりにプライベート [Docker レジストリ](https://docs.docker.com/registry/)を使用して、SageMaker AI トレーニング用のイメージをホストできます。以下の手順では、Docker レジストリの作成、仮想プライベートクラウド (VPC) とトレーニングジョブの設定、イメージの保存、プライベート Docker レジストリ内のトレーニングイメージへのアクセス許可を SageMaker AI に付与する方法を示します。また、SageMaker トレーニングジョブで認証を必要とする Docker レジストリの使用方法についても説明します。

## プライベート Docker レジストリでのイメージの作成と保存
<a name="docker-containers-adapt-your-own-private-registry-prerequisites"></a>

プライベート Docker レジストリを作成してイメージを保存します。レジストリは次の条件を満たす必要があります。
+ [Docker レジストリ HTTP API](https://docs.docker.com/registry/spec/api/) プロトコルを使用します
+ `CreateTrainingJob` API の [VPCConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html#API_CreateTrainingJob_RequestSyntax) パラメータで指定されているのと同じ VPC からアクセス可能です。トレーニングジョブの作成時に `VpcConfig` を入力します。
+ 既知の公開認証機関 (CA) からの [TLS 証明書](https://aws.amazon.com/what-is/ssl-certificate/)で保護されています。

Docker レジストリの作成の詳細については、「[Deploy a registry server](https://docs.docker.com/registry/deploying/)」を参照してください。

## VPC と SageMaker トレーニングジョブの設定
<a name="docker-containers-adapt-your-own-private-registry-configure"></a>

SageMaker AI は VPC 内のネットワーク接続を使用して Docker レジストリ内のイメージにアクセスします。Docker レジストリ内のイメージをトレーニングに使用するには、アカウントの Amazon VPC からレジストリにアクセス可能である必要があります。詳細については、「[トレーニングに認証が必要な Docker レジストリの使用](docker-containers-adapt-your-own-private-registry-authentication.md)」を参照してください。

また、Docker レジストリがアクセスできるのと同じ VPC に接続するようにトレーニングジョブを設定する必要があります。詳細については、「[Configure a Training Job for Amazon VPC Access](https://docs.aws.amazon.com/sagemaker/latest/dg/train-vpc.html#train-vpc-configure)」を参照してください。

## プライベート Docker レジストリのイメージを使用したトレーニングジョブの作成
<a name="docker-containers-adapt-your-own-private-registry-create"></a>

プライベート Docker レジストリのイメージをトレーニングに使用するには、以下のガイドを使用してイメージの設定、トレーニングジョブの設定と作成を行います。次のコード例では、 AWS SDK for Python (Boto3) クライアントを使用します。

1. トレーニングイメージ設定オブジェクトを作成し、以下のように `TrainingRepositoryAccessMode` フィールドに `Vpc` を入力します。

   ```
   training_image_config = {
       'TrainingRepositoryAccessMode': 'Vpc'
   }
   ```
**注記**  
プライベート Docker レジストリに認証が必要な場合は、`TrainingRepositoryAuthConfig` オブジェクトを、トレーニングイメージ設定オブジェクトに追加する必要があります。オブジェクトの `TrainingRepositoryCredentialsProviderArn`フィールドを使用して SageMaker AI にアクセス認証情報を提供する AWS Lambda 関数の Amazon リソースネーム (ARN) も指定する必要があります`TrainingRepositoryAuthConfig`。詳細については、以下のコード構造例を参照してください。  

   ```
   training_image_config = {
      'TrainingRepositoryAccessMode': 'Vpc',
      'TrainingRepositoryAuthConfig': {
           'TrainingRepositoryCredentialsProviderArn': '{{arn:aws:lambda:Region:Acct:function:FunctionName}}'
      }
   }
   ```

   認証を提供するために Lambda 関数を作成する方法については、「[トレーニングに認証が必要な Docker レジストリの使用](docker-containers-adapt-your-own-private-registry-authentication.md)」を参照してください。

1. Boto3 クライアントを使用してトレーニングジョブを作成し、正しい設定を [create\_training\_job](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) API に渡します。以下の手順は、コンポーネントの設定方法とトレーニングジョブの作成方法を示しています。

   1. `create_training_job` に渡す `AlgorithmSpecification` オブジェクトを作成します。次のコード例に示すように、前のステップで作成したトレーニングイメージ設定オブジェクトを使用します。

      ```
      algorithm_specification = {
         'TrainingImage': '{{myteam.myorg.com/docker-local/my-training-image:<IMAGE-TAG>}}',
         'TrainingImageConfig': training_image_config,
         'TrainingInputMode': '{{File}}'
      }
      ```
**注記**  
更新バージョンではなく固定バージョンのイメージを使用するには、名前やタグではなく、イメージの[ダイジェスト](https://docs.docker.com/engine/reference/commandline/pull/#pull-an-image-by-digest-immutable-identifier)を参照します。

   1. 次のコード例に示すように、`create_training_job` に渡すトレーニングジョブの名前とロールを指定します。

      ```
      training_job_name = '{{private-registry-job}}'
      execution_role_arn = '{{arn:aws:iam::123456789012:role/SageMakerExecutionRole}}'
      ```

   1. トレーニングジョブの VPC 設定のセキュリティグループとサブネットを指定します。プライベート Docker レジストリは、以下のコード例に示すように、指定したセキュリティグループからのインバウンドトラフィックを許可する必要があります。

      ```
      vpc_config = {
          'SecurityGroupIds': ['{{sg-0123456789abcdef0}}'],
          'Subnets': ['{{subnet-0123456789abcdef0}}','{{subnet-0123456789abcdef1}}']
      }
      ```
**注記**  
サブネットがプライベート Docker レジストリと同じ VPC にない場合は、2 つの VPC 間にネットワーク接続を設定する必要があります。詳細については、「[VPC ピアリング](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-peering.html)を使用して VPC を接続する」を参照してください。

   1. 次のコード例に示すように、トレーニングに使用する機械学習コンピューティングインスタンスやストレージボリュームなどのリソース設定を指定します。

      ```
      resource_config = {
          'InstanceType': '{{ml.m4.xlarge}}',
          'InstanceCount': {{1}},
          'VolumeSizeInGB': {{10}},
      }
      ```

   1. 次のコード例に示すように、入力および出力データ設定、トレーニングデータセットの保存場所、モデルアーティファクトの保存場所を指定します。

      ```
      input_data_config = [
          {
              "ChannelName": "training",
              "DataSource":
              {
                  "S3DataSource":
                  {
                      "S3DataDistributionType": "{{FullyReplicated}}",
                      "S3DataType": "{{S3Prefix}}",
                      "S3Uri": "{{s3://your-training-data-bucket/training-data-folder}}"
                  }
              }
          }
      ]
      
      output_data_config = {
          'S3OutputPath': '{{s3://your-output-data-bucket/model-folder}}'
      }
      ```

   1. 次のコード例に示すように、モデルトレーニングジョブを実行できる最大秒数を指定します。

      ```
      stopping_condition = {
          'MaxRuntimeInSeconds': {{1800}}
      }
      ```

   1. 最後に、次のコード例に示すように、前のステップで指定したパラメータを使用してトレーニングジョブを作成します。

      ```
      import boto3
      sm = boto3.client('sagemaker')
      try:
          resp = sm.create_training_job(
              TrainingJobName=training_job_name,
              AlgorithmSpecification=algorithm_specification,
              RoleArn=execution_role_arn,
              InputDataConfig=input_data_config,
              OutputDataConfig=output_data_config,
              ResourceConfig=resource_config,
              VpcConfig=vpc_config,
              StoppingCondition=stopping_condition
          )
      except Exception as e:
          print(f'error calling CreateTrainingJob operation: {e}')
      else:
          print(resp)
      ```