我想将一个新模型部署到现有的AWS SageMaker端点。模型由不同的管道进行训练,并作为model .tar.gz存储在S3中。sagemaker端点配置将此作为模型数据URL指向。然而,Sagemaker不重新加载模型,我不知道如何说服它这样做。
我想将一个新模型部署到一个AWS SageMaker端点。模型由不同的管道进行训练,并作为model .tar.gz存储在S3中。我使用AWS CDK配置了Sagemaker Endpoint。现在,在训练管道中,我希望允许数据科学家有选择地将他们新训练的模型上传到端点进行测试。我不想创建新模型或端点配置。此外,我不想改变基础设施(AWS CDK)代码。
模型被上传到S3位置,sagemaker端点配置使用该位置作为model_data_url
。因此,它应该使用新的模式。但是它没有加载它。我知道Sagemaker在容器内缓存模型,但我不知道如何强制新的加载。
该文档建议将模型tarball以另一个名称存储在同一个S3文件夹中,并修改代码以调用模型。这对我的申请来说是不可能的。我不希望Sagemaker默认为旧模型,一旦TargetModel
参数不存在。
这是我上传模型到S3后目前正在做的事情。即使端点转换到正在更新状态,它也不会强制重新加载模型:
def update_sm_endpoint(endpoint_name: str) -> Dict[str, Any]:
"""Forces the sagemaker endpoint to reload model from s3"""
sm = boto3.client("sagemaker")
return sm.update_endpoint_weights_and_capacities(
EndpointName=endpoint_name,
DesiredWeightsAndCapacities=[
{"VariantName": "main", "DesiredWeight": 1},
],
)
任何想法?
如果要修改在SageMaker端点中调用的模型,则必须创建一个新的模型对象和一个新的端点配置。然后调用update_endpoint,这不会改变端点的名称。
评论你的问题和SageMaker文档:
-
您提到的文档("该文档建议将模型tarball以另一个名称存储在同一个S3文件夹中,并更改代码以调用模型">)是针对SageMaker Multi-Model Endpoint的,这是一个在同一端点中并行存储多个模型的服务。这不是你需要的。您需要一个单模型SageMaker端点,并使用
进行更新。 -
同样,您提到的API
sm.update_endpoint_weights_and_capacities
对于您想要的是不需要的(除非您想要从模型1到模型2的流量逐步推出)。