运行SageMaker Pipeline的ProcessingStep时无法获取日志文件怎么办?
问题根因及排查方案
核心配置错误
你当前使用基础Processor类初始化处理器,该类仅适用于自定义镜像内置了启动逻辑的场景,不会自动执行你传入的code参数指定的query_exec.py脚本,因此脚本根本没有运行,自然不会生成任何输出日志。
需要改用ScriptProcessor类初始化处理器,修改后代码示例:
from sagemaker.processing import ScriptProcessor, ProcessingInput, ProcessingOutput from sagemaker.workflow.steps import ProcessingStep from sagemaker.workflow.pipeline import Pipeline import json processing_image_uri = 'my-image-uri' # 替换为ScriptProcessor processor = ScriptProcessor( role = role, image_uri = processing_image_uri, instance_count = 1, instance_type = "ml.t3.medium", command = ["python3"] # 指定执行脚本的命令前缀 ) processing_output = ProcessingOutput( destination = "s3://mybucket/tmp/athena_sagemaker", source='/opt/ml/processing/output', output_name = 'datasetcreation-(1)', s3_upload_mode = "Continuous" ) step_process = ProcessingStep( name="DatasetCreation", processor=processor, outputs = [processing_output], code = "query_exec.py", ) pipeline_name = "DatasetCreation" pipeline = Pipeline( name=pipeline_name, steps=[step_process], ) json.loads(pipeline.definition()) pipeline.upsert(role_arn = role) execution = pipeline.start() execution.describe() execution.wait()
日志获取说明
SageMaker Processing作业的日志分为两类,存储路径各有不同:
- 系统运行日志/stdout/stderr输出:默认自动存储在两个位置
- 账号默认SageMaker S3桶:路径格式为
s3://sagemaker-<区域>-<你的账号ID>/<处理作业名>/logs/ - CloudWatch Logs:日志组为
/aws/sagemaker/ProcessingJobs,对应作业名的日志流可查看实时运行输出
- 账号默认SageMaker S3桶:路径格式为
- 脚本自定义生成的日志文件:需要你在
query_exec.py中明确将日志写入到容器内的/opt/ml/processing/output目录下,该目录下的所有内容才会被同步到你配置的s3://mybucket/tmp/athena_sagemaker路径
额外排查点
如果修改为ScriptProcessor后仍无输出,按如下顺序排查:
- 确认你的执行角色拥有目标S3路径的
s3:PutObject权限,权限不足会导致输出同步失败 - 确认你的自定义镜像符合SageMaker Processing容器规范,能正确识别SageMaker挂载的目录路径和传入的脚本参数
- 可以先单独调用
processor.run()直接启动处理作业,跳过Pipeline先验证作业本身的运行逻辑是否正常,排除Pipeline层面的配置问题
内容的提问来源于stack exchange,提问作者hahilas
相关产品推荐
相关产品推荐

