如何在AWS SageMaker Pipeline中传递DataCaptureConfig参数?
在SageMaker Pipeline中配置数据捕获(DataCaptureConfig)
不用纠结Model.deploy()的限制,在Pipeline里可以通过EndpointConfigStep来配置DataCaptureConfig——因为EndpointConfig是部署Endpoint的核心配置,数据捕获规则本身就是它的组成部分。具体操作如下:
1. 定义DataCaptureConfig实例
先根据需求创建数据捕获配置,比如指定捕获比例、存储路径、要捕获的请求/响应类型:
from sagemaker.model_monitoring import DataCaptureConfig from sagemaker.workflow.parameters import ParameterString # 用参数化配置方便Pipeline复用 data_capture_s3_uri = ParameterString( name="DataCaptureS3Uri", default_value="s3://your-bucket/path/to/data-capture/" ) data_capture_config = DataCaptureConfig( enable_capture=True, sampling_percentage=100, # 捕获100%的请求/响应 destination_s3_uri=data_capture_s3_uri, capture_options=["REQUEST", "RESPONSE"], # 同时捕获请求和响应 csv_content_types=["text/csv"], json_content_types=["application/json"] )
2. 在Pipeline中创建EndpointConfigStep
用这个步骤生成包含数据捕获规则的EndpointConfig,替代直接调用Model.deploy():
from sagemaker.workflow.steps import EndpointConfigStep, EndpointStep # 假设已通过Pipeline训练步骤得到model对象 trained_model = ... # 创建EndpointConfig步骤 endpoint_config_step = EndpointConfigStep( name="Create-Monitored-Endpoint-Config", endpoint_config_name=ParameterString(name="EndpointConfigName", default_value="my-monitored-config"), model_name=trained_model.name, initial_instance_count=1, instance_type="ml.t2.medium", data_capture_config=data_capture_config # 传入数据捕获配置 ) # 创建Endpoint部署步骤 endpoint_step = EndpointStep( name="Deploy-Monitored-Endpoint", endpoint_name=ParameterString(name="EndpointName", default_value="my-monitored-endpoint"), endpoint_config_name=endpoint_config_step.properties.EndpointConfigName )
3. 将步骤加入Pipeline
把上述步骤添加到Pipeline定义中,执行Pipeline后,部署的Endpoint会自动按配置捕获请求和响应数据:
from sagemaker.workflow.pipeline import Pipeline pipeline = Pipeline( name="My-Monitored-Model-Pipeline", parameters=[data_capture_s3_uri, ...], # 其他自定义参数 steps=[..., endpoint_config_step, endpoint_step] # 其他步骤 + 部署步骤 )
部署完成后,你可以基于S3中捕获的数据,创建模型监控基线、设置定期监控计划,实现数据漂移等监控需求。
内容的提问来源于stack exchange,提问作者Guillermo Álvarez
相关产品推荐
相关产品推荐

