쿠키 기본 설정 선택

당사는 사이트와 서비스를 제공하는 데 필요한 필수 쿠키 및 유사한 도구를 사용합니다. 고객이 사이트를 어떻게 사용하는지 파악하고 개선할 수 있도록 성능 쿠키를 사용해 익명의 통계를 수집합니다. 필수 쿠키는 비활성화할 수 없지만 '사용자 지정' 또는 ‘거부’를 클릭하여 성능 쿠키를 거부할 수 있습니다.

사용자가 동의하는 경우 AWS와 승인된 제3자도 쿠키를 사용하여 유용한 사이트 기능을 제공하고, 사용자의 기본 설정을 기억하고, 관련 광고를 비롯한 관련 콘텐츠를 표시합니다. 필수가 아닌 모든 쿠키를 수락하거나 거부하려면 ‘수락’ 또는 ‘거부’를 클릭하세요. 더 자세한 내용을 선택하려면 ‘사용자 정의’를 클릭하세요.

Amazon SageMaker AI가 훈련 이미지를 실행하는 방법

포커스 모드
Amazon SageMaker AI가 훈련 이미지를 실행하는 방법 - Amazon SageMaker AI

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

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

사용자 지정 진입점 스크립트를 사용하여 인프라를 자동화하여 프로덕션 환경에서 훈련할 수 있습니다. 진입점 스크립트를 Docker 컨테이너로 전달하면 이미지를 다시 빌드하지 않고도 독립형 스크립트로 실행할 수도 있습니다. SageMaker AI는 Docker 컨테이너 진입점 스크립트를 사용하여 훈련 이미지를 처리합니다.

이 섹션에서는 훈련 툴킷을 사용하지 않고 사용자 지정 진입점을 사용하는 방법을 보여줍니다. 사용자 지정 진입점을 사용하고 싶지만 Docker 컨테이너를 수동으로 구성하는 방법에 익숙하지 않은 경우 SageMaker 훈련 툴킷 라이브러리를 대신 사용하는 것이 좋습니다. 훈련 툴킷을 사용하는 방법에 대한 자세한 내용은 자체 훈련 컨테이너 가져오기 섹션을 참조하세요.

기본적으로 SageMaker AI는 컨테이너 train 내에서 라는 스크립트를 찾습니다. AlgorithmSpecification API의 ContainerArgumentsContainerEntrypoint 파라미터를 사용하여 사용자 지정 진입점을 수동으로 제공할 수도 있습니다.

다음 두 가지 옵션을 사용하여 이미지를 실행하도록 Docker 컨테이너를 수동으로 구성할 수 있습니다.

  • CreateTrainingJob API와 진입점 명령이 포함된 Docker 컨테이너를 사용합니다.

  • CreateTrainingJob API를 사용하여 Docker 컨테이너 외부에서 훈련 스크립트를 전달합니다.

Docker 컨테이너 외부에서 훈련 스크립트를 전달하는 경우 스크립트를 업데이트할 때 Docker 컨테이너를 다시 빌드할 필요가 없습니다. 또한, 여러 스크립트를 사용하여 동일한 컨테이너에서 실행할 수도 있습니다.

진입점 스크립트에는 이미지에 대한 훈련 코드가 포함되어야 합니다. 추정기 내에서 선택적 source_dir 파라미터를 사용하는 경우, 추정기는 진입점 스크립트가 포함된 폴더로의 상대 Amazon S3 경로를 참조해야 합니다. source_dir 파라미터를 사용하여 여러 파일을 참조할 수 있습니다. source_dir을/를 사용하지 않는 경우 entry_point 파라미터를 사용하여 진입점을 지정할 수 있습니다. 예측기가 포함된 사용자 지정 진입점 스크립트의 예는 SageMaker AI 스크립트 모드로 자체 모델 가져오기를 참조하세요.

SageMaker AI 모델 훈련은 고성능 S3 Express One Zone 디렉터리 버킷을 파일 모드, 빠른 파일 모드 및 파이프 모드의 데이터 입력 위치로 지원합니다. S3 Express One Zone 디렉터리 버킷을 사용하여 훈련 출력을 저장할 수도 있습니다. S3 Express One Zone을 사용하려면 Amazon S3 범용 버킷 대신 S3 Express One Zone 디렉터리 버킷의 URI를 제공합니다. Amazon S3 Amazon S3 관리형 키(SSE-S3)를 사용한 서버 측 암호화를 통해서만 디렉터리 버킷에서 SageMaker AI 출력 데이터를 암호화할 수 있습니다. AWS KMS 키(SSE-KMS)를 사용한 서버 측 암호화는 현재 디렉터리 버킷에 SageMaker AI 출력 데이터를 저장하는 데 지원되지 않습니다. 자세한 내용은 S3 Express One Zone을 참조하세요.

Docker 컨테이너 내에 번들로 제공되는 진입점 스크립트를 사용하여 훈련 작업을 실행하세요

SageMaker AI는 Docker 컨테이너 내에 번들로 제공되는 진입점 스크립트를 실행할 수 있습니다.

  • 기본적으로 Amazon SageMaker AI는 다음 컨테이너를 실행합니다.

    docker run image train
  • SageMaker AI는 이미지 이름 뒤에 train 인수를 지정하여 컨테이너의 기본 CMD 문을 재정의합니다. Docker 컨테이너에서는 exec 형식의 ENTRYPOINT 명령을 사용하세요.

    ENTRYPOINT ["executable", "param1", "param2", ...]

    다음 예제에서는 k-means-algorithm.py라는 python 진입점 명령을 지정하는 방법을 보여줍니다.

    ENTRYPOINT ["python", "k-means-algorithm.py"]

    exec 형식의 ENTRYPOINT 명령은, /bin/sh의 하위로서가 아니라, 실행 파일을 직접 시작합니다. 이를 통해 SageMaker API로부터 SIGTERMSIGKILL과/와 같은 신호를 수신할 수 있습니다. SageMaker API를 사용할 때는 다음 조건이 적용됩니다.

    • CreateTrainingJob API에는 SageMaker AI가 특정 시간 후에 모델 훈련을 중지하도록 지시하는 중지 조건이 있습니다.

    • 다음은 StopTrainingJob API를 보여줍니다. 이 API는 2분의 제한 시간 명령을 가진 docker stop와/과 동일한 명령을 실행하여 지정된 컨테이너를 정상적으로 중지합니다.

      docker stop -t 120

      명령은 SIGTERM 신호를 전송함으로써 실행 중인 컨테이너 중지를 시도합니다. 2분 제한 시간이 지나면 API가 SIGKILL를/을 전송하고 컨테이너를 강제로 중지합니다. 컨테이너가 SIGTERM 신호를 정상적으로 처리하여 신호 수신 후 120초 이내에 종료할 경우 SIGKILL 신호가 전송되지 않습니다.

    SageMaker AI가 훈련을 중지한 후 중간 모델 아티팩트에 액세스하려면 SIGTERM 핸들러에서 저장 아티팩트를 처리하는 코드를 추가합니다.

  • 모델 훈련에 대해 GPU 디바이스를 사용할 계획인 경우 컨테이너가 nvidia-docker와/과 호환되는지 확인해야 합니다. CUDA 도구 키트만이 컨테이너에 포함되어야 합니다. 이미지가 포함된 NVIDIA 드라이버를 번들화하지 마세요. nvidia-docker에 대한 자세한 정보는 NVIDIA/nvidia-docker를 참조하세요.

  • tini 초기화기는 trainserve 인수와 혼동되므로 SageMaker AI 컨테이너에서 진입점 스크립트로 사용할 수 없습니다.

  • /opt/ml 및 모든 하위 디렉터리는 SageMaker 훈련에서 예약합니다. 알고리즘의 도커 이미지를 빌드할 때는 알고리즘에 필요한 데이터를 이 디렉터리에 배치하지 않도록 합니다. 그렇게 하면 훈련 중에 데이터가 더 이상 보이지 않을 수 있기 때문입니다.

Docker 이미지 내에서 쉘 또는 Python 스크립트를 번들링하거나 Amazon S3 버킷에 스크립트를 제공하거나 AWS Command Line Interface (CLI)를 사용하여 스크립트를 제공하려면 다음 섹션으로 계속 진행합니다.

쉘 스크립트를 Docker 컨테이너에 번들로 묶습니다

도커 이미지 내에 사용자 지정 쉘 스크립트를 번들로 묶으려면 다음 단계를 사용합니다.

  1. 쉘 스크립트를 작업 디렉터리에서 Docker 컨테이너 내부로 복사합니다. 다음 코드 스니펫은 현재 작업 디렉터리의 사용자 지정 진입점 스크립트 custom_entrypoint.sh를/을 mydir에 있는 Docker 컨테이너로 복사합니다. 다음 예제에서는 기본 도커 이미지에 Python이 설치되어 있다고 가정합니다.

    FROM <base-docker-image>:<tag> # Copy custom entrypoint from current dir to /mydir on container COPY ./custom_entrypoint.sh /mydir/
  2. Amazon ECR 사용 설명서도커 이미지 푸시에 있는 지침에 따라 Docker 컨테이너를 빌드하고 Amazon Elastic Container Registry(Amazon ECR)로 푸시합니다.

  3. 다음 AWS CLI 명령을 실행하여 훈련 작업을 시작합니다.

    aws --region <your-region> sagemaker create-training-job \ --training-job-name <your-training-job-name> \ --role-arn <your-execution-role-arn> \ --algorithm-specification '{ \ "TrainingInputMode": "File", \ "TrainingImage": "<your-ecr-image>", \ "ContainerEntrypoint": ["/bin/sh"], \ "ContainerArguments": ["/mydir/custom_entrypoint.sh"]}' \ --output-data-config '{"S3OutputPath": "s3://custom-entrypoint-output-bucket/"}' \ --resource-config '{"VolumeSizeInGB":10,"InstanceCount":1,"InstanceType":"ml.m5.2xlarge"}' \ --stopping-condition '{"MaxRuntimeInSeconds": 180}'

Python 스크립트를 Docker 컨테이너에 번들로 묶습니다

도커 이미지 내에 사용자 지정 Python 스크립트를 번들로 묶으려면 다음 단계를 사용합니다.

  1. Python 스크립트를 작업 디렉터리에서 Docker 컨테이너 내부로 복사합니다. 다음 코드 스니펫은 현재 작업 디렉터리의 사용자 지정 진입점 스크립트 custom_entrypoint.py를/을 mydir에 있는 Docker 컨테이너로 복사합니다.

    FROM <base-docker-image>:<tag> # Copy custom entrypoint from current dir to /mydir on container COPY ./custom_entrypoint.py /mydir/
  2. 다음 AWS CLI 명령을 실행하여 훈련 작업을 시작합니다.

    --algorithm-specification '{ \ "TrainingInputMode": "File", \ "TrainingImage": "<your-ecr-image>", \ "ContainerEntrypoint": ["python"], \ "ContainerArguments": ["/mydir/custom_entrypoint.py"]}' \

Docker 컨테이너 외부에서 진입점 스크립트를 사용하여 훈련 작업을 실행합니다

자체 Docker 컨테이너를 훈련에 사용하고 Docker 컨테이너 외부에서 진입점 스크립트를 전달할 수 있습니다. 컨테이너 외부에 진입점 스크립트를 구조화하면 몇 가지 이점이 있습니다. 진입점 스크립트를 업데이트하면 Docker 컨테이너를 다시 빌드할 필요가 없습니다. 또한, 여러 스크립트를 사용하여 동일한 컨테이너에서 실행할 수도 있습니다.

AlgorithmSpecification API의 ContainerEntrypointContainerArguments 파라미터를 사용하여 훈련 스크립트의 위치를 지정합니다. 이러한 진입점 및 인수는 Docker 진입점 및 인수와 동일한 방식으로 동작합니다. 이러한 파라미터의 값은 Docker 컨테이너의 일부로 제공된 관련 ENTRYPOINT 또는 CMD 값을 재정의합니다.

사용자 지정 진입점 스크립트를 Docker 훈련 컨테이너에 전달할 때 제공하는 입력에 따라 컨테이너의 행동이 결정됩니다.

  • 예를 들어, ContainerEntrypoint만 제공하는 경우 CreateTrainingJob API를 사용한 요청 구문은 다음과 같습니다.

    { "AlgorithmSpecification": { "ContainerEntrypoint": ["string"], ... } }

    그런 다음 SageMaker 훈련 백엔드는 다음과 같이 사용자 지정 진입점을 실행합니다.

    docker run --entrypoint <ContainerEntrypoint> image
    참고

    ContainerEntrypoint가/이 제공되는 경우 SageMaker 훈련 백엔드는 지정된 진입점을 가진 이미지를 실행하고 이미지의 기본값 ENTRYPOINT을/를 재정의합니다.

  • 만 제공하는 경우 ContainerArguments SageMaker AI는 Docker 컨테이너에 진입점 스크립트가 포함되어 있다고 가정합니다. CreateTrainingJob API를 사용하는 요청 구문은 다음과 같습니다.

    { "AlgorithmSpecification": { "ContainerArguments": ["arg1", "arg2"], ... } }

    SageMaker 훈련 백엔드는 다음과 같이 사용자 지정 진입점을 실행합니다.

    docker run image <ContainerArguments>
  • ContainerEntrypointContainerArguments를 모두 제공하는 경우 CreateTrainingJob API를 사용하는 요청 구문은 다음과 같습니다.

    { "AlgorithmSpecification": { "ContainerEntrypoint": ["string"], "ContainerArguments": ["arg1", "arg2"], ... } }

    SageMaker 훈련 백엔드는 다음과 같이 사용자 지정 진입점을 실행합니다.

    docker run --entrypoint <ContainerEntrypoint> image <ContainerArguments>

CreateTrainingJob API에서 지원되는 모든 InputDataConfig 소스를 사용하여 훈련 이미지를 실행하기 위한 진입점 스크립트를 제공할 수 있습니다.

Amazon S3 버킷에 진입점 스크립트를 제공합니다

S3 버킷을 사용하여 사용자 지정 진입점 스크립트를 제공하려면 DataSource API의 S3DataSource 파라미터를 사용하여 스크립트 위치를 지정합니다. S3DataSource 파라미터를 사용하는 경우 다음이 필요합니다.

다음 예제에는 S3 버킷 경로 s3://<bucket-name>/<bucket prefix>/custom_entrypoint.sh에 custom_entrypoint.sh 라는 스크립트가 있습니다.

#!/bin/bash echo "Running custom_entrypoint.sh" echo "Hello you have provided the following arguments: " "$@"

다음으로, 훈련 작업을 실행하기 위한 입력 데이터 채널의 구성을 설정해야 합니다. 를 AWS CLI 직접 사용하거나 JSON 파일과 함께 이를 수행합니다.

JSON 파일과 AWS CLI 함께를 사용하여 입력 데이터 채널 구성

JSON 파일로 입력 데이터 채널을 구성하려면 다음 코드 구조와 AWS CLI 같이를 사용합니다. 다음 모든 필드가 CreateTrainingJob API에 정의된 요청 구문을 사용하는지 확인하세요.

// run-my-training-job.json { "AlgorithmSpecification": { "ContainerEntrypoint": ["/bin/sh"], "ContainerArguments": ["/opt/ml/input/data/<your_channel_name>/custom_entrypoint.sh"], ... }, "InputDataConfig": [ { "ChannelName": "<your_channel_name>", "DataSource": { "S3DataSource": { "S3DataDistributionType": "FullyReplicated", "S3DataType": "S3Prefix", "S3Uri": "s3://<bucket-name>/<bucket_prefix>" } }, "InputMode": "File", }, ...] }

그런 다음 AWS CLI 명령을 실행하여 다음과 같이 JSON 파일에서 훈련 작업을 시작합니다.

aws sagemaker create-training-job --cli-input-json file://run-my-training-job.json

AWS CLI 직접를 사용하여 입력 데이터 채널 구성

JSON 파일 없이 입력 데이터 채널을 구성하려면 다음 AWS CLI 코드 구조를 사용합니다.

aws --region <your-region> sagemaker create-training-job \ --training-job-name <your-training-job-name> \ --role-arn <your-execution-role-arn> \ --algorithm-specification '{ \ "TrainingInputMode": "File", \ "TrainingImage": "<your-ecr-image>", \ "ContainerEntrypoint": ["/bin/sh"], \ "ContainerArguments": ["/opt/ml/input/data/<your_channel_name>/custom_entrypoint.sh"]}' \ --input-data-config '[{ \ "ChannelName":"<your_channel_name>", \ "DataSource":{ \ "S3DataSource":{ \ "S3DataType":"S3Prefix", \ "S3Uri":"s3://<bucket-name>/<bucket_prefix>", \ "S3DataDistributionType":"FullyReplicated"}}}]' \ --output-data-config '{"S3OutputPath": "s3://custom-entrypoint-output-bucket/"}' \ --resource-config '{"VolumeSizeInGB":10,"InstanceCount":1,"InstanceType":"ml.m5.2xlarge"}' \ --stopping-condition '{"MaxRuntimeInSeconds": 180}'
프라이버시사이트 이용 약관쿠키 기본 설정
© 2025, Amazon Web Services, Inc. 또는 계열사. All rights reserved.