Проблемы с прогнозированием времени, не пропорционального количеству деревьев в РФ - PullRequest
0 голосов
/ 04 марта 2019

Моя стратегия оценки заключается в использовании набора моделей случайных лесов, каждая из которых касается некоторого подмножества данных (например, RF_A, если функция == A).Это было сказано в поисках завершенности, так как я не думаю, что это повлияет на мою проблему.

Моя стратегия развертывания:

  • Fit: вернуть рассол, содержащий словарь подходящих sklearn моделей Random Forest
  • Развернуть: загрузить эти словари в память.
  • Вывод: 1) сопоставляет каждое наблюдение с правильной моделью в уже загруженном словаре 2) для каждого наблюдения вычисляет прогнозы, данные каждым деревом в порядкедля расчета элементарного доверительного интервала http://blog.datadive.net/prediction-intervals-for-random-forests/ Обратите внимание, что эта последняя операция занимает больше всего времени в выводе, и время пропорционально количеству деревьев в моем RF (loop wrt trees).

Мой код (мой пользовательский код в lib):

import argparse
import os
import sys
import pandas as pd
from sklearn.externals import joblib
module_path = os.path.abspath('/opt/ml/code')
if module_path not in sys.path:
    sys.path.append(module_path)
from lib import training, prediction
from data.transactions import raw

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('--output-data-dir', type=str, default=os.environ['SM_OUTPUT_DATA_DIR'])
    parser.add_argument('--model-dir', type=str, default=os.environ['SM_MODEL_DIR'])
    args = parser.parse_args()
    grid_models_dict =\
        training.train_models_in_dict(raw_training_data=raw)
    joblib.dump(grid_models_dict, os.path.join(args.model_dir, "model"))
def model_fn(model_dir):
    grid_models_dict = joblib.load(os.path.join(model_dir, "model"))
    return grid_models_dict
def predict_fn(input_data, model):
    predicted = prediction.predict(input_data, model)
    return predicted

Моя проблема:

Скажем, у меня есть два сценария развертывания: один с 100 деревьями / RF и один с 300 деревьями/RF.

Подгонка выполняется без проблем.На S3: сжатые 100 деревьев / РЧ-рассол - 261 Мо и сжатые 300 деревьев / РЧ - 784 Мо.

Развертывание выполняется с некоторыми проблемами: некоторый тайм-аут с некоторыми рабочими с 300 деревьями / РЧ уже сообщалосьawslabs / amazon-sagemaker-examples # 556, но он разворачивается в конце.

Прогноз выполняется:

  • с 100 деревьями / RF за 500 мс, всегда, сто же самое наблюдение
  • с 300 деревьями / RF: на бумаге, с тем же наблюдением, из-за моей природы предсказания, которая является для петли относительно деревьев, я должен был предсказать менее чем за 1 секунду.

  • с 300 деревьями / РФ, на практике с одним и тем же наблюдением: 1) иногда (33% случаев) за 700 мс, 2) иногда (33% случаев) вОт 40 до 50 секунд, 3) и иногда (в 33% случаев) возникает ошибка тайм-аута (тайм-аут вывода ограничен 60 секундами)

Такое поведение сохраняется при развертывании в большем/ недавняя машина.(ml.t2.xlarge to ml.c5.4xlarge)

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

Есть ли какое-либо решение для последовательного прогнозирования с более чем 100деревьями / RF?

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

О проблеме также сообщалось здесь: https://github.com/aws/sagemaker-python-sdk/issues/681

...