Прогнозы в SageMaker ::: Функция записи для разделения большого фрейма данных на пакеты для прогнозов - PullRequest
0 голосов
/ 13 декабря 2018

Я использую amazon SageMaker для обучения моделей и прогнозирования.Тем не менее, у меня есть проблемы, InvokeEndpoint все еще имеет ограничение в 5 МБ на запрос.

Однако, я более миллиона строк в качестве отдельных входов, я знаю, что я должен смотреть на отправку отдельных запросов для каждого из них или разделение ввода нанекоторый размер пакета, который удобно помещается под лимит, и отправка каждой партии в виде отдельного запроса (возможно, параллельно одной и той же конечной точке).

### Making predictions based on 1 dataframe of 500 rows
### aproximately 500 rows are ~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 строк (<5 МБ) </li>
  • поэтому у меня будет n пакетов данных
  • , тогда я могу делать прогнозы на основе приведенного выше кода для всех пакетов
  • наконец, у меня должен бытьобъединенный фрейм данных со всеми прогнозами для n bacthes

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 17 декабря 2018

Рассматривали ли вы вместо этого использование SageMaker Batch Transform для приведенного выше варианта использования?Он заботится о передаче ваших данных из 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, если вы привозите свой собственный контейнер логических выводов, чтобы узнать о мелочах.

Несколько образцов ноутбуков:

  1. https://github.com/awslabs/amazon-sagemaker-examples/tree/4cc457faf4873c0ce674b6b5f857b5ee85967bf6/advanced_functionality/batch_transform

  2. https://github.com/awslabs/amazon-sagemaker-examples/blob/c80657daa9d42b7c9b12729d6fa4b825fd980730/sagemaker-python-sdk/scikit_learn_iris/Scikit-learn%20Estimator%20Example%20With%20Batch%20Transform.ipynb

  3. https://github.com/awslabs/amazon-sagemaker-examples/blob/7a2618a669a00b08458504c0055f0a13dd5ccfd7/sagemaker-python-sdk/mxnet_mnist/mxnet_mnist_with_batch_transform.ipynb

Если у вас есть подробные вопросы / вам нужна поддержка для конкретных заданий по преобразованию, обратитесь в AWSфорумы: https://forums.aws.amazon.com/forum.jspa?forumID=285&start=0

0 голосов
/ 13 декабря 2018

Возможно, вам придется настроить это, чтобы структурировать вывод, как вы хотите, но если я понимаю ваш код, это должно делать прогнозы для каждого batch, а затем результаты сохраняются в all_preds.

library(stringr)

# some initialization
N <- NROW(data_tbl_test)
num_predict_rows <- 500 
n <- ceiling(N / num_predict_rows)
k <- 1   # This should be the number of columns in model_endpoint$predict(...)
all_preds = matrix(0, NROW(data_tbl_test), k)   # where the predictions will be stored

# get batch indices
ind <- rep(list(NULL), n)
for (i in 1:n)
    ind[[i]] <- seq((i-1)*500+1, min(i*500, N)) 

# predict on each batch
for (i in 1:n){
    batch = data_tbl_test[ind[[i]],]
    predictions <- model_endpoint$predict(batch)
    predictions <- str_split(predictions, pattern = ',', simplify = TRUE)
    predictions <- as.numedimnames(batch)[[2]] <- NULLric(predictions)
    all_preds[ind[[i]],] = predictions
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...