用于推理的常用数据格式 - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

用于推理的常用数据格式

Amazon SageMaker 算法接受并生成用于检索在线和小批量预测的HTTP有效载荷的几MIME种不同类型。在运行推理之前,您可以使用多个 Amazon 服务来转换或预处理记录。您至少需要将数据转换为以下内容:

  • 推理请求序列化 (由您处理)

  • 推理请求反序列化 (由算法处理)

  • 推理响应序列化 (由算法处理)

  • 推理响应反序列化 (由您处理)

转换数据以进行推理请求序列化

Amazon SageMaker 算法推理请求的内容类型选项包括:text/csvapplication/json、和。application/x-recordio-protobuf并不支持所有这些类型的算法可以支持其他类型。XGBoost,例如,仅支持text/csv此列表中的内容,但也支持text/libsvm

对于 text/csvinvoke_endpoint 的 Body 参数的值应为一个字符串,其中使用逗号分隔各个特征的值。例如,具有 4 个特征的模型的记录可能类似于 1.5,16.0,14,23.0。在获得推理结果之前,还应对数据执行已对训练数据执行的任何转换。特征的顺序很重要,并且必须保持不变。

application/json更加灵活,并提供了多种可能的格式供开发人员在其应用程序中使用。在较高的层面上 JavaScript,有效载荷可能如下所示:

let request = { // Instances might contain multiple rows that predictions are sought for. "instances": [ { // Request and algorithm specific inference parameters. "configuration": {}, // Data in the specific format required by the algorithm. "data": { "<field name>": dataElement } } ] }

对于指定 dataElement,您可使用以下选项:

协议缓冲区等效

// Has the same format as the protocol buffers implementation described for training. let dataElement = { "keys": [], "values": [], "shape": [] }

简单数值向量

// An array containing numeric values is treated as an instance containing a // single dense vector. let dataElement = [1.5, 16.0, 14.0, 23.0] // It will be converted to the following representation by the SDK. let converted = { "features": { "values": dataElement } }

对于多个记录

let request = { "instances": [ // First instance. { "features": [ 1.5, 16.0, 14.0, 23.0 ] }, // Second instance. { "features": [ -2.0, 100.2, 15.2, 9.2 ] } ] }

转换用于推理响应反序列化的数据

Amazon SageMaker 算法JSON以多种布局返回。从较高的层面上说,结构为:

let response = { "predictions": [{ // Fields in the response object are defined on a per algorithm-basis. }] }

对于各种算法而言,预测中包含的字段是不同的。以下是 k-means 算法的输出示例。

单记录推理

let response = { "predictions": [{ "closest_cluster": 5, "distance_to_cluster": 36.5 }] }

多记录推理

let response = { "predictions": [ // First instance prediction. { "closest_cluster": 5, "distance_to_cluster": 36.5 }, // Second instance prediction. { "closest_cluster": 2, "distance_to_cluster": 90.3 } ] }

具有 protobuf 输入的多记录推理

{ "features": [], "label": { "closest_cluster": { "values": [ 5.0 ] // e.g. the closest centroid/cluster was 1.0 }, "distance_to_cluster": { "values": [ 36.5 ] } }, "uid": "abc123", "metadata": "{ "created_at": '2017-06-03' }" }

SageMaker 算法还支持该JSONLINES格式,其中每条记录的响应内容与JSON格式中的响应内容相同。多记录结构是由每条记录的响应对象组成的集合,这些对象由换行符分隔。2 个输入数据点的内置KMeans算法的响应内容为:

{"distance_to_cluster": 23.40593910217285, "closest_cluster": 0.0} {"distance_to_cluster": 27.250282287597656, "closest_cluster": 0.0}

在运行批量转换时,建议通过将 CreateTransformJobRequest 中的 Accept 字段设置为 application/jsonlines 来使用 jsonlines 响应类型。

所有算法的通用请求格式

大多数算法使用以下许多推理请求格式。

JSON请求格式

内容类型:应用程序/ JSON

密集格式

let request = { "instances": [ { "features": [1.5, 16.0, 14.0, 23.0] } ] } let request = { "instances": [ { "data": { "features": { "values": [ 1.5, 16.0, 14.0, 23.0] } } } ] }

稀疏格式

{ "instances": [ {"data": {"features": { "keys": [26, 182, 232, 243, 431], "shape": [2000], "values": [1, 1, 1, 4, 1] } } }, {"data": {"features": { "keys": [0, 182, 232, 243, 431], "shape": [2000], "values": [13, 1, 1, 4, 1] } } }, ] }

JSONLINES请求格式

内容类型:应用程序/ JSONLINES

密集格式

密集格式的单个记录可以表示为:

{ "features": [1.5, 16.0, 14.0, 23.0] }

或者:

{ "data": { "features": { "values": [ 1.5, 16.0, 14.0, 23.0] } }

稀疏格式

稀疏格式的单个记录表示为:

{"data": {"features": { "keys": [26, 182, 232, 243, 431], "shape": [2000], "values": [1, 1, 1, 4, 1] } } }

多条记录表示为一组单记录表示形式,用换行符分隔:

{"data": {"features": { "keys": [0, 1, 3], "shape": [4], "values": [1, 4, 1] } } } { "data": { "features": { "values": [ 1.5, 16.0, 14.0, 23.0] } } { "features": [1.5, 16.0, 14.0, 23.0] }

CSV请求格式

内容类型:text/CSV;label_size=0

注意

CSV不支持分解机器。

RECORDIO请求格式

内容类型:应用程序/ x-recordio-protobuf

使用内置算法进行批量转换

在运行批处理转换时,如果算法支持JSON,我们建议使用JSONLINES响应类型代替。为此,请将中的Accept字段设置CreateTransformJobRequestapplication/jsonlines

创建转换作业时,SplitType必须根据输入数据ContentType进行设置。同样,必须根据 CreateTransformJobRequest 中的 Accept 字段来相应地设置 AssembleWith。使用下表来设置这些字段:

ContentType 推荐 SplitType
application/x-recordio-protobuf RecordIO
text/csv Line
application/jsonlines Line
application/json None
application/x-image None
image/* None
Accept 推荐 AssembleWith
application/x-recordio-protobuf None
application/json None
application/jsonlines Line

有关特定算法的响应格式的更多信息,请参阅以下内容: