能否不开启Sagemaker端点数据捕获,用自定义S3数据执行模型监控?
我们目前用Sagemaker部署机器学习模型,但受PII约束无法开启Sagemaker的数据捕获功能来使用Model Data Monitoring。不过我们已经把清理PII后的所有输入和输出备份到了S3存储位置,想知道能不能直接用这些S3路径调度Model Data Monitoring任务?
我们尝试用create_monitoring_schedule接口,按照要求传入batch_transform_input参数,把模型端点输入CSV的S3路径传入,但执行失败,错误信息为:'MonitoringExecutionStatus': 'Failed', 'FailureReason': 'Job inputs had no data'。
测试代码如下:
mon_schedule_name = "DEMO-sagemaker-monitoring-poc-" + strftime( "%Y-%m-%d-%H-%M-%S", gmtime() ) batch_transform_input=BatchTransformInput( data_captured_destination_s3_uri=<S3_location_of_model_input_CSV>, destination="/opt/ml/processing/input", dataset_format=MonitoringDatasetFormat.csv(header=False) ) my_default_monitor.create_monitoring_schedule( monitor_schedule_name=mon_schedule_name, batch_transform_input=batch_transform_input, statistics=my_default_monitor.baseline_statistics(), constraints=my_default_monitor.suggested_constraints(), schedule_cron_expression=CronExpressionGenerator.hourly(), enable_cloudwatch_metrics=True, )
核心原因
你对BatchTransformInput的参数使用有误:data_captured_destination_s3_uri是用来指定批量转换任务生成的标准捕获数据路径,而非直接传入自定义的S3数据文件路径。Sagemaker会按照批量转换的固定格式去查找数据,找不到就会判定为“无输入数据”。
正确实现步骤
要使用自定义S3中的清理后数据执行Model Data Monitoring,需调整输入配置方式,具体如下:
改用
MonitoringInput传入自定义数据
放弃batch_transform_input参数,使用monitoring_inputs传入自定义S3数据,示例代码调整如下:from sagemaker.model_monitor import MonitoringInput, DatasetFormat mon_schedule_name = "DEMO-sagemaker-monitoring-poc-" + strftime( "%Y-%m-%d-%H-%M-%S", gmtime() ) # 定义自定义S3输入配置 custom_monitoring_input = MonitoringInput( s3_data_input_config={ "S3Uri": "<S3_location_of_model_input_CSV>", "LocalPath": "/opt/ml/processing/input", "S3DataType": "S3Prefix", # 若为单个文件则改为"S3Object" "S3InputMode": "File" }, dataset_format=DatasetFormat.csv(header=False) ) my_default_monitor.create_monitoring_schedule( monitor_schedule_name=mon_schedule_name, monitoring_inputs=[custom_monitoring_input], # 替换原batch_transform_input参数 statistics=my_default_monitor.baseline_statistics(), constraints=my_default_monitor.suggested_constraints(), schedule_cron_expression=CronExpressionGenerator.hourly(), enable_cloudwatch_metrics=True, )确认S3路径与权限
- 检查Sagemaker执行角色是否拥有该S3路径的
s3:GetObject和s3:ListBucket权限 - 若使用前缀路径,确保前缀下存在有效CSV文件,且层级嵌套不会导致Sagemaker无法遍历
- 验证CSV文件格式与
dataset_format配置一致(比如是否包含表头)
- 检查Sagemaker执行角色是否拥有该S3路径的
适配数据格式要求
Model Data Monitoring要求输入数据需匹配基线统计的结构:- 数据质量监控:需包含与基线一致的特征列,列数、顺序需对应
- 模型质量监控:需同时包含特征列与预测结果列,需在配置中指定对应列索引
内容的提问来源于stack exchange,提问作者Monica Singh

