我正在尝试使用.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}'
错误消息提示您提供更多信息的网址根本没有帮助。
我相信这是一个数据格式问题,但我找不到解决方案。
以前有人遇到过这种行为吗?
答案 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
希望这会有所帮助!
-汉