如何在SageMaker每次新建训练任务时更新自定义模型及原有端点
SageMaker 重训练后更新同一端点的实现方案
SageMaker 中的模型对象本身是不可变的,不需要修改原有模型的artifact配置,通过端点的原生更新能力即可实现同一端点无缝迭代新模型,具体操作步骤如下:
1. 训练完成后注册新模型
在Lambda的训练任务完成回调逻辑中,拿到新生成的模型artifact S3路径后,调用create_model接口注册新的模型对象,模型名可追加时间戳避免重名:
import boto3 from datetime import datetime sagemaker_client = boto3.client('sagemaker') # 替换为实际业务参数 new_model_name = f"custom-model-{datetime.now().strftime('%Y%m%d%H%M')}" role_arn = "arn:aws:iam::你的账号ID:role/SageMaker执行角色名" inference_image_uri = "你的推理镜像ECR地址" new_model_data_url = "本次训练输出的model.tar.gz的S3路径" sagemaker_client.create_model( ModelName=new_model_name, ExecutionRoleArn=role_arn, PrimaryContainer={ 'Image': inference_image_uri, 'ModelDataUrl': new_model_data_url } )
2. 创建新的端点配置
SageMaker端点通过端点配置(Endpoint Config)关联后端模型,每次模型更新需要新建对应的端点配置,实例规格、数量等参数和原有配置保持一致即可:
new_endpoint_config_name = f"custom-endpoint-config-{datetime.now().strftime('%Y%m%d%H%M')}" sagemaker_client.create_endpoint_config( EndpointConfigName=new_endpoint_config_name, ProductionVariants=[ { 'VariantName': 'AllTraffic', 'ModelName': new_model_name, 'InitialInstanceCount': 1, # 与原有端点配置保持一致 'InstanceType': 'ml.t2.medium', # 与原有端点配置保持一致 'InitialVariantWeight': 1.0 } ] )
3. 触发现有端点更新
调用update_endpoint接口将现有端点关联到新的端点配置,SageMaker会自动完成流量切换,全程不会中断端点的对外服务:
existing_endpoint_name = "你已部署的原有端点名称" sagemaker_client.update_endpoint( EndpointName=existing_endpoint_name, EndpointConfigName=new_endpoint_config_name )
可选优化
- 如果需要灰度验证新模型效果,可以在创建端点配置时同时添加新旧两个模型的生产变体,通过调整权重逐步切流,验证无误后再全量切换到新模型
- 不用的历史模型、端点配置可以定期清理,减少资源占用
注意:无需修改或删除原有模型对象,旧模型可作为历史版本留存,新模型出现问题时可以快速切回旧版本配置。
内容的提问来源于stack exchange,提问作者Rahul Misal
相关产品推荐
相关产品推荐

