

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 針對 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。
+ 失敗原因包括步驟失敗的簡要說明。
+ 如果步驟是條件步驟，則會包含條件是否評估為真或假。  
+ 如果執行作業重複使用先前的任務執行，則 `CacheHit` 會列出來源執行項目。  

您也可以在 Amazon SageMaker Studio 介面中檢視錯誤訊息和日誌。如需有關如何在 Studio 中查看日誌的資訊，請參閱[檢視管道執行的詳細資訊](pipelines-studio-view-execution.md)。

 **缺少許可** 

建立管道執行的角色以及在管道執行中建立每個作業的步驟都需要正確的權限。如果沒有這些許可，您可能無法如預期般提交管道執行或執行 SageMaker AI 任務。要確保正確設定許可，請參閱[IAM 存取管理](build-and-manage-access.md)。

 **工作執行錯誤** 

由於定義 SageMaker AI 任務功能的命令碼中發生問題，您可能會在執行步驟時遇到問題。每個工作都有一組 CloudWatch 日誌。要在 Studio 中檢視這些日誌，請參閱[檢視管道執行的詳細資訊](pipelines-studio-view-execution.md)。如需使用 CloudWatch 日誌搭配 SageMaker AI 的相關資訊，請參閱[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=(.*?);'}
    ],
)
```