本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
对亚马逊 SageMaker 管道进行故障排除
在使用 Amaz SageMaker on Pipelines 时,您可能会因为各种原因遇到问题。本主题提供有关常见错误以及如何解决这些错误的信息。
管道定义问题
您的管道定义可能格式不正确。这可能会导致 执行失败或作业不准确。可以在创建管道或执行管道时捕获这些错误。如果您的定义未验证,Pipelines 将返回一条错误消息,标识JSON文件格式错误的字符。要修复此问题,请查看使用 SageMaker Python 创建的步骤SDK以确保准确性。
您只能在管道定义中包含一次步骤。因此,步骤不能作为条件步骤和 管道的一部分存在于同一管道中。
检查管道日志
您可以使用以下命令查看步骤的状态:
execution.list_steps()
每个步骤包含以下信息:
-
管道启动ARN的实体,例如 SageMaker 作业ARNARN、模型或模型包ARN。
-
失败原因包括对步骤失败的简要说明。
-
如果该步骤是条件步骤,则包括条件评估为 true 还是 false。
-
如果执行重复使用先前的作业执行,则
CacheHit
会列出源执行。
您还可以在 Amazon SageMaker Studio 界面中查看错误消息和日志。有关如何在 Studio 中查看日志的信息,请参阅查看管道运行的详细信息。
缺少权限
创建管道执行的角色以及在管道执行中创建每个作业的步骤都需要正确权限。如果没有这些权限,您可能无法按预期提交管道执行或运行 SageMaker 作业。要确保您的权限设置正确,请参阅 IAM访问管理。
作业执行错误
由于定义 SageMaker 作业功能的脚本存在问题,因此在执行步骤时可能会遇到问题。每个作业都有一组日 CloudWatch 志。 要从 Studio 查看这些日志,请参阅查看管道运行的详细信息。有关将 CloudWatch 日志与一起使用的信息 SageMaker,请参阅Amazon SageMaker 发送到 Amazon 日志的 CloudWatch 日志组和流。
属性文件错误
如果在管道中不正确地实施属性文件,可能会出现问题。要确保属性文件的实施按预期运行,请参阅在步骤之间传递数据。
将脚本复制到 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=(.*?);'} ], )