为什么我会收到 Sagemaker Endpoint 没有多个模型的错误?

Why do I get an error that Sagemaker Endpoint does not have multiple models when it does?

调用多模型 Sagemaker 端点时,我收到一条错误消息,提示它不是多模型。我是这样创建的。

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: An error occurred (ValidationError) when calling the InvokeEndpoint operation: Endpoint my-endpoint1 is not a multi-model endpoint and does not support target model header.

讨论了同样的问题 here,但没有解决。

如何调用多模型端点?

答案(参见 GitHub 讨论)是此错误消息完全错误。

为避免此错误,必须使用模型的本地文件名(通常为 model_filename.tar.gz 形式),而不是模型名称。

documentation 确实这样说,但缺少必要的细节。

我找到了 this to be the best example。请参阅该笔记本的最后一部分,其中使用了 invoke_endpoint(而不是笔记本前面使用的预测器)。

关于那个模型文件的位置:这个Notebook说:

When creating the Model entity for multi-model endpoints, the container's ModelDataUrl is the S3 prefix where the model artifacts that are invokable by the endpoint are located. The rest of the S3 path will be specified when invoking the model.