Я новичок в H2o. Я вызываю метод predBinomial из приложения Java и получаю верные результаты, но ответ занимает много времени. Вот мой сценарий:
Я раскрываю метод веб-службы, в котором я получаю имя класса (modelName) и использую ClassLoader для его загрузки (идея состоит в том, чтобы позволить бизнес-пользователям загружать свои скомпилированные модели на сервер и иметь возможность вызывать службу без какой-либо разработки обязательный):
ClassLoader classLoader = new URLClassLoader(
new URL[]{new URL(String.format("%s%s/", H2O_MODELS_URI, modelName))}, this.getClass().getClassLoader());
затем я создаю необработанную модель:
hex.genmodel.GenModel rawModel = (hex.genmodel.GenModel) classLoader.loadClass(modelName).newInstance();
Создайте экземпляр оболочки:
EasyPredictModelWrapper model = new EasyPredictModelWrapper(rawModel);
Подготовьте RowData (параметры модели, полученные как параметры службы):
RowData row = _h20ParametersMapper.map(modelParameters);
Пока здесь все идет гладко, но когда я звоню
BinomialModelPrediction binomialPrediction = model.predictBinomial(row);
На возврат ответа требуется более 10 секунд, что для нас не работает. Видите ли вы, как я могу добиться некоторой производительности? Я имею в виду библиотеку h2o-genmodel: 3.18.0.3.
Спасибо!
Сколько времени требуется для этой строки данных в среде, в которой была обучена модель (например, R, Python или Flow)? IIUC (@TomKraljevic может меня поправить) он будет предсказывать, используя точно такой же код Java. Так что если в кластере H2O он тоже медленный, то модель просто большая и медленная. А если нет, у вас либо есть ошибка в вашем Java-коде, либо вам не хватает памяти?
@DarrenCook the MOJO очень похож на оценку in-H2O. POJO совсем не похож.
Привет, если я создаю основной класс и запускаю его прямо на сервере, время отклика хорошее: real 0m1.492s user 0m0.985s sys 0m0.406s В приложении Java я получаю правильные результаты, но с плохой производительностью . Я исследую проблему с памятью, о которой вы упомянули. Спасибо
Кроме того, компилятору Java JIT необходимо разогреться при просмотре новых методов. Так что не измеряйте это по самому первому предсказанию. MOJO не так чувствителен к этой разминке, как POJO (поскольку MOJO не является сгенерированным кодом).
Привет, после нескольких тестов решение заключалось в том, чтобы включить POJO в приложение Java, а не загружать его удаленно с помощью загрузчика классов. Теперь у меня время обработки меньше секунды. С Уважением.
Многие люди используют predBinomial в сценариях использования в реальном времени с задержкой в микросекундах или миллисекундах. Похоже, вы либо делаете что-то не так, либо каким-то образом создали слишком большую модель. Еще можно попробовать использовать MOJO вместо POJO. Это может работать намного быстрее для действительно глубоких моделей деревьев.