我已经通过sagemaker实现了机器学习算法。
我已经为.net安装了SDK,并尝试执行以下代码。
$convert_this
通过执行此操作,我收到验证错误为“Uri sagemakerEndPointURI = new Uri("https://runtime.sagemaker.us-east-2.amazonaws.com/endpoints/MyEndpointName/invocations");
Amazon.SageMakerRuntime.Model.InvokeEndpointRequest request = new Amazon.SageMakerRuntime.Model.InvokeEndpointRequest();
request.EndpointName = "MyEndpointName";
AmazonSageMakerRuntimeClient aawsClient = new AmazonSageMakerRuntimeClient(myAwsAccessKey,myAwsSecreteKey);
Amazon.SageMakerRuntime.Model.InvokeEndpointResponse resposnse= aawsClient.InvokeEndpoint(request);
”
任何人都可以指导我如何以及需要传递多少输入数据来调用给定的API?
修改
此外,我尝试通过provinding body参数,其中包含由'.gz'或'.pkl'文件编写的MemoryStream,并且它给出了错误:“错误解组来自AWS的响应,HTTP内容长度超过5246976字节“。
编辑1/23/2018
此外,我提出了错误消息
错误 - 模型服务器 - 'TypeError'对象没有属性'message'
由于
答案 0 :(得分:0)
据我所知,您的请求缺少Body属性,如Guy和ContentType所示,它必须引用您传递给Amazon SageMaker的输入数据类型(请参阅下面的代码;我的输入CSV文件包含一个例子。)
byte[] content = File.ReadAllBytes("input.csv");
Amazon.SageMakerRuntime.Model.InvokeEndpointRequest request = new Amazon.SageMakerRuntime.Model.InvokeEndpointRequest();
request.EndpointName = "linear-learner-xxxxxxxx-xxxx";
request.ContentType = "text/csv";
request.Body = new MemoryStream(content);
AmazonSageMakerRuntimeClient awsClient = new AmazonSageMakerRuntimeClient(accessKey, secretKey);
Amazon.SageMakerRuntime.Model.InvokeEndpointResponse response = awsClient.InvokeEndpoint(request);
string predictions = Encoding.UTF8.GetString(response.Body.ToArray());
关于5246976字节限制,即在单个请求的上下文中API达到允许的最大响应主体长度。 避免这种情况的一种方法是执行多个调用,而不是传递大批量的项目进行预测。
如果您使用的是Amazon SageMaker内置算法,则可以在以下地址检查输入和输出的允许数据格式:
https://docs.aws.amazon.com/sagemaker/latest/dg/common-info-all-im-models.html
答案 1 :(得分:0)
后来通过Encoding.ASCII.GetBytes
解决了它,如下面的代码所示。
byte[] bytes = System.IO.File.ReadAllBytes(@"EXCEL_FILE_PATH");
string listA = "";
while (!reader.EndOfStream)
{
var line = reader.ReadLine();
listA = listA + line + "\n";
}
byte[] bytes = Encoding.ASCII.GetBytes(listA);
request.Body = new MemoryStream(bytes);
InvokeEndpointResponse response = sagemakerRunTimeClient.InvokeEndpoint(request);
string predictions = Encoding.UTF8.GetString(response.Body.ToArray());