

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 对亚马逊 SageMaker 管道进行故障排除
<a name="pipelines-troubleshooting"></a>

在使用 Amaz SageMaker on Pipelines 时，您可能会因为各种原因遇到问题。本主题提供有关常见错误以及如何解决这些错误的信息。

 **管道定义问题** 

您的管道定义可能格式不正确。这可能会导致  执行失败或作业不准确。可以在创建管道或执行管道时捕获这些错误。如果定义未通过验证，Pipelines 会返回一条错误信息，指出 JSON 文件畸形的字符。要修复此问题，请查看使用 SageMaker AI Python SDK 创建的步骤以确保准确性。

您只能在管道定义中包含一次步骤。因此，步骤不能作为条件步骤*和* 管道的一部分存在于同一管道中。

 **检查管道日志** 

您可以使用以下命令查看步骤的状态：

```
execution.list_steps()
```

每个步骤包含以下信息：
+ 管道启动的实体的 ARN，例如 SageMaker AI 作业 ARN、模型 ARN 或模型包 ARN。
+ 失败原因包括对步骤失败的简要说明。
+ 如果该步骤是条件步骤，则包括条件评估为 true 还是 false。  
+ 如果执行重复使用先前的作业执行，则 `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)。有关在 SageMaker AI 中使用 CloudWatch 日志的信息，请参阅[CloudWatch 亚马逊 A SageMaker I 的日志](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=(.*?);'}
    ],
)
```