本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
用于推理的常见数据格式
亚马逊 SageMaker 对于用于检索在线和小批量预测的 HTTP 负载,算法可接受和生成多种不同的 MIME 类型。你可以使用各种Amazon在运行推理之前转换或预处理记录的服务。您至少需要将数据转换为以下内容:
-
推理请求序列化 (由您处理)
-
推理请求反序列化 (由算法处理)
-
推理响应序列化 (由算法处理)
-
推理响应反序列化 (由您处理)
转换用于推理请求序列化的数据
亚马逊的内容类型选项 SageMaker 算法推理请求包括:text/csv
、application/json
, 和application/x-recordio-protobuf
. 并不支持所有这些类型的算法可以支持其他类型。例如,XGBoost 仅支持此列表中的 text/csv
,但也支持 text/libsvm
。
适用于text/csv
,Body 参数的值invoke_endpoint
应为一个字符串,其中用逗号分隔每个特性的值。例如,具有四个特性的模型的记录可能类似于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 ] } ] }
转换用于推理响应反序列化的数据
亚马逊 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 输入的 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 格式的内容相同。多记录结构是用换行符分隔的每个记录响应对象的串联。内置 KMeans 算法对 2 个输入数据点的响应内容为:
{"distance_to_cluster": 23.40593910217285, "closest_cluster": 0.0} {"distance_to_cluster": 27.250282287597656, "closest_cluster": 0.0}
在运行批量转换时,我们建议使用jsonlines
通过设置响应类型Accept
字段中的CreateTransformJobRequest
到application/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 请求格式
内容类型:application /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 请求格式
内容类型:applice/x-recordio-protobuf
将 Batch 转换结合使用内置算法
在运行批量转换时,如果算法支持,我们建议使用 JSONLINES 响应类型而不是 JSON。这是通过将 CreateTransformJobRequest
中的 Accept
字段设置为 application/jsonlines
来实现的。
在创建转换作业时,必须根据输入数据的 ContentType
来设置 SplitType
。同样,必须根据 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 |
有关特定响应格式的更多信息算法,请参阅: