Sagemaker 批处理作业

0

【以下的问题经过翻译处理】 我有一个ML模型对大规模数据集进行预测。这个模型是一个PyTorch文本分类器,它负责预测数万条记录的定价。这些预测任务随机到达,且非常不频繁。

我创建了一个标准的Sagemaker终端节点,当我进行客户端侧批处理推理时性能是可以接受的,代码如下:

outputs = []
for batch in create_minibatch(inputs, batch_size=128):
    predictions = predictor.predict(batch)
    outputs.extend(predictions)

使用单个实例,这需要大约1分钟才能处理25k个记录。

我考虑使用SageMaker Batch Transform模式,但创建作业需要大约4-6分钟,所以由于启动成本,似乎失去了扩展到多个实例的好处。是否可以在Sagemaker Batch Transform中使用持久的终端节点?

另一种选择是使用客户端批处理(使用上述代码)-但如果我创建多个实例,我能确定每个批次返回的顺序和我的请求顺序一致吗?在上面的示例中,我需要压缩输入和输出。

是否有更好的方法来处理这个工作负载-我感觉这个方法可能介于API和Batch模式之间?

profile picture
专家
已提问 8 个月前58 查看次数
1 回答
0

【以下的回答经过翻译处理】 你好,

请参考我的回答。

问题:是否可以在使用持续的终端节点时使用Sagemaker批处理?

答:目前SageMaker没有这个选项。

问题:另一种选择是使用客户端批处理(使用上述代码)-但如果我创建多个实例,我能确定每个批次返回的顺序和我的请求顺序一致吗?在上面的示例中,我需要压缩输入和输出。

答:当您将每个批发送到终端节点时,请求是同步的,您的应用程序将立即等待获取响应。响应将按您发送的顺序返回。因此,维护顺序是如何管理您的请求的问题。无论您在终端节点中使用多少个实例。

问题:是否有更好的方法来处理这个工作负载-我感觉这个方法可能介于API和Batch模式之间?

答:这里有两个主要问题:

  1. 成本
  2. 时间

根据您的业务需求和上述两个因素之间的重要性,或者您是否需要在两者之间找到平衡,SageMaker具有下列推理选项可能对您的情况有用:

  1. 实时推理:在此处,您为终端节点预留资源,并保持运行状态,因此当您需要进行预测时,您可以立即使用它而无需等待。成本基于终端节点处于"InService"状态的时间以及实例的数量和类型(请参见定价页面)。
  2. 批量推理:在这里,您发送了大量的记录,您想要获得预测结果。首先需要预配置资源,这可能需要几分钟时间,然后才会进行实际的预测。费用将根据预测所需的时间进行计算。

从理论上讲,在选项1和选项2中,预测所需的时间应该非常接近。然而,在方案1中,您预先配置了终端节点,因此在调用时会感觉更快,因为您的实例已经提前准备好了。但这也伴随着额外的费用。

如果这个选项适合您,您可以在开始预测之前预先配置终端节点,并在预测结束后将其删除。这样您就可以兼顾两种方式的优势。

然而,目前并没有资源是持久性的选项,您可以随时开始预测。这是因为涉及到费用和运营考虑的问题。

profile picture
专家
已回答 8 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则