

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

# Amazon SageMaker Pipelines 문제 해결
<a name="pipelines-troubleshooting"></a>

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

 **파이프라인 정의 문제** 

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

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

 **파이프라인 로그 검사** 

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

```
execution.list_steps()
```

각 단계에는 다음 정보가 포함됩니다.
+ 파이프라인에서 시작된 엔터티의 ARN(예: SageMaker AI 작업 ARN, 모델 ARN 또는 모델 패키지 ARN) 
+ 실패 이유에는 단계 실패에 대한 간략한 설명이 포함됩니다.
+ 단계가 조건 단계인 경우 조건의 true 또는 false 평가 여부가 포함됩니다.  
+ 실행에서 이전 작업 실행을 재사용하는 경우 `CacheHit`에 소스 실행이 나열됩니다.  

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

 **권한 누락** 

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

 **작업 실행 오류** 

SageMaker AI 작업의 기능을 정의하는 스크립트의 문제로 인해 단계를 실행할 때 문제가 발생할 수 있습니다. 각 작업에는 일련의 CloudWatch 로그가 있습니다.스튜디오에서 이러한 로그를 보려면 [파이프라인 실행 세부 정보 보기](pipelines-studio-view-execution.md)섹션을 참조하세요. SageMaker AI에서 CloudWatch를 사용하는 방법에 대한 자세한 내용은 [Amazon SageMaker AI용 CloudWatch Logs](logging-cloudwatch.md) 섹션을 참조하세요.

 **속성 파일 오류** 

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

 **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=(.*?);'}
    ],
)
```