기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
자체 처리 컨테이너 빌드(고급 시나리오)
Amazon SageMaker Processing에 자체 코드와 종속성이 있는 Docker 이미지를 제공하여 데이터 처리, 기능 엔지니어링 및 모델 평가 워크로드를 실행할 수 있습니다.
Dockerfile의 다음 예제는 처리 작업으로 실행할 수 있는 Python 라이브러리 scikit-learn 및 pandas로 컨테이너를 빌드합니다.
FROM python:3.7-slim-buster # Install scikit-learn and pandas RUN pip3 install pandas==0.25.3 scikit-learn==0.21.3 # Add a Python script and configure Docker to run it ADD processing_script.py / ENTRYPOINT ["python3", "/processing_script.py"]
처리 스크립트의 예는 처리 시작을
이 Docker 이미지를 빌드하여 Amazon Elastic Container 레지스트리 (Amazon ECR) 리포지토리에 푸시하고 SageMaker IAM 역할이 Amazon ECR에서 이미지를 가져올 수 있는지 확인하십시오. 그러면 Amazon SageMaker 프로세싱에서 이 이미지를 실행할 수 있습니다.
Amazon SageMaker 프로세싱에서 처리 컨테이너 이미지를 실행하는 방법
Amazon SageMaker Processing은 다음 명령과 비슷한 방식으로 처리 컨테이너 이미지를 실행합니다. 여기서 AppSpecification.ImageUri
는 CreateProcessingJob
작업에서 지정하는 Amazon ECR 이미지 URI입니다.
docker run [AppSpecification.ImageUri]
이 명령은 Docker 이미지에 구성된 ENTRYPOINT
명령을 실행합니다.
또한 이미지의 엔트리포인트 명령을 재정의하거나 CreateProcessingJob
요청에서 AppSpecification.ContainerEntrypoint
및 AppSpecification.ContainerArgument
파라미터를 사용하여 엔트리포인트 명령에 명령줄 인수를 제공할 수 있습니다. 이러한 파라미터를 지정하면 Amazon SageMaker Processing이 다음 명령과 비슷한 방식으로 컨테이너를 실행하도록 구성합니다.
docker run --entry-point [AppSpecification.ContainerEntrypoint] [AppSpecification.ImageUri] [AppSpecification.ContainerArguments]
예를 들어 [python3, -v, /processing_script.py]
CreateProcessingJob
요청에서 를 be, ContainerEntrypoint
to be 로 지정하는 경우 Amazon SageMaker Processing은 [data-format, csv]
다음 명령을 사용하여 컨테이너를 실행합니다. ContainerArguments
python3 -v /processing_script.py data-format csv
처리 컨테이너를 빌드할 때 다음 세부 사항을 고려하십시오.
-
Amazon SageMaker Processing은 명령 실행의 종료 코드에 따라 작업 완료 또는 실패 여부를 결정합니다. 처리 작업은 모든 처리 컨테이너가 종료 코드 0으로 성공적으로 종료되면 완료가 되고, 컨테이너가 0이 아닌 종료 코드로 종료되면 실패합니다.
-
Amazon SageMaker Processing을 사용하면 Docker API와 마찬가지로 처리 컨테이너의 진입점을 재정의하고 명령줄 인수를 설정할 수 있습니다. Docker 이미지는
ENTRYPOINT
및 CMD 명령을 사용하여 엔트리포인트 및 명령줄 인수를 구성할 수도 있습니다. 방식CreateProcessingJob
의ContainerEntrypoint
및ContainerArgument
파라미터는 Docker 이미지의 엔트리포인트를 구성하고 인수는 Docker가 Docker API를 통해 엔트리포인트와 인수를 재정의하는 방법을 미러링합니다.-
ContainerEntrypoint
와ContainerArguments
가 둘 다 제공되지 않는 경우, Processing은 이미지의 기본ENTRYPOINT
또는 CMD를 사용합니다. -
ContainerEntrypoint
가 제공되지만ContainerArguments
는 제공되지 않는 경우, Processing은 지정된 진입점으로 이미지를 실행하고 이미지의ENTRYPOINT
및 CMD를 무시합니다. -
ContainerArguments
가 제공되지만ContainerEntrypoint
는 제공되지 않는 경우, Processing은 이미지의 기본ENTRYPOINT
및 제공된 인수로 이미지를 실행합니다. -
ContainerEntrypoint
및ContainerArguments
가 둘 다 제공되는 경우, Processing은 지정된 진입점 및 인수로 이미지를 실행하고 이미지의ENTRYPOINT
및 CMD를 무시합니다.
-
-
먼저 Dockerfile에서
ENTRYPOINT
지침의 exec 양식을 사용해야 합니다(쉘 양식(ENTRYPOINT
command param1 param2
) 대신ENTRYPOINT
["executable", "param1", "param2"])
). 그러면 처리 컨테이너가SIGINT
및SIGKILL
신호를 수신할 수 있게 됩니다. Processing은 이 신호들을 이용하여StopProcessingJob
API로 처리 작업을 중지시킵니다. -
/opt/ml
모든 하위 디렉터리는 에서 예약합니다. SageMaker Processing Docker 이미지를 빌드할 경우, 처리 컨테이너에서 필요로 하는 데이터 중 어떤 것도 이 디렉터리에 배치하지 마세요. -
GPU 디바이스를 사용할 계획이라면 컨테이너가 nvidia-docker와 호환되는지 확인하십시오. 컨테이너에 CUDA 도구 키트만 포함하십시오. 이미지가 포함된 NVIDIA 드라이버를 번들화하지 마십시오. nvidia-docker에 대한 추가 정보는 NVIDIA/nvidia-docker
를 참조하십시오.
Amazon SageMaker 프로세싱이 처리 컨테이너의 입력 및 출력을 구성하는 방법
CreateProcessingJob
작업을 사용하여 처리 작업을 생성할 때 여러 개의 ProcessingInput
및 ProcessingOutput
값을 지정할 수 있습니다.
ProcessingInput
파라미터를 사용하여 데이터의 다운로드 출처가 될 Amazon Simple Storage Service(Amazon S3) URI를, 그리고 데이터의 다운로드 대상이 될 처리 컨테이너의 경로를 지정하세요. ProcessingOutput
파라미터는 데이터의 업로드 출처가 될 처리 컨테이너의 경로를, 그리고 해당 데이터의 업로드 대상이 될 Amazon S3의 경로를 구성합니다. ProcessingInput
및 ProcessingOutput
모두에서 처리 컨테이너의 경로는 /opt/ml/processing/
으로 시작해야 합니다.
예를 들어 s3://your-data-bucket/path/to/input/csv/data
에서 처리 컨테이너의 /opt/ml/processing/csv
로 데이터를 다운로드하는 ProcessingInput
파라미터가 있는 처리 작업과 /opt/ml/processing/processed_csv
에서 s3://your-data-bucket/path/to/output/csv/data
로 데이터를 업로드하는 ProcessingOutput
파라미터가 있는 처리 작업을 생성할 수 있습니다. 처리 작업은 입력 데이터를 읽고 출력 데이터를 /opt/ml/processing/processed_csv
에 씁니다. 그런 다음 이 경로에 쓴 데이터를 지정된 Amazon S3 출력 위치에 업로드합니다.
중요
심볼 링크(symlink)는 출력 데이터를 Amazon S3에 업로드하는 데 사용할 수 없습니다. 출력 데이터를 업로드할 때는 symlink를 따르지 않습니다.
Amazon SageMaker Processing이 처리 컨테이너에 대한 로그 및 지표를 제공하는 방법
처리 컨테이너가 stdout
또는 stderr
에 데이터를 쓰면 Amazon SageMaker Processing은 각 처리 컨테이너의 출력을 저장하고 Amazon CloudWatch 로그에 저장합니다. 로깅에 대한 자세한 내용은 아마존에서 아마존 SageMaker 이벤트를 기록하세요 CloudWatch 단원을 참조하세요.
Amazon SageMaker Processing은 처리 컨테이너를 실행하는 각 인스턴스에 대한 CloudWatch 지표도 제공합니다. 지표에 대한 추가 정보는 SageMaker 아마존과 아마존을 모니터링하세요 CloudWatch 섹션을 참조하십시오.
Amazon SageMaker 프로세싱이 처리 컨테이너를 구성하는 방법
Amazon SageMaker Processing은 컨테이너의 사전 정의된 위치에 있는 환경 변수와 두 개의 JSON 파일 (/opt/ml/config/processingjobconfig.json
및/opt/ml/config/resourceconfig.json
) 을 통해 처리 컨테이너에 구성 정보를 제공합니다.
처리 작업이 시작되면 CreateProcessingJob
요청의 Environment
맵으로 지정한 환경 변수가 사용됩니다. 이 /opt/ml/config/processingjobconfig.json
파일에는 처리 컨테이너의 호스트 이름에 대한 정보가 포함되어 있으며 CreateProcessingJob
요청에도 지정됩니다.
다음 예제에서는 /opt/ml/config/processingjobconfig.json
파일의 형식을 보여줍니다.
{ "ProcessingJobArn": "<processing_job_arn>", "ProcessingJobName": "<processing_job_name>", "AppSpecification": { "ImageUri": "<image_uri>", "ContainerEntrypoint": null, "ContainerArguments": null }, "Environment": { "KEY": "VALUE" }, "ProcessingInputs": [ { "InputName": "input-1", "S3Input": { "LocalPath": "/opt/ml/processing/input/dataset", "S3Uri": "<s3_uri>", "S3DataDistributionType": "FullyReplicated", "S3DataType": "S3Prefix", "S3InputMode": "File", "S3CompressionType": "None", "S3DownloadMode": "StartOfJob" } } ], "ProcessingOutputConfig": { "Outputs": [ { "OutputName": "output-1", "S3Output": { "LocalPath": "/opt/ml/processing/output/dataset", "S3Uri": "<s3_uri>", "S3UploadMode": "EndOfJob" } } ], "KmsKeyId": null }, "ProcessingResources": { "ClusterConfig": { "InstanceCount": 1, "InstanceType": "ml.m5.xlarge", "VolumeSizeInGB": 30, "VolumeKmsKeyId": null } }, "RoleArn": "<IAM role>", "StoppingCondition": { "MaxRuntimeInSeconds": 86400 } }
/opt/ml/config/resourceconfig.json
파일에는 처리 컨테이너의 호스트 이름에 대한 정보가 포함되어 있습니다. 분산 처리 코드를 생성하거나 실행할 때 다음 호스트 이름을 사용합니다.
{ "current_host": "algo-1", "hosts": ["algo-1","algo-2","algo-3"] }
/etc/hostname
또는 /etc/hosts
에 포함된 호스트 이름에 대한 정보는 정확하지 않을 수 있으므로 사용하지 마십시오.
호스트 이름은 처리 컨테이너에서 즉시 사용하지 못할 수 있습니다. 클러스터에서 호스트 이름 확인 작업에 대한 재시도 정책을 노드로 추가하도록 설정하는 것이 좋습니다.
처리 작업에 대한 메타데이터 정보 저장 및 액세스
처리 컨테이너를 종료한 후 메타데이터를 저장하기 위해 컨테이너는 UTF-8로 인코딩된 텍스트를 /opt/ml/output/message
파일에 쓸 수 있습니다. 처리 작업이 터미널 상태("Completed
", "Stopped
" 또는 "Failed
")가 되고 나면 DescribeProcessingJob
의 "ExitMessage
" 필드에 이 파일의 첫 1KB가 포함됩니다. DescribeProcessingJob
을 호출하여 파일의 첫 부분에 액세스하여 ExitMessage
파라미터를 통해 반환합니다. 실패한 처리 작업의 경우 이 필드를 사용하여 처리 컨테이너가 실패한 이유를 알릴 수 있습니다.
중요
민감한 데이터를 /opt/ml/output/message
파일에 쓰지 마십시오.
이 파일의 데이터가 UTF-8로 인코딩되지 않으면 작업이 실패하고 ClientError
를 반환합니다. 여러 컨테이너가 ExitMessage,
에서 종료되면 각 처리 컨테이너의 ExitMessage
콘텐츠가 연결된 다음 1KB로 잘립니다.
SageMaker Python SDK를 사용하여 처리 컨테이너 실행
SageMaker Python SDK를 사용하면 Processor
클래스를 사용하여 자체 처리 이미지를 실행할 수 있습니다. 다음 예제에서는 Amazon S3(Amazon Simple Storage Service)의 입력 1개 및 Amazon S3에 대한 출력 1개로 자체 처리 컨테이너를 실행하는 방법을 보여줍니다.
from sagemaker.processing import Processor, ProcessingInput, ProcessingOutput processor = Processor(image_uri='<your_ecr_image_uri>', role=role, instance_count=1, instance_type="ml.m5.xlarge") processor.run(inputs=[ProcessingInput( source='<s3_uri or local path>', destination='/opt/ml/processing/input_data')], outputs=[ProcessingOutput( source='/opt/ml/processing/processed_data', destination='<s3_uri>')], )
처리 코드를 처리 이미지에 빌드하는 대신, 자체 이미지와 실행할 명령을 해당 컨테이너 내에서 실행할 코드와 함께 ScriptProcessor
에 제공할 수 있습니다. 예는 자체 처리 컨테이너로 스크립트 실행를 참조하세요.
Amazon SageMaker Processing에서 제공하는 scikit-learn 이미지를 사용하여 scikit-learn 스크립트를 실행할 수도 있습니다. SKLearnProcessor
관련 예제는 Sci-kit Learn을 사용한 데이터 프로세싱을 참조하세요.