Amazon SageMaker Pipelines 문제 해결 - Amazon SageMaker

Amazon SageMaker Pipelines 문제 해결

Amazon SageMaker Pipelines을 사용할 때 여러 가지 이유로 문제가 발생할 수 있습니다. 이 항목에서는 일반적인 오류와 해결 방법에 대한 정보를 제공합니다.

파이프라인 정의 문제

파이프라인 정의의 형식이 올바르지 않을 수 있습니다. 이로 인해 실행이 실패하거나 작업이 정확하지 않을 수 있습니다. 이러한 오류는 파이프라인이 생성되거나 실행이 발생할 때 발견될 수 있습니다. 정의가 검증되지 않는 경우 Pipelines은 JSON 파일 형식이 잘못된 문자를 식별하는 오류 메시지를 반환합니다. 이 문제를 해결하려면 SageMaker Python SDK를 사용하여 생성된 단계가 정확한지 검토하세요.

파이프라인 정의에는 단계를 한 번만 포함할 수 있습니다. 따라서 단계는 조건 단계 및 파이프라인의 일부로 동일한 파이프라인에 존재할 수 없습니다.

파이프라인 로그 검사

다음 명령을 사용하여 단계의 상태를 볼 수 있습니다.

execution.list_steps()

각 단계에는 다음 정보가 포함됩니다.

  • 파이프라인에서 시작된 엔터티의 ARN(예: SageMaker 작업 ARN, 모델 ARN 또는 모델 패키지 ARN).

  • 실패 이유에는 단계 실패에 대한 간략한 설명이 포함됩니다.

  • 단계가 조건 단계인 경우 조건의 true 또는 false 평가 여부가 포함됩니다. 

  • 실행에서 이전 작업 실행을 재사용하는 경우 CacheHit에 소스 실행이 나열됩니다. 

Amazon SageMaker Studio 인터페이스에서 오류 메시지와 로그를 볼 수도 있습니다. 스튜디오에서 로그를 확인하는 방법에 대한 자세한 내용은 파이프라인 실행 세부 정보 보기섹션을 참조하세요.

권한 누락

파이프라인 실행을 생성하는 역할과 파이프라인 실행에서 각 작업을 생성하는 단계에 올바른 권한이 필요합니다. 이러한 권한이 없으면 파이프라인 실행 제출 또는 SageMaker 작업을 예상대로 실행하지 못할 수 있습니다. 권한이 제대로 설정되었는지 확인하려면 IAM 액세스 관리섹션을 참조하세요.

작업 실행 오류

SageMaker 작업의 기능을 정의하는 스크립트의 문제로 인해 단계를 실행할 때 문제가 발생할 수 있습니다. 각 작업에는 일련의 CloudWatch 로그가 있습니다.스튜디오에서 이러한 로그를 보려면 파이프라인 실행 세부 정보 보기섹션을 참조하세요. SageMaker에서 CloudWatch를 사용하는 방법에 대한 자세한 내용은 Amazon SageMaker가 Amazon CloudWatch Logs로 전송하는 로그 그룹 및 스트림섹션을 참조하세요.

속성 파일 오류

파이프라인으로 속성 파일을 잘못 구현하면 문제가 발생할 수 있습니다. 속성 파일 구현이 예상대로 작동하도록 하려면 단계 간 데이터 전달섹션을 참조하세요.

Dockerfile의 컨테이너에 스크립트 복사 문제

다음 코드 샘플에 나와 있는 것처럼 스크립트를 컨테이너에 복사하거나 추정기 엔터티의 entry_point 인수 또는 프로로세서 엔터티의 code 인수를 통해 전달할 수 있습니다.

step_process = ProcessingStep( name="PreprocessAbaloneData", processor=sklearn_processor, inputs = [ ProcessingInput( input_name='dataset', source=..., destination="/opt/ml/processing/code", ) ], outputs=[ ProcessingOutput(output_name="train", source="/opt/ml/processing/train", destination = processed_data_path), ProcessingOutput(output_name="validation", source="/opt/ml/processing/validation", destination = processed_data_path), ProcessingOutput(output_name="test", source="/opt/ml/processing/test", destination = processed_data_path), ], code=os.path.join(BASE_DIR, "process.py"), ## Code is passed through an argument cache_config = cache_config, job_arguments = ['--input', 'arg1'] ) sklearn_estimator = SKLearn( entry_point=os.path.join(BASE_DIR, "train.py"), ## Code is passed through the entry_point framework_version="0.23-1", instance_type=training_instance_type, role=role, output_path=model_path, # New sagemaker_session=sagemaker_session, # New instance_count=1, # New base_job_name=f"{base_job_prefix}/pilot-train", metric_definitions=[ {'Name': 'train:accuracy', 'Regex': 'accuracy_train=(.*?);'}, {'Name': 'validation:accuracy', 'Regex': 'accuracy_validation=(.*?);'} ], )