在调用多模型的Sagemaker Endpoint时,我收到了它不是多模型的错误信息。我是这样创建它的。
create_endpoint_config_response = client.create_endpoint_config( EndpointConfigName=endpoint_config_name, ProductionVariants=[ { "InstanceType": "ml.m5.large", "InitialVariantWeight": 0.5, "InitialInstanceCount": 1, "ModelName": model_name1, "VariantName": model_name1, }, { "InstanceType": "ml.m5.large", "InitialVariantWeight": 0.5, "InitialInstanceCount": 1, "ModelName": model_name2, "VariantName": model_name2, } ])
我在GUI中确认它确实有多个模型。我是这样调用它的:
response = client.invoke_endpoint( EndpointName=endpoint_name, TargetModel=model_name1, ContentType="text/x-libsvm", Body=payload)
然后收到了这个错误:
ValidationError: 在调用InvokeEndpoint操作时发生错误(ValidationError):Endpointmy-endpoint1不是多模型端点,不支持目标模型头信息。
相同的问题在这里被讨论过,但没有解决方案。
我如何调用多模型端点?
回答:
答案(见GitHub讨论)是这个错误信息根本就是错误的。
为了避免这个错误,必须使用模型的本地文件名(通常是model_filename.tar.gz
形式),而不是模型名称。
文档确实提到了这一点,尽管它缺少关键的细节。
我发现这是最好的例子。请查看该Notebook的最后一部分,其中使用了invoke_endpoint
(而不是Notebook前面使用的预测器)。
关于该模型文件的位置:这个Notebook说明:
在为多模型端点创建模型实体时,容器的ModelDataUrl是端点可调用的模型工件所在的S3前缀。调用模型时将指定S3路径的其余部分。