AWS sagemaker invokeEndpoint模型内部错误

时间:2018-08-22 14:08:27

标签: c# .net amazon-web-services amazon-sagemaker

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

formSheet

我在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()); 上遇到的错误

是:

  

Amazon.SageMakerRuntime.Model.ModelErrorException:'服务   返回错误,错误代码为ModelError和HTTP正文:   {“ ErrorCode”:“ INTERNAL_FAILURE_FROM_MODEL”,“ LogStreamArn”:“ arn:aws:logs:eu-central-1:xxxxxxxx:log-group:/ aws / sagemaker / Endpoints / myEndpoint”,“消息”:“已接收   消息为“ \”的服务器出现服务器错误(500)。看到   “ https:// url_to_logs_on_amazon”   帐户xxxxxxxxxxx中的更多信息   信息。“,” OriginalMessage“:”“,” OriginalStatusCode“:500}'

错误消息提示您提供更多信息的网址根本没有帮助。

我相信这是一个数据格式问题,但我找不到解决方案。

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

2 个答案:

答案 0 :(得分:0)

问题取决于所怀疑的数据格式。在我的情况下,我要做的就是将数据作为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());

答案 1 :(得分:0)

您是对的! InvokeEndpointRequest中的内容类型必须与推理图像支持的内容类型之一匹配。这是我们关于此主题的文档页面: https://docs.aws.amazon.com/sagemaker/latest/dg/cdf-inference.html

希望这会有所帮助!

-汉