Amazon SageMaker批量转换输出未纳入模型监控作业的问题排查
问题原因与解决方案
核心原因
- 默认仅分析捕获的输入数据
SageMaker数据质量监控的BatchTransformInput默认只会读取数据捕获路径下的input/文件夹内容,不会自动包含output/目录。你的输入数据是5列特征,因此监控检测到5列,与包含目标变量的6列基线数据集不匹配,触发列数违规。 - 基线与监控数据集结构不匹配
你的基线是5输入+1目标的6列结构,但当前监控仅分析输入的5列特征,自然不符合基线的列数约束。
解决方案
方案1:配置监控同时读取输入和输出数据
修改BatchTransformInput的参数,明确指定读取input/和output/的文件,并通过join_source将输出列追加到输入数据后,形成与基线一致的6列结构。
调整后的代码示例:
schedule = data_quality_model_monitor.create_monitoring_schedule( monitor_schedule_name="schedule", batch_transform_input=BatchTransformInput( data_captured_destination_s3_uri=f"s3://{default_bucket}/{s3_prefix_destination}", # 指定读取input和output下的所有文件 source=BatchTransformInputSource( input_files="input/*", output_files="output/*" ), destination="/opt/ml/processing/input", dataset_format=MonitoringDatasetFormat.csv(header=False), # 将输出列追加到输入数据之后,匹配基线的6列结构 join_source="Input" ), output_s3_uri=f's3://{default_bucket}/{s3_prefix_output}', statistics=f"s3://{default_bucket}/{s3_prefix_statistics}", constraints=f"s3://{default_bucket}/{s3_prefix_constraints}", schedule_cron_expression=CronExpressionGenerator.hourly(), enable_cloudwatch_metrics=True, )
方案2:验证基线数据集的定义
确认你的基线统计数据(statistics)和约束(constraints)是否基于包含目标变量的6列数据生成:
- 如果基线是仅基于输入特征的5列,需要重新生成匹配输入数据的基线
- 如果基线确实包含目标变量,必须确保监控的输入数据包含完整的6列(输入+输出/目标)
额外检查项
- 确认S3中捕获的
input/文件是5列,output/文件是1列(模型预测结果,对应目标变量),合并后正好6列 - 检查Batch Transform作业的
split_type="Line"配置是否正确,避免行数据被错误拆分/合并 - 如果目标变量原本就在Batch Transform的输入数据中,需确认作业是否在处理时过滤了目标列,导致捕获的
input/文件仅保留5列特征
内容的提问来源于stack exchange,提问作者Fili7.5
相关产品推荐
相关产品推荐

