

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 프라이빗 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) 및 훈련 작업을 구성하고, 이미지를 저장하고, SageMaker AI에게 프라이빗 Docker 레지스트리의 훈련 이미지에 대한 액세스 권한을 부여하는 방법을 보여줍니다. 또한 이 지침은 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`를 입력합니다.
+ 알려진 퍼블릭 인증 기관의 [TLS 인증서](https://aws.amazon.com/what-is/ssl-certificate/)로 보호됩니다.

Docker 레지스트리 생성에 대한 자세한 내용은 [레지스트리 서버 배포](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에 연결하도록 훈련 작업을 구성해야 합니다. 자세한 내용은 [Amazon VPC 액세스를 위한 훈련 작업 구성](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` 객체를 추가해야 합니다. 또한 `TrainingRepositoryAuthConfig` 객체의 `TrainingRepositoryCredentialsProviderArn` 필드를 사용하여 SageMaker AI에 대한 액세스 자격 증명을 제공하는 AWS Lambda 함수의 Amazon 리소스 이름(ARN)을 지정해야 합니다. 자세한 내용은 아래의 예제 코드 구조를 참조하세요.  

   ```
   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\$1training\$1job](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에 있지 않은 경우 두 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)
      ```

# SageMaker AI 예측기를 사용하여 훈련 작업 실행
<a name="docker-containers-adapt-your-own-private-registry-estimator"></a>

SageMaker Python SDK의 [예측기](https://sagemaker.readthedocs.io/en/stable/api/training/estimators.html)를 사용하여 SageMaker 훈련 작업의 구성 및 실행을 처리할 수도 있습니다. 다음 코드 예제에서는 프라이빗 Docker 레지스트리의 이미지를 사용해 예측기를 구성하고 실행하는 방법을 보여줍니다.

1. 다음 코드 예제와 같이 필수 라이브러리와 종속성을 가져오세요.

   ```
   import boto3
   import sagemaker
   from sagemaker.estimator import Estimator
   
   session = sagemaker.Session()
   
   role = sagemaker.get_execution_role()
   ```

1. 다음 코드 예제와 같이 훈련 작업의 VPC 구성을 위한 훈련 이미지, 보안 그룹 및 서브넷에 통합 리소스 식별자(URI)를 제공합니다.

   ```
   image_uri = "myteam.myorg.com/docker-local/my-training-image:<IMAGE-TAG>"
   
   security_groups = ["sg-0123456789abcdef0"]
   subnets = ["subnet-0123456789abcdef0", "subnet-0123456789abcdef0"]
   ```

   `security_group_ids` 및 `subnets`에 대한 자세한 내용은 SageMaker Python SDK의 [예측기](https://sagemaker.readthedocs.io/en/stable/api/training/estimators.html) 섹션에서 해당 파라미터 설명을 참조하세요.
**참고**  
SageMaker AI는 VPC 내의 네트워크 연결을 사용하여 Docker 레지스트리의 이미지에 액세스합니다. Docker 레지스트리의 이미지를 훈련에 사용하려면 계정의 Amazon VPC에서 레지스트리에 액세스할 수 있어야 합니다.

1. 선택적으로 Docker 레지스트리에 인증이 필요한 경우 SageMaker AI에 액세스 자격 증명을 제공하는 AWS Lambda 함수의 Amazon 리소스 이름(ARN)도 지정해야 합니다. 다음 코드 예제는 ARN을 지정하는 방법을 보여줍니다.

   ```
   training_repository_credentials_provider_arn = "arn:aws:lambda:us-west-2:1234567890:function:test"
   ```

   인증이 필요한 Docker 레지스트리에서 이미지를 사용하는 방법에 대한 자세한 내용은 아래의 **훈련을 위해 위해 인증이 필요한 Docker 레지스트리 사용**을 참조하세요.

1. 다음 코드 예제와 같이 이전 단계의 코드 예제를 사용하여 예측기를 구성하세요.

   ```
   # The training repository access mode must be 'Vpc' for private docker registry jobs 
   training_repository_access_mode = "Vpc"
   
   # Specify the instance type, instance count you want to use
   instance_type="ml.m5.xlarge"
   instance_count=1
   
   # Specify the maximum number of seconds that a model training job can run
   max_run_time = 1800
   
   # Specify the output path for the model artifacts
   output_path = "s3://your-output-bucket/your-output-path"
   
   estimator = Estimator(
       image_uri=image_uri,
       role=role,
       subnets=subnets,
       security_group_ids=security_groups,
       training_repository_access_mode=training_repository_access_mode,
       training_repository_credentials_provider_arn=training_repository_credentials_provider_arn,  # remove this line if auth is not needed
       instance_type=instance_type,
       instance_count=instance_count,
       output_path=output_path,
       max_run=max_run_time
   )
   ```

1. 다음 코드 예제와 같이 작업 이름과 입력 경로를 파라미터로 사용해 `estimator.fit`를 호출하여 훈련 작업을 시작합니다.

   ```
   input_path = "s3://your-input-bucket/your-input-path"
   job_name = "your-job-name"
   
   estimator.fit(
       inputs=input_path,
       job_name=job_name
   )
   ```

# 훈련을 위해 인증이 필요한 Docker 레지스트리 사용
<a name="docker-containers-adapt-your-own-private-registry-authentication"></a>

Docker 레지스트리에 인증이 필요한 경우 SageMaker AI에 액세스 자격 증명을 제공하는 AWS Lambda 함수를 생성해야 합니다. 그런 다음, 훈련 작업을 생성하고 [create\$1training\$1job](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_training_job) API 내에 이 Lambda 함수의 ARN을 제공하세요. 마지막으로, 선택적으로 인터페이스 VPC 엔드포인트를 생성하여 VPC가 인터넷을 통해 트래픽을 전송하지 않고도 Lambda 함수와 통신할 수 있도록 할 수 있습니다. 다음 안내서는 Lambda 함수를 생성하고, 함수에 올바른 역할을 할당하고, 인터페이스 VPC 엔드포인트를 생성하는 방법을 보여줍니다.

## Lambda 함수 생성
<a name="docker-containers-adapt-your-own-private-registry-authentication-create-lambda"></a>

액세스 자격 증명을 SageMaker AI에 전달하고 응답을 반환하는 AWS Lambda 함수를 생성합니다. 다음 코드 예제는 다음과 같이 Lambda 함수 핸들러를 생성합니다.

```
def handler(event, context):
   response = {
      "Credentials": {"Username": "username", "Password": "password"}
   }
   return response
```

프라이빗 Docker 레지스트리를 설정하는 데 사용되는 인증 유형에 따라 다음과 같이 Lambda 함수가 반환하는 응답의 내용이 결정됩니다.
+ 프라이빗 Docker 레지스트리가 기본 인증을 사용하는 경우 Lambda 함수는 레지스트리 인증에 필요한 사용자 이름과 암호를 반환합니다.
+ 프라이빗 Docker 레지스트리에서 [보유자 토큰 인증](https://docs.docker.com/registry/spec/auth/token/)을 사용하는 경우 사용자 이름과 암호가 권한 부여 서버로 전송되고 권한 부여 서버는 보유자 토큰을 반환합니다. 그러면 이 토큰을 사용하여 프라이빗 Docker 레지스트리를 인증합니다.

**참고**  
동일한 계정에 레지스트리용 Lambda 함수가 두 개 이상 있고 훈련 작업에 대한 실행 역할이 동일하다면, 레지스트리 하나에 대한 훈련 작업은 다른 레지스트리의 Lambda 함수에 액세스할 수 있습니다.

## Lambda 함수에 올바른 역할 권한을 부여합니다.
<a name="docker-containers-adapt-your-own-private-registry-authentication-lambda-role"></a>

`create_training_job` API에서 사용하는 [IAMrole](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-roles.html)는 AWS Lambda 함수를 호출할 수 있는 권한이 있어야 합니다. 다음 코드 예제는 `myLambdaFunction`을 호출하기 위해 IAM 역할의 권한 정책을 확장하는 방법을 보여줍니다.

```
{
    "Effect": "Allow",
    "Action": [
        "lambda:InvokeFunction"
    ],
    "Resource": [
        "arn:aws:lambda:*:*:function:*myLambdaFunction*"
    ]
}
```

역할 권한 정책을 편집하는 방법에 대한 자세한 내용은 [https://docs.aws.amazon.com/IAM/latest/UserGuide/roles-managingrole-editing-console.html#roles-modify_permissions-policy](https://docs.aws.amazon.com/IAM/latest/UserGuide/roles-managingrole-editing-console.html#roles-modify_permissions-policy)*AWS ID 및 액세스 관리 사용 설명서*의 역할 권한 정책 수정(콘솔)을 참조하세요.

**참고**  
**AmazonSageMakerFullAccess** 관리형 정책이 연결된 IAM 역할은 이름에 “SageMaker AI”가 포함된 모든 Lambda 함수를 직접적으로 호출할 수 있는 권한을 갖습니다.

## Lambda에 대한 인터페이스 VPC 엔드포인트를 생성하려면()
<a name="docker-containers-adapt-your-own-private-registry-authentication-lambda-endpoint"></a>

마지막으로, 인터페이스 엔드포인트를 생성할 경우, Amazon VPC가 인터넷을 통해 트래픽을 전송하지 않고도 Lambda 함수와 통신할 수 있습니다. 자세한 내용은 *AWS Lambda 개발자 안내서*에서 [Lambda에 대한 인터페이스 VPC 엔드포인트 구성](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc-endpoints.html)을 참조하세요.

인터페이스 엔드포인트가 생성되면 SageMaker 훈련은 VPC를 통해 요청을 `lambda.region.amazonaws.com`에 전송하여 Lambda 함수를 호출합니다. 인터페이스 엔드포인트를 생성할 때 **DNS 이름 활성화**를 선택하면 [Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html)은 Lambda 인터페이스 엔드포인트로 호출을 라우팅합니다. 다른 DNS 공급자를 사용하는 경우 `lambda.region.amazonaws.co`m을 Lambda 인터페이스 엔드포인트에 매핑해야 합니다.