我正在处理AWS SageMaker (SKlearn(批量转换作业,其中预测数据很大,因此我需要使用小批量(其中输入.csv被拆分为较小的.csv文件(。
我有这个工作并输出一个带有 id 和预测的.csv文件。但是,我正在尝试实现一种方法,使我可以从批处理转换作业中总共获得三个输出文件 - 这些文件是不同的.csv文件,每个文件以略有不同的方式聚合。
我的问题是我不确定如何指示 SageMaker 输出多个文件。我尝试了以下代码作为entry_point
文件中提交的预测方法:
def output_fn(prediction, accept):
output_one = prepare_one(prediction)
output_two, output_three = prepare_others(output_one)
return output_one, output_two, output_three
我目前正在处理的几个想法/问题:
- 我认为批处理策略会导致问题。由于额外的输出是总预测的聚合,但 SageMaker 将分别处理每个小批量(我假设?
- 我可以简单地使用
boto3
并使用它保存额外的文件,并将 SageMaker 输出视为仅output_one
任何帮助将不胜感激
- 在 SageMaker 批处理中,输出文件是到输入文件的一对一映射,这意味着单个输入不能有多个输出文件。
"如果批量转换作业成功处理输入文件中的所有记录,它将创建一个具有相同名称和 .out 文件扩展名的输出文件。对于多个输入文件,例如 input1.csv 和 input2.csv,输出文件命名为 input1.csv.out 和 input2.csv.out。(https://docs.aws.amazon.com/sagemaker/latest/dg/batch-transform.html#batch-transform-large-datasets(
- 在这种情况下,您可能不需要手动将输入拆分为批次。由于您的输入是CSV,您只需将"SplitType"设置为"行",Batch将自动按换行符拆分您的输入,并将每行作为记录。然后,您可以将"批处理策略"设置为"多记录"并调整"MaxPayloadInMB"以控制迷你批处理的大小。因此,您的模型将在每个 HTTP 推理请求中看到 N 条记录,其中"N * size_of_each_record <= MaxPayloadInMB"。
希望这有帮助!