7

我已经通过 sagemaker 实现了机器学习算法。

我已经为 .net 安装了 SDK,并通过执行以下代码进行了尝试。

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);

通过执行此操作,我收到验证错误为“ 1 validation error detected: Value at 'body' failed to satisfy constraint: Member must not be null

谁能指导我如何以及需要传递哪些输入数据来调用给定的 API?

编辑

此外,我尝试通过提供包含由“.gz”或“.pkl”文件写入的 MemoryStream 的主体参数来尝试,它给了我错误:“错误从 AWS 解组响应,HTTP 内容长度超过 5246976 字节。”

编辑 2018 年 1 月 23 日

此外,我想出了错误消息

错误 - 模型服务器 - 'TypeError' 对象没有属性 'message'

谢谢

4

2 回答 2

1

后来通过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());
于 2018-02-26T09:32:35.373 回答
0

据我所见,您的请求缺少 Guy 建议的 Body 属性和 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

于 2018-02-04T23:05:55.193 回答