AWS sagemaker invokeEndpoint 模型内部错误

AWS sagemaker invokeEndpoint model internal error

我正在尝试使用 .NET 向 sagemaker 上的模型发送请求。我使用的代码是:

var data = File.ReadAllBytes(@"C:\path\file.csv");
var credentials = new Amazon.Runtime.BasicAWSCredentials("","");
var awsClient = new AmazonSageMakerRuntimeClient(credentials, RegionEndpoint.EUCentral1);
var request = new Amazon.SageMakerRuntime.Model.InvokeEndpointRequest
{
    EndpointName = "EndpointName",
    ContentType = "text/csv",
    Body = new MemoryStream(data),
};

var response = awsClient.InvokeEndpoint(request);
var predictions = Encoding.UTF8.GetString(response.Body.ToArray());

我遇到的错误 awsClient.InvokeEndpoint(request)

是:

Amazon.SageMakerRuntime.Model.ModelErrorException: 'The service returned an error with Error Code ModelError and HTTP Body: {"ErrorCode":"INTERNAL_FAILURE_FROM_MODEL","LogStreamArn":"arn:aws:logs:eu-central-1:xxxxxxxx:log-group:/aws/sagemaker/Endpoints/myEndpoint","Message":"Received server error (500) from model with message \"\". See "https:// url_to_logs_on_amazon" in account xxxxxxxxxxx for more information.","OriginalMessage":"","OriginalStatusCode":500}'

错误消息提示的 url 根本没有帮助。

我认为这是数据格式问题,但我找不到解决方案。

有没有人以前遇到过这种行为?

疑似数据格式问题。在我的例子中,我所要做的就是将数据作为 json 序列化字符串数组发送并使用 ContentType = application/json 因为端点上的 python 函数 运行 负责发送预测器的数据只接受 json 字符串。

解决此问题的另一种方法是修改负责输入处理的 python 函数以接受所有内容类型并以预测器能够理解的方式修改数据。

我的案例的工作代码示例:

        var data = new string[] { "this movie was extremely good .", "the plot was very boring ." };
        var serializedData = JsonConvert.SerializeObject(data);

        var credentials = new Amazon.Runtime.BasicAWSCredentials("","");
        var awsClient = new AmazonSageMakerRuntimeClient(credentials, RegionEndpoint.EUCentral1);
        var request = new Amazon.SageMakerRuntime.Model.InvokeEndpointRequest
        {
            EndpointName = "endpoint",
            ContentType = "application/json",
            Body = new MemoryStream(Encoding.ASCII.GetBytes(serializedData)),
        };

        var response = awsClient.InvokeEndpoint(request);
        var predictions = Encoding.UTF8.GetString(response.Body.ToArray());