在aws上导入数据对模型进行训练和推理需要进行数据的序列化、反序列化,模型的序列化、反序列化 (数据流和结构化数据之间的转换)其中数据的反序列化和模型的序列化直接有程序完成,模型的反序列化是可选操作。主要需要用户设置的是数据的序列化。
training data formats
在训练时,使用protobuf recordIO结构能够优化训练过程,这是因为讲结构化的数据转换成了流式数据,能够使用pipe mode。
sagemaker训练时支持file mode和pipe mode。file mode 将所有数据一次性加载到节点上需要大量内存。pipe mode 持续的直接从s3导入数据到程序。
所谓recordIO即为序列化的二进制数据流
讲数据转换为record以后,每个文件中将保存多个record,这样可以持续的从文件中读取数据。
以float32tensor 的schema为例:
message Float32Tensor{
repeated float values =1
repeated uint64 keys =2
repeated uint64 shape =3
}
在推理阶段,需要请求的序列化、反序列化、结果的序列化、反序列化。其中请求的反序列化和结构的序列化由程序自动完成。用户需要关注请求的序列化和结果响应的反序列化
响应的序列化支持txt/csv、json、recordIO-protobuf
protobuf
// 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 response = {
"predictions": [{
"closest_cluster": 5,
"distance_to_cluster": 36.5
}]
}