我在使用Amazon SageMaker进行模型训练和预测。然而,我遇到了InvokeEndpoint每次请求仍然有5MB的限制问题。
但是,我有超过一百万行的不同输入,我知道我应该考虑为每个输入发送单独的请求,或者将输入拆分为适合限制的批次大小,并将每个批次作为单独的请求发送(可能并行发送到同一个端点)。
### 根据1个包含500行的数据框进行预测### 大约500行约为500MB num_predict_rows <- 500 test_sample <- as.matrix(gender_test[1:num_predict_rows, ]) dimnames(test_sample)[[2]] <- NULL library(stringr) predictions <- model_endpoint$predict(data_tbl_test) predictions <- str_split(predictions, pattern = ',', simplify = TRUE) predictions <- as.numedimnames(data_tbl_test)[[2]] <- NULLric(predictions) data_tbl_pred <- cbind(predicted_sample = predictions, data_tbl_test[1:num_predict_rows, ])
我的问题是
如何编写一个函数
- 将输入数据框拆分为少于500行的批次(<5MB)
- 这样我将得到n个数据批次
- 然后我可以根据上面的代码对所有批次进行预测
- 最后,我应该有一个合并了所有n批次预测结果的数据框
提前感谢
回答:
你有没有考虑过在上述使用场景中使用SageMaker批量转换?它可以处理从S3到推理容器的数据流,并且支持几种拆分数据的方法。
请查看https://docs.aws.amazon.com/sagemaker/latest/dg/how-it-works-batch.html以获取概述。如果你正在使用自己的推理容器,请查看https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms-batch-code.html以了解详细信息。
几个示例笔记本:
如果你有详细的问题/需要特定转换作业的支持,请在AWS论坛上联系:https://forums.aws.amazon.com/forum.jspa?forumID=285&start=0